完成功能,等待测试
This commit is contained in:
parent
d428b715b0
commit
a1a4fb183b
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"board_ac695x_demo_cfg.h": "c"
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,130 @@
|
||||
#include "kt.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "music_player.h"
|
||||
|
||||
enum {
|
||||
KT_LED_IDLE = 0, /* 空闲慢闪 */
|
||||
KT_LED_PLAY, /* 播放常亮 */
|
||||
KT_LED_FAIL, /* 播放失败快闪 */
|
||||
};
|
||||
|
||||
/* 定时器 50ms:慢闪 1s灭/1s亮,快闪 100ms灭/100ms亮 */
|
||||
#define KT_LED_SLOW_HALF 20
|
||||
#define KT_LED_FAST_HALF 2
|
||||
|
||||
typedef struct _kt_var_ {
|
||||
int kt_timer;
|
||||
int t_cnt;
|
||||
u8 led_mode;
|
||||
u8 active_ch; /* 1~6, 0=无按键播放会话 */
|
||||
} _kt_var;
|
||||
|
||||
static _kt_var kt_var;
|
||||
#define __this (&kt_var)
|
||||
|
||||
static const char *const kt_file_tab[6] = {
|
||||
"/01.mp3", "/02.mp3", "/03.mp3", "/04.mp3", "/05.mp3", "/06.mp3",
|
||||
};
|
||||
|
||||
static void kt_led_set_mode(u8 mode)
|
||||
{
|
||||
__this->led_mode = mode;
|
||||
__this->t_cnt = 0;
|
||||
if (mode == KT_LED_PLAY) {
|
||||
BT_LED_ON();
|
||||
}
|
||||
}
|
||||
|
||||
static void kt_audio_all_off(void)
|
||||
{
|
||||
AUDIO_OUT_CH1_OFF();
|
||||
AUDIO_OUT_CH2_OFF();
|
||||
AUDIO_OUT_CH3_OFF();
|
||||
AUDIO_OUT_CH4_OFF();
|
||||
}
|
||||
|
||||
static void kt_channel_outputs_off(u8 ch)
|
||||
{
|
||||
switch (ch) {
|
||||
case 1:
|
||||
AUDIO_OUT_CH1_OFF();
|
||||
VOLTAGE_OUT_CH1_OFF();
|
||||
VLED_OUT_CH1_OFF();
|
||||
break;
|
||||
case 2:
|
||||
AUDIO_OUT_CH2_OFF();
|
||||
VOLTAGE_OUT_CH2_OFF();
|
||||
VLED_OUT_CH2_OFF();
|
||||
break;
|
||||
case 3:
|
||||
AUDIO_OUT_CH3_OFF();
|
||||
VOLTAGE_OUT_CH3_OFF();
|
||||
VLED_OUT_CH3_OFF();
|
||||
break;
|
||||
case 4:
|
||||
AUDIO_OUT_CH4_OFF();
|
||||
VOLTAGE_OUT_CH4_OFF();
|
||||
VLED_OUT_CH4_OFF();
|
||||
break;
|
||||
case 5:
|
||||
VLED_OUT_CH5_OFF();
|
||||
break;
|
||||
case 6:
|
||||
VLED_OUT_CH6_OFF();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void kt_channel_outputs_on(u8 ch)
|
||||
{
|
||||
/* 音频通道互斥:先全关再开对应通道(仅 1~4 有音频/电压脚) */
|
||||
kt_audio_all_off();
|
||||
VOLTAGE_OUT_CH1_OFF();
|
||||
VOLTAGE_OUT_CH2_OFF();
|
||||
VOLTAGE_OUT_CH3_OFF();
|
||||
VOLTAGE_OUT_CH4_OFF();
|
||||
VLED_OUT_CH1_OFF();
|
||||
VLED_OUT_CH2_OFF();
|
||||
VLED_OUT_CH3_OFF();
|
||||
VLED_OUT_CH4_OFF();
|
||||
VLED_OUT_CH5_OFF();
|
||||
VLED_OUT_CH6_OFF();
|
||||
|
||||
switch (ch) {
|
||||
case 1:
|
||||
AUDIO_OUT_CH1_ON();
|
||||
VOLTAGE_OUT_CH1_ON();
|
||||
VLED_OUT_CH1_ON();
|
||||
break;
|
||||
case 2:
|
||||
AUDIO_OUT_CH2_ON();
|
||||
VOLTAGE_OUT_CH2_ON();
|
||||
VLED_OUT_CH2_ON();
|
||||
break;
|
||||
case 3:
|
||||
AUDIO_OUT_CH3_ON();
|
||||
VOLTAGE_OUT_CH3_ON();
|
||||
VLED_OUT_CH3_ON();
|
||||
break;
|
||||
case 4:
|
||||
AUDIO_OUT_CH4_ON();
|
||||
VOLTAGE_OUT_CH4_ON();
|
||||
VLED_OUT_CH4_ON();
|
||||
break;
|
||||
case 5:
|
||||
/* 硬件无 AUDIO/VOLTAGE 通道5,仅 VLED */
|
||||
VLED_OUT_CH5_ON();
|
||||
break;
|
||||
case 6:
|
||||
/* 硬件无 AUDIO/VOLTAGE 通道6,仅 VLED */
|
||||
VLED_OUT_CH6_ON();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void kt_boot_init(void)
|
||||
{
|
||||
@ -21,40 +146,177 @@ void kt_boot_init(void)
|
||||
gpio_set_die(IO_PORTA_05,1);
|
||||
|
||||
//CS8406 TX EN
|
||||
//ch1
|
||||
gpio_set_pull_down(IO_PORTB_07,0);
|
||||
gpio_set_pull_up(IO_PORTB_07,0);
|
||||
gpio_set_direction(IO_PORTB_07,0);
|
||||
gpio_set_output_value(IO_PORTB_07,0);
|
||||
//ch2
|
||||
gpio_set_pull_down(IO_PORTB_08,0);
|
||||
gpio_set_pull_up(IO_PORTB_08,0);
|
||||
gpio_set_direction(IO_PORTB_08,0);
|
||||
gpio_set_output_value(IO_PORTB_08,0);
|
||||
//ch3
|
||||
gpio_set_pull_down(IO_PORTB_09,0);
|
||||
gpio_set_pull_up(IO_PORTB_09,0);
|
||||
gpio_set_direction(IO_PORTB_09,0);
|
||||
gpio_set_output_value(IO_PORTB_09,0);
|
||||
//ch4
|
||||
gpio_set_pull_down(IO_PORTB_10,0);
|
||||
gpio_set_pull_up(IO_PORTB_10,0);
|
||||
gpio_set_direction(IO_PORTB_10,0);
|
||||
gpio_set_output_value(IO_PORTB_10,0);
|
||||
gpio_set_pull_down(AUDIO_OUT_CHANNEL1,0);
|
||||
gpio_set_pull_up(AUDIO_OUT_CHANNEL1,0);
|
||||
gpio_set_direction(AUDIO_OUT_CHANNEL1,0);
|
||||
gpio_set_output_value(AUDIO_OUT_CHANNEL1,0);
|
||||
|
||||
//earphone enable
|
||||
//ch1
|
||||
gpio_set_pull_down(AUDIO_OUT_CHANNEL2,0);
|
||||
gpio_set_pull_up(AUDIO_OUT_CHANNEL2,0);
|
||||
gpio_set_direction(AUDIO_OUT_CHANNEL2,0);
|
||||
gpio_set_output_value(AUDIO_OUT_CHANNEL2,0);
|
||||
|
||||
gpio_set_pull_down(AUDIO_OUT_CHANNEL3,0);
|
||||
gpio_set_pull_up(AUDIO_OUT_CHANNEL3,0);
|
||||
gpio_set_direction(AUDIO_OUT_CHANNEL3,0);
|
||||
gpio_set_output_value(AUDIO_OUT_CHANNEL3,0);
|
||||
|
||||
gpio_set_pull_down(AUDIO_OUT_CHANNEL4,0);
|
||||
gpio_set_pull_up(AUDIO_OUT_CHANNEL4,0);
|
||||
gpio_set_direction(AUDIO_OUT_CHANNEL4,0);
|
||||
gpio_set_output_value(AUDIO_OUT_CHANNEL4,0);
|
||||
|
||||
//voltage output
|
||||
gpio_set_pull_down(VOLTAGE_OUT_CHANNEL1,0);
|
||||
gpio_set_pull_up(VOLTAGE_OUT_CHANNEL1,0);
|
||||
gpio_set_direction(VOLTAGE_OUT_CHANNEL1,0);
|
||||
gpio_set_output_value(VOLTAGE_OUT_CHANNEL1,0);
|
||||
|
||||
gpio_set_pull_down(VOLTAGE_OUT_CHANNEL2,0);
|
||||
gpio_set_pull_up(VOLTAGE_OUT_CHANNEL2,0);
|
||||
gpio_set_direction(VOLTAGE_OUT_CHANNEL2,0);
|
||||
gpio_set_output_value(VOLTAGE_OUT_CHANNEL2,0);
|
||||
|
||||
gpio_set_pull_down(VOLTAGE_OUT_CHANNEL3,0);
|
||||
gpio_set_pull_up(VOLTAGE_OUT_CHANNEL3,0);
|
||||
gpio_set_direction(VOLTAGE_OUT_CHANNEL3,0);
|
||||
gpio_set_output_value(VOLTAGE_OUT_CHANNEL3,0);
|
||||
|
||||
gpio_set_pull_down(VOLTAGE_OUT_CHANNEL4,0);
|
||||
gpio_set_pull_up(VOLTAGE_OUT_CHANNEL4,0);
|
||||
gpio_set_direction(VOLTAGE_OUT_CHANNEL4,0);
|
||||
gpio_set_output_value(VOLTAGE_OUT_CHANNEL4,0);
|
||||
|
||||
//vled output
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL1,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL1,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL1,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL1,0);
|
||||
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL2,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL2,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL2,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL2,0);
|
||||
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL3,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL3,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL3,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL3,0);
|
||||
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL4,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL4,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL4,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL4,0);
|
||||
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL5,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL5,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL5,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL5,0);
|
||||
|
||||
gpio_set_pull_down(VLED_OUT_CHANNEL6,0);
|
||||
gpio_set_pull_up(VLED_OUT_CHANNEL6,0);
|
||||
gpio_set_direction(VLED_OUT_CHANNEL6,0);
|
||||
gpio_set_output_value(VLED_OUT_CHANNEL6,0);
|
||||
|
||||
//bt led
|
||||
gpio_set_pull_down(BT_LED_PIN,0);
|
||||
gpio_set_pull_up(BT_LED_PIN,0);
|
||||
gpio_set_direction(BT_LED_PIN,0);
|
||||
gpio_set_output_value(BT_LED_PIN,0);
|
||||
}
|
||||
|
||||
static void timer_cb(void *priv)
|
||||
{
|
||||
u8 half;
|
||||
|
||||
if (__this->led_mode == KT_LED_PLAY) {
|
||||
BT_LED_ON();
|
||||
return;
|
||||
}
|
||||
|
||||
half = (__this->led_mode == KT_LED_FAIL) ? KT_LED_FAST_HALF : KT_LED_SLOW_HALF;
|
||||
__this->t_cnt++;
|
||||
if (__this->t_cnt <= half) {
|
||||
BT_LED_OFF();
|
||||
} else if (__this->t_cnt <= (half * 2)) {
|
||||
BT_LED_ON();
|
||||
} else {
|
||||
__this->t_cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void start_time_base(u32 time_base_ms)
|
||||
{
|
||||
if (__this->kt_timer) {
|
||||
sys_timer_del(__this->kt_timer);
|
||||
}
|
||||
__this->t_cnt = 0;
|
||||
__this->kt_timer = sys_timer_add(NULL, timer_cb, time_base_ms);
|
||||
}
|
||||
|
||||
void kt_init(void)
|
||||
{
|
||||
__this->active_ch = 0;
|
||||
kt_led_set_mode(KT_LED_IDLE);
|
||||
//CS8406 RST
|
||||
gpio_set_output_value(IO_PORTA_06, 1);
|
||||
|
||||
//CS8406 TX EN
|
||||
gpio_set_output_value(IO_PORTB_07,1);
|
||||
gpio_set_output_value(IO_PORTB_08,1);
|
||||
gpio_set_output_value(IO_PORTB_09,1);
|
||||
gpio_set_output_value(IO_PORTB_10,1);
|
||||
/* 默认关闭各音频通道,按键播放时再打开对应通道 */
|
||||
kt_audio_all_off();
|
||||
start_time_base(50);
|
||||
}
|
||||
|
||||
/* 播放结束/出错/拔卡:关闭对应输出,返回1表示是按键播放会话 */
|
||||
int kt_music_play_end_handler(void)
|
||||
{
|
||||
if (__this->active_ch == 0) {
|
||||
return 0;
|
||||
}
|
||||
printf("kt_music_play_end_handler ch=%d\n", __this->active_ch);
|
||||
kt_channel_outputs_off(__this->active_ch);
|
||||
__this->active_ch = 0;
|
||||
kt_led_set_mode(KT_LED_IDLE);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* 优先 sd1/0x.mp3,其次 udisk0/0x.mp3;
|
||||
* 成功则打开对应音频/电压/VLED,失败不做任何反应;
|
||||
* 播完由 kt_music_play_end_handler 关闭输出。
|
||||
*/
|
||||
int kt_key_event_handler(u16 key)
|
||||
{
|
||||
u8 ch;
|
||||
int err;
|
||||
const char *path;
|
||||
|
||||
if (key < KEY_USER_KEY_1 || key > KEY_USER_KEY_6) {
|
||||
return MUSIC_PLAYER_ERR_NULL;
|
||||
}
|
||||
|
||||
ch = (u8)(key - KEY_USER_KEY_1 + 1);
|
||||
path = kt_file_tab[ch - 1];
|
||||
printf("kt_key_event_handler key=%d ch=%d path=%s\n", key, ch, path);
|
||||
|
||||
/* 若上一首按键播放未结束,先关掉上一通道输出 */
|
||||
if (__this->active_ch) {
|
||||
kt_channel_outputs_off(__this->active_ch);
|
||||
__this->active_ch = 0;
|
||||
}
|
||||
|
||||
err = music_player_play_by_path((char *)"sd1", path);
|
||||
if (err != MUSIC_PLAYER_SUCC) {
|
||||
err = music_player_play_by_path((char *)"udisk0", path);
|
||||
}
|
||||
|
||||
if (err == MUSIC_PLAYER_SUCC) {
|
||||
kt_channel_outputs_on(ch);
|
||||
__this->active_ch = ch;
|
||||
kt_led_set_mode(KT_LED_PLAY);
|
||||
return MUSIC_PLAYER_SUCC;
|
||||
}
|
||||
|
||||
/* 播放失败:通道不动作,BT_LED 快闪 */
|
||||
printf("kt play fail ch=%d err=%d\n", ch, err);
|
||||
kt_led_set_mode(KT_LED_FAIL);
|
||||
return MUSIC_PLAYER_ERR_NULL;
|
||||
}
|
||||
@ -3,9 +3,65 @@
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
#define BT_LED_PIN IO_PORTB_03
|
||||
#define BT_LED_ON() (gpio_set_output_value(BT_LED_PIN,1))
|
||||
#define BT_LED_OFF() (gpio_set_output_value(BT_LED_PIN,0))
|
||||
|
||||
#define AUDIO_OUT_CHANNEL1 IO_PORTB_07
|
||||
#define AUDIO_OUT_CHANNEL2 IO_PORTB_08
|
||||
#define AUDIO_OUT_CHANNEL3 IO_PORTB_09
|
||||
#define AUDIO_OUT_CHANNEL4 IO_PORTB_10
|
||||
|
||||
#define AUDIO_OUT_CH1_ON() (gpio_set_output_value(AUDIO_OUT_CHANNEL1,1))
|
||||
#define AUDIO_OUT_CH2_ON() (gpio_set_output_value(AUDIO_OUT_CHANNEL2,1))
|
||||
#define AUDIO_OUT_CH3_ON() (gpio_set_output_value(AUDIO_OUT_CHANNEL3,1))
|
||||
#define AUDIO_OUT_CH4_ON() (gpio_set_output_value(AUDIO_OUT_CHANNEL4,1))
|
||||
|
||||
#define AUDIO_OUT_CH1_OFF() (gpio_set_output_value(AUDIO_OUT_CHANNEL1,0))
|
||||
#define AUDIO_OUT_CH2_OFF() (gpio_set_output_value(AUDIO_OUT_CHANNEL2,0))
|
||||
#define AUDIO_OUT_CH3_OFF() (gpio_set_output_value(AUDIO_OUT_CHANNEL3,0))
|
||||
#define AUDIO_OUT_CH4_OFF() (gpio_set_output_value(AUDIO_OUT_CHANNEL4,0))
|
||||
|
||||
#define VOLTAGE_OUT_CHANNEL1 IO_PORTA_09
|
||||
#define VOLTAGE_OUT_CHANNEL2 IO_PORTA_10
|
||||
#define VOLTAGE_OUT_CHANNEL3 IO_PORTB_02
|
||||
#define VOLTAGE_OUT_CHANNEL4 IO_PORTB_11
|
||||
|
||||
#define VOLTAGE_OUT_CH1_ON() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL1,1))
|
||||
#define VOLTAGE_OUT_CH2_ON() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL2,1))
|
||||
#define VOLTAGE_OUT_CH3_ON() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL3,1))
|
||||
#define VOLTAGE_OUT_CH4_ON() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL4,1))
|
||||
|
||||
#define VOLTAGE_OUT_CH1_OFF() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL1,0))
|
||||
#define VOLTAGE_OUT_CH2_OFF() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL2,0))
|
||||
#define VOLTAGE_OUT_CH3_OFF() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL3,0))
|
||||
#define VOLTAGE_OUT_CH4_OFF() (gpio_set_output_value(VOLTAGE_OUT_CHANNEL4,0))
|
||||
|
||||
#define VLED_OUT_CHANNEL1 IO_PORTA_12
|
||||
#define VLED_OUT_CHANNEL2 IO_PORTC_00
|
||||
#define VLED_OUT_CHANNEL3 IO_PORTC_01
|
||||
#define VLED_OUT_CHANNEL4 IO_PORTC_02
|
||||
#define VLED_OUT_CHANNEL5 IO_PORTC_03
|
||||
#define VLED_OUT_CHANNEL6 IO_PORTB_00
|
||||
|
||||
#define VLED_OUT_CH1_ON() (gpio_set_output_value(VLED_OUT_CHANNEL1,1))
|
||||
#define VLED_OUT_CH2_ON() (gpio_set_output_value(VLED_OUT_CHANNEL2,1))
|
||||
#define VLED_OUT_CH3_ON() (gpio_set_output_value(VLED_OUT_CHANNEL3,1))
|
||||
#define VLED_OUT_CH4_ON() (gpio_set_output_value(VLED_OUT_CHANNEL4,1))
|
||||
#define VLED_OUT_CH5_ON() (gpio_set_output_value(VLED_OUT_CHANNEL5,1))
|
||||
#define VLED_OUT_CH6_ON() (gpio_set_output_value(VLED_OUT_CHANNEL6,1))
|
||||
|
||||
#define VLED_OUT_CH1_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL1,0))
|
||||
#define VLED_OUT_CH2_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL2,0))
|
||||
#define VLED_OUT_CH3_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL3,0))
|
||||
#define VLED_OUT_CH4_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL4,0))
|
||||
#define VLED_OUT_CH5_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL5,0))
|
||||
#define VLED_OUT_CH6_OFF() (gpio_set_output_value(VLED_OUT_CHANNEL6,0))
|
||||
|
||||
// tx rst PA6
|
||||
// tx audio status PA7
|
||||
|
||||
int kt_key_event_handler(u16 key);
|
||||
int kt_music_play_end_handler(void);
|
||||
void kt_boot_init(void);
|
||||
void kt_init(void);
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
//*********************************************************************************//
|
||||
// app 配置 //
|
||||
//*********************************************************************************//
|
||||
#define TCFG_APP_BT_EN 1
|
||||
#define TCFG_APP_BT_EN 0
|
||||
#define TCFG_APP_MUSIC_EN 1
|
||||
#define TCFG_APP_LINEIN_EN 0
|
||||
#define TCFG_APP_FM_EN 0
|
||||
@ -42,7 +42,7 @@
|
||||
//*********************************************************************************//
|
||||
// UART配置 //
|
||||
//*********************************************************************************//
|
||||
#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
|
||||
#define TCFG_UART0_ENABLE DISABLE_THIS_MOUDLE //串口打印模块使能
|
||||
#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
|
||||
#define TCFG_UART0_TX_PORT IO_PORT_DP //串口发送脚配置
|
||||
#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
|
||||
@ -142,7 +142,7 @@
|
||||
// USB 配置 //
|
||||
//*********************************************************************************//
|
||||
#define TCFG_PC_ENABLE TCFG_APP_PC_EN//PC模块使能
|
||||
#define TCFG_UDISK_ENABLE DISABLE_THIS_MOUDLE//U盘模块使能
|
||||
#define TCFG_UDISK_ENABLE ENABLE_THIS_MOUDLE//U盘模块使能
|
||||
#define TCFG_OTG_USB_DEV_EN BIT(0)//USB0 = BIT(0) USB1 = BIT(1)
|
||||
|
||||
#define TCFG_VIR_UDISK_ENABLE 0//ENABLE_THIS_MOUDLE
|
||||
|
||||
@ -12,22 +12,22 @@
|
||||
const u16 bt_key_ad_table[KEY_AD_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
//单击 //长按 //hold //抬起 //双击 //三击
|
||||
[0] = {
|
||||
KEY_CHANGE_MODE, KEY_POWEROFF, KEY_POWEROFF_HOLD, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_1, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[1] = {
|
||||
KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_2, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[2] = {
|
||||
KEY_MUSIC_PP, KEY_CALL_HANG_UP, KEY_NULL, KEY_NULL, KEY_CALL_LAST_NO, KEY_NULL
|
||||
KEY_USER_KEY_3, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[3] = {
|
||||
KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_4, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[4] = {
|
||||
KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_REVERB_OPEN, KEY_NULL
|
||||
KEY_USER_KEY_5, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[5] = {
|
||||
KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_ENC_START, KEY_NULL
|
||||
KEY_USER_KEY_6, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[6] = {
|
||||
KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
@ -129,25 +129,25 @@ const u16 linein_key_ad_table[KEY_AD_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
const u16 music_key_ad_table[KEY_AD_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
//单击 //长按 //hold //抬起 //双击 //三击
|
||||
[0] = {
|
||||
KEY_CHANGE_MODE, KEY_POWEROFF, KEY_POWEROFF_HOLD, KEY_NULL, KEY_MUSIC_PLAYE_REC_FOLDER_SWITCH, KEY_NULL
|
||||
KEY_USER_KEY_1, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[1] = {
|
||||
KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_2, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[2] = {
|
||||
KEY_MUSIC_PP, KEY_MUSIC_CHANGE_DEV, KEY_NULL, KEY_NULL, KEY_MUSIC_CHANGE_REPEAT, KEY_NULL
|
||||
KEY_USER_KEY_3, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[3] = {
|
||||
KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_4, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[4] = {
|
||||
KEY_MUSIC_PLAYE_PREV_FOLDER, KEY_MUSIC_FR, KEY_MUSIC_FR, KEY_NULL, KEY_REVERB_OPEN, KEY_NULL
|
||||
KEY_USER_KEY_5, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[5] = {
|
||||
KEY_MUSIC_PLAYE_NEXT_FOLDER, KEY_MUSIC_FF, KEY_MUSIC_FF, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_USER_KEY_6, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[6] = {
|
||||
KEY_MUSIC_PLAYER_AB_REPEAT_SWITCH, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
[7] = {
|
||||
KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
#define CONFIG_DEBUG_LIB(x) (x & LIB_DEBUG)
|
||||
|
||||
#define CONFIG_DEBUG_ENABLE
|
||||
//#define CONFIG_DEBUG_ENABLE
|
||||
|
||||
#ifndef CONFIG_DEBUG_ENABLE
|
||||
//#define CONFIG_DEBUG_LITE_ENABLE //轻量级打印开关, 默认关闭
|
||||
|
||||
@ -172,6 +172,12 @@ enum {
|
||||
KEY_IR_NUM_8,
|
||||
KEY_IR_NUM_9,//中间不允许插入
|
||||
//在这里增加元素
|
||||
KEY_USER_KEY_1,
|
||||
KEY_USER_KEY_2,
|
||||
KEY_USER_KEY_3,
|
||||
KEY_USER_KEY_4,
|
||||
KEY_USER_KEY_5,
|
||||
KEY_USER_KEY_6,
|
||||
//
|
||||
KEY_HID_MODE_SWITCH,
|
||||
KEY_HID_TAKE_PICTURE,
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include "clock_cfg.h"
|
||||
#include "system/fs/fs.h"
|
||||
#include "user_api/app_status_api.h"
|
||||
#include "kt.h"
|
||||
|
||||
/*************************************************************
|
||||
此文件函数主要是music模式按键处理和事件处理
|
||||
@ -48,13 +49,15 @@
|
||||
static u8 music_idle_flag = 1;
|
||||
|
||||
/// 模式参数结构体
|
||||
struct __music_task_parm {
|
||||
struct __music_task_parm
|
||||
{
|
||||
u8 type;
|
||||
int val;
|
||||
};
|
||||
|
||||
/// music模式控制结构体
|
||||
struct __music {
|
||||
struct __music
|
||||
{
|
||||
struct __music_task_parm task_parm;
|
||||
u16 file_err_counter; // 错误文件统计
|
||||
u8 file_play_direct; // 0:下一曲, 1:上一曲
|
||||
@ -69,20 +72,21 @@ struct __music music_hdl;
|
||||
|
||||
static struct __breakpoint *breakpoint = NULL;
|
||||
|
||||
|
||||
static void music_player_play_start(void);
|
||||
|
||||
/// 设备提示音使能
|
||||
#define MUSIC_DEVICE_TONE_EN 0
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
struct __dev_tone {
|
||||
struct __dev_tone
|
||||
{
|
||||
char *logo;
|
||||
char *phy_logo;
|
||||
char *tone_path;
|
||||
u16 index;
|
||||
};
|
||||
|
||||
enum {
|
||||
enum
|
||||
{
|
||||
/// 0x1000起始为了不要跟提示音的IDEX_TONE_重叠了
|
||||
DEVICE_INDEX_UDISK = 0x1000,
|
||||
DEVICE_INDEX_UDISK_REC,
|
||||
@ -102,17 +106,21 @@ const struct __dev_tone device_tone[] = {
|
||||
static void music_tone_play_end_callback(void *priv, int flag);
|
||||
int music_device_tone_play(char *logo)
|
||||
{
|
||||
if (logo == NULL) {
|
||||
if (logo == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
printf("__this->device_tone_dev = %s, logo =%s\n", __this->device_tone_dev, logo);
|
||||
char *phy_logo = dev_manager_get_phy_logo(dev_manager_find_spec(logo, 0));
|
||||
if (phy_logo && (strcmp(__this->device_tone_dev, phy_logo) == 0)) {
|
||||
if (phy_logo && (strcmp(__this->device_tone_dev, phy_logo) == 0))
|
||||
{
|
||||
log_i("[%s, %d]the same phy dev, no need device tone!!\n", logo, __LINE__);
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < ARRAY_SIZE(device_tone); i++) {
|
||||
if (strcmp(device_tone[i].logo, logo) == 0) {
|
||||
for (int i = 0; i < ARRAY_SIZE(device_tone); i++)
|
||||
{
|
||||
if (strcmp(device_tone[i].logo, logo) == 0)
|
||||
{
|
||||
log_i("[%s, %d]device_tone play \n", logo, __LINE__);
|
||||
memset(__this->device_tone_dev, 0, sizeof(__this->device_tone_dev));
|
||||
memcpy(__this->device_tone_dev, device_tone[i].phy_logo, strlen(device_tone[i].phy_logo));
|
||||
@ -125,8 +133,6 @@ int music_device_tone_play(char *logo)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if TCFG_LFN_EN
|
||||
static u8 music_file_name[128] = {0}; // 长文件名
|
||||
u16 music_file_name_len = 0;
|
||||
@ -137,7 +143,8 @@ u16 music_file_name_len = 0;
|
||||
|
||||
const char *music_file_get_cur_name(int *len, int *is_unicode)
|
||||
{
|
||||
if (music_file_name[0] == '\\' && music_file_name[1] == 'U') {
|
||||
if (music_file_name[0] == '\\' && music_file_name[1] == 'U')
|
||||
{
|
||||
*is_unicode = 1;
|
||||
*len = music_file_name_len - 2;
|
||||
return (const char *)(music_file_name + 2);
|
||||
@ -147,26 +154,28 @@ const char *music_file_get_cur_name(int *len, int *is_unicode)
|
||||
return (const char *)music_file_name;
|
||||
}
|
||||
|
||||
|
||||
static void music_set_dev_sync_mode(char *logo, u8 mode)
|
||||
{
|
||||
if (logo) {
|
||||
if (logo)
|
||||
{
|
||||
struct imount *mount_hdl = NULL;
|
||||
u8 async_mode = mode;
|
||||
|
||||
if ((!memcmp(logo, "udisk0", strlen("udisk0")))
|
||||
|| (!memcmp(logo, "udisk0_rec", strlen("udisk0_rec")))) {
|
||||
if ((!memcmp(logo, "udisk0", strlen("udisk0"))) || (!memcmp(logo, "udisk0_rec", strlen("udisk0_rec"))))
|
||||
{
|
||||
struct file_dec_hdl *dec = get_file_dec_hdl();
|
||||
if (dec) {
|
||||
if (dec)
|
||||
{
|
||||
mount_hdl = dev_manager_get_mount_hdl(dev_manager_find_spec(logo, 0));
|
||||
if (mount_hdl) {
|
||||
if (dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_APE
|
||||
|| dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_FLAC
|
||||
|| dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_DTS
|
||||
|| dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_WAV) {
|
||||
if (mount_hdl)
|
||||
{
|
||||
if (dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_APE || dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_FLAC || dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_DTS || dec->file_dec.decoder.dec_ops->coding_type == AUDIO_CODING_WAV)
|
||||
{
|
||||
/// 指定解码格式开启该功能
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_SET_ASYNC_MODE, (u32)async_mode);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 不指定的解码格式不开启
|
||||
async_mode = 0;
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_SET_ASYNC_MODE, (u32)async_mode);
|
||||
@ -174,10 +183,13 @@ static void music_set_dev_sync_mode(char *logo, u8 mode)
|
||||
printf("udisk, set usb ASYNC = %d\n", async_mode);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// 不是udisk, 如果udisk在线, 将udisk设置成非AYSNC_MODE
|
||||
mount_hdl = dev_manager_get_mount_hdl(dev_manager_find_spec("udisk0", 0));
|
||||
if (mount_hdl) {
|
||||
if (mount_hdl)
|
||||
{
|
||||
async_mode = 0;
|
||||
printf("not udisk, set usb ASYNC = 0\n");
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_SET_ASYNC_MODE, (u32)async_mode);
|
||||
@ -186,7 +198,6 @@ static void music_set_dev_sync_mode(char *logo, u8 mode)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 解码成功回调
|
||||
@param priv:私有参数, parm:暂时未用
|
||||
@ -213,19 +224,21 @@ static void music_player_play_success(void *priv, int parm)
|
||||
log_i("file indir = %d\n", music_player_get_fileindir_number());
|
||||
music_file_name_len = fget_name(music_player_get_file_hdl(), music_file_name, sizeof(music_file_name));
|
||||
int unicode = 0;
|
||||
if ((music_file_name[0] == '\\') && (music_file_name[1] == 'U')) {
|
||||
if ((music_file_name[0] == '\\') && (music_file_name[1] == 'U'))
|
||||
{
|
||||
unicode = 1;
|
||||
music_file_name_len -= 2;
|
||||
log_i("cur file = %s, len = %d, unicode = %d\n", music_file_name + 2, music_file_name_len, unicode);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
log_i("cur file = %s, len = %d, unicode = %d\n", music_file_name, music_file_name_len, unicode);
|
||||
}
|
||||
log_i("\n");
|
||||
|
||||
|
||||
|
||||
/// save breakpoint, 只保存文件信息
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 0) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 0) == true)
|
||||
{
|
||||
breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
|
||||
@ -236,7 +249,6 @@ static void music_player_play_success(void *priv, int parm)
|
||||
/// smartbox info update
|
||||
SMARTBOX_UPDATE(MUSIC_FUNCTION_MASK,
|
||||
BIT(MUSIC_INFO_ATTR_STATUS) | BIT(MUSIC_INFO_ATTR_FILE_NAME) | BIT(MUSIC_INFO_ATTR_FILE_PLAY_MODE));
|
||||
|
||||
}
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 解码结束回调处理
|
||||
@ -281,35 +293,44 @@ static int music_player_scandisk_break(void)
|
||||
char *logo = NULL;
|
||||
char *evt_logo = NULL;
|
||||
app_task_get_msg(msg, ARRAY_SIZE(msg), 0);
|
||||
switch (msg[0]) {
|
||||
switch (msg[0])
|
||||
{
|
||||
case APP_MSG_SYS_EVENT:
|
||||
event = (struct sys_event *)(&msg[1]);
|
||||
switch (event->type) {
|
||||
switch (event->type)
|
||||
{
|
||||
case SYS_DEVICE_EVENT:
|
||||
switch ((u32)event->arg) {
|
||||
switch ((u32)event->arg)
|
||||
{
|
||||
case DRIVER_EVENT_FROM_SD0:
|
||||
case DRIVER_EVENT_FROM_SD1:
|
||||
case DRIVER_EVENT_FROM_SD2:
|
||||
evt_logo = (char *)event->u.dev.value;
|
||||
case DEVICE_EVENT_FROM_OTG:
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG) {
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG)
|
||||
{
|
||||
evt_logo = (char *)"udisk0";
|
||||
}
|
||||
/// 设备上下线底层推出的设备逻辑盘符是跟跟音乐设备一致的(音乐/录音设备, 详细看接口注释)
|
||||
int str_len = 0;
|
||||
logo = music_player_get_phy_dev(&str_len);
|
||||
/// 响应设备插拔打断
|
||||
if (event->u.dev.event == DEVICE_EVENT_OUT) {
|
||||
if (event->u.dev.event == DEVICE_EVENT_OUT)
|
||||
{
|
||||
log_i("__func__ = %s logo=%s evt_logo=%s %d\n", __FUNCTION__, logo, evt_logo, str_len);
|
||||
if (logo && (0 == memcmp(logo, evt_logo, str_len))) {
|
||||
if (logo && (0 == memcmp(logo, evt_logo, str_len)))
|
||||
{
|
||||
/// 相同的设备才响应
|
||||
__this->scandisk_break = 1;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 响应新设备上线
|
||||
__this->scandisk_break = 1;
|
||||
}
|
||||
if (__this->scandisk_break == 0) {
|
||||
if (__this->scandisk_break == 0)
|
||||
{
|
||||
log_i("__func__ = %s DEVICE_EVENT_OUT TODO\n", __FUNCTION__);
|
||||
dev_status_event_filter(event);
|
||||
log_i("__func__ = %s DEVICE_EVENT_OUT OK\n", __FUNCTION__);
|
||||
@ -318,12 +339,14 @@ static int music_player_scandisk_break(void)
|
||||
}
|
||||
break;
|
||||
case SYS_BT_EVENT:
|
||||
if (bt_background_event_handler_filter(event)) {
|
||||
if (bt_background_event_handler_filter(event))
|
||||
{
|
||||
__this->scandisk_break = 1;
|
||||
}
|
||||
break;
|
||||
case SYS_KEY_EVENT:
|
||||
switch (event->u.key.event) {
|
||||
switch (event->u.key.event)
|
||||
{
|
||||
case KEY_CHANGE_MODE:
|
||||
/// 响应切换模式事件
|
||||
__this->scandisk_break = 1;
|
||||
@ -331,7 +354,8 @@ static int music_player_scandisk_break(void)
|
||||
// 其他按键case 在这里增加
|
||||
}
|
||||
/// 因为TWS转发sys_event_notify需要用原始的按键序号, 未经过按键表处理, 所以这里要特殊处理
|
||||
if (__this->scandisk_break) {
|
||||
if (__this->scandisk_break)
|
||||
{
|
||||
app_task_put_key_msg(event->u.key.event, (int)event->u.key.value);
|
||||
printf("key break scan!!");
|
||||
return 1;
|
||||
@ -340,12 +364,15 @@ static int music_player_scandisk_break(void)
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (__this->scandisk_break) {
|
||||
if (__this->scandisk_break)
|
||||
{
|
||||
/// 查询到需要打断的事件, 返回1, 并且重新推送一次该事件,跑主循环处理流程
|
||||
sys_event_notify(event);
|
||||
printf("scandisk_break!!!!!!\n");
|
||||
return 1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -361,11 +388,13 @@ static void scan_enter(struct __dev *dev)
|
||||
{
|
||||
#if SD_BAUD_RATE_CHANGE_WHEN_SCAN
|
||||
struct imount *mount_hdl = dev_manager_get_mount_hdl(dev);
|
||||
if (mount_hdl) {
|
||||
if ((!memcmp(dev_manager_get_logo(dev), "sd0", strlen("sd0")))
|
||||
|| (!memcmp(dev_manager_get_logo(dev), "sd1", strlen("sd1")))) {
|
||||
if (mount_hdl)
|
||||
{
|
||||
if ((!memcmp(dev_manager_get_logo(dev), "sd0", strlen("sd0"))) || (!memcmp(dev_manager_get_logo(dev), "sd1", strlen("sd1"))))
|
||||
{
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_GET_SPEED, (u32)&__this->old_speed); // 获取sd速度
|
||||
if (SD_BAUD_RATE_CHANGE_WHEN_SCAN > __this->old_speed) { //设定速度大于获取的才加速
|
||||
if (SD_BAUD_RATE_CHANGE_WHEN_SCAN > __this->old_speed)
|
||||
{ // 设定速度大于获取的才加速
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_SET_SPEED, SD_BAUD_RATE_CHANGE_WHEN_SCAN);
|
||||
}
|
||||
}
|
||||
@ -378,10 +407,12 @@ static void scan_exit(struct __dev *dev)
|
||||
{
|
||||
#ifdef SD_BAUD_RATE_CHANGE_WHEN_SCAN
|
||||
struct imount *mount_hdl = dev_manager_get_mount_hdl(dev);
|
||||
if (mount_hdl) {
|
||||
if ((!memcmp(dev_manager_get_logo(dev), "sd0", strlen("sd0")))
|
||||
|| (!memcmp(dev_manager_get_logo(dev), "sd1", strlen("sd1")))) {
|
||||
if (SD_BAUD_RATE_CHANGE_WHEN_SCAN > __this->old_speed) {
|
||||
if (mount_hdl)
|
||||
{
|
||||
if ((!memcmp(dev_manager_get_logo(dev), "sd0", strlen("sd0"))) || (!memcmp(dev_manager_get_logo(dev), "sd1", strlen("sd1"))))
|
||||
{
|
||||
if (SD_BAUD_RATE_CHANGE_WHEN_SCAN > __this->old_speed)
|
||||
{
|
||||
dev_ioctl(mount_hdl->dev.fd, IOCTL_SET_SPEED, __this->old_speed); // 恢复原速
|
||||
}
|
||||
}
|
||||
@ -408,15 +439,16 @@ static void music_tone_play_end_callback(void *priv, int flag)
|
||||
u32 index = (u32)priv;
|
||||
char *logo = NULL;
|
||||
|
||||
if (APP_MUSIC_TASK != app_get_curr_task()) {
|
||||
if (APP_MUSIC_TASK != app_get_curr_task())
|
||||
{
|
||||
log_error("tone callback task out \n");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (index) {
|
||||
switch (index)
|
||||
{
|
||||
case IDEX_TONE_MUSIC:
|
||||
///提示音播放结束, 启动播放器播放
|
||||
music_player_play_start();
|
||||
/// 进入 music 后不自动播放,保持静默
|
||||
break;
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
case DEVICE_INDEX_UDISK:
|
||||
@ -425,8 +457,10 @@ static void music_tone_play_end_callback(void *priv, int flag)
|
||||
case DEVICE_INDEX_SD0_REC:
|
||||
case DEVICE_INDEX_SD1:
|
||||
case DEVICE_INDEX_SD1_REC:
|
||||
for (int i = 0; i < ARRAY_SIZE(device_tone); i++) {
|
||||
if (index == device_tone[i].index) {
|
||||
for (int i = 0; i < ARRAY_SIZE(device_tone); i++)
|
||||
{
|
||||
if (index == device_tone[i].index)
|
||||
{
|
||||
logo = device_tone[i].logo;
|
||||
break;
|
||||
}
|
||||
@ -439,7 +473,6 @@ static void music_tone_play_end_callback(void *priv, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 模式解码错误处理
|
||||
@param err:错误码,详细错误码描述请看MUSIC_PLAYER错误码表枚举
|
||||
@ -451,15 +484,18 @@ void music_player_err_deal(int err)
|
||||
{
|
||||
u16 msg = KEY_NULL;
|
||||
char *logo = NULL;
|
||||
if (err != MUSIC_PLAYER_ERR_NULL && err != MUSIC_PLAYER_ERR_DECODE_FAIL) {
|
||||
if (err != MUSIC_PLAYER_ERR_NULL && err != MUSIC_PLAYER_ERR_DECODE_FAIL)
|
||||
{
|
||||
__this->file_err_counter = 0; /// 清除错误文件累计
|
||||
}
|
||||
|
||||
if (err != MUSIC_PLAYER_ERR_NULL && err != MUSIC_PLAYER_SUCC) {
|
||||
if (err != MUSIC_PLAYER_ERR_NULL && err != MUSIC_PLAYER_SUCC)
|
||||
{
|
||||
log_e("music player err = %d\n", err);
|
||||
}
|
||||
|
||||
switch (err) {
|
||||
switch (err)
|
||||
{
|
||||
case MUSIC_PLAYER_SUCC:
|
||||
__this->file_err_counter = 0;
|
||||
break;
|
||||
@ -470,35 +506,48 @@ void music_player_err_deal(int err)
|
||||
msg = KEY_MUSIC_PLAYER_QUIT; // 退出音乐模式
|
||||
break;
|
||||
case MUSIC_PLAYER_ERR_DECODE_FAIL:
|
||||
if (__this->file_err_counter >= music_player_get_file_total()) {
|
||||
if (__this->file_err_counter >= music_player_get_file_total())
|
||||
{
|
||||
__this->file_err_counter = 0;
|
||||
dev_manager_set_valid_by_logo(music_player_get_dev_cur(), 0); /// 将设备设置为无效设备
|
||||
if (dev_manager_get_total(1) == 0) {//参数为1 :获取所有有效设备 参数0:获取所有设备
|
||||
msg = KEY_MUSIC_PLAYER_QUIT;//没有设备了,退出音乐模式
|
||||
} else {
|
||||
msg = KEY_MUSIC_AUTO_NEXT_DEV;///所有文件都是错误的, 切换到下一个设备
|
||||
if (dev_manager_get_total(1) == 0)
|
||||
{ // 参数为1 :获取所有有效设备 参数0:获取所有设备
|
||||
/// 无设备时留在 music 空闲,等待插卡
|
||||
}
|
||||
} else {
|
||||
else
|
||||
{
|
||||
/// 不自动切设备播放
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
__this->file_err_counter++;
|
||||
if (__this->file_play_direct == 0) {
|
||||
if (__this->file_play_direct == 0)
|
||||
{
|
||||
msg = KEY_MUSIC_NEXT; // 播放下一曲
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = KEY_MUSIC_PREV; // 播放上一曲
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MUSIC_PLAYER_ERR_DEV_NOFOUND:
|
||||
log_e("MUSIC_PLAYER_ERR_DEV_NOFOUND \n");
|
||||
if (dev_manager_get_total(1) == 0) {//参数为1 :获取所有有效设备 参数0:获取所有设备
|
||||
msg = KEY_MUSIC_PLAYER_QUIT;///没有设备在线, 退出音乐模式
|
||||
} else {
|
||||
msg = KEY_MUSIC_PLAYER_START;///没有找到指定设备, 播放之前的活动设备
|
||||
if (dev_manager_get_total(1) == 0)
|
||||
{ // 参数为1 :获取所有有效设备 参数0:获取所有设备
|
||||
/// 无设备时留在 music 空闲,等待插卡
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 不自动切设备播放
|
||||
}
|
||||
break;
|
||||
|
||||
case MUSIC_PLAYER_ERR_FSCAN:
|
||||
/// 需要结合music_player_scandisk_break中处理的标志位处理
|
||||
if (__this->scandisk_break) {
|
||||
if (__this->scandisk_break)
|
||||
{
|
||||
__this->scandisk_break = 0;
|
||||
/// 此处不做任何处理, 打断的事件已经重发, 由重发事件执行后续处理
|
||||
break;
|
||||
@ -507,53 +556,68 @@ void music_player_err_deal(int err)
|
||||
case MUSIC_PLAYER_ERR_DEV_OFFLINE:
|
||||
log_e("MUSIC_PLAYER_ERR_DEV_OFFLINE \n");
|
||||
logo = music_player_get_dev_cur();
|
||||
if (dev_manager_online_check_by_logo(logo, 1)) {
|
||||
if (dev_manager_online_check_by_logo(logo, 1))
|
||||
{
|
||||
/// 如果错误失败在线, 并且是播放过程中产生的,先记录下断点
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true)
|
||||
{
|
||||
music_player_stop(0); // 先停止,防止下一步操作VM卡顿
|
||||
breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
if (err == MUSIC_PLAYER_ERR_FSCAN) {
|
||||
if (err == MUSIC_PLAYER_ERR_FSCAN)
|
||||
{
|
||||
dev_manager_set_valid_by_logo(logo, 0); /// 将设备设置为无效设备
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// 针对读错误, 因为时间推到应用层有延时导致下一个模式判断不正常, 此处需要将设备卸载
|
||||
dev_manager_unmount(logo);
|
||||
}
|
||||
}
|
||||
if (dev_manager_get_total(1) == 0) {
|
||||
if (dev_manager_get_total(1) == 0)
|
||||
{
|
||||
app_status_handler(APP_STATUS_MUSIC_QUIT);
|
||||
msg = KEY_MUSIC_PLAYER_QUIT;///没有设备在线, 退出音乐模式
|
||||
} else {
|
||||
msg = KEY_MUSIC_AUTO_NEXT_DEV;///切换设备
|
||||
/// 无设备时留在 music 空闲,等待插卡
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 不自动切设备播放
|
||||
}
|
||||
break;
|
||||
case MUSIC_PLAYER_ERR_FILE_NOFOUND:
|
||||
/// 查找文件有扫盘的可能,也需要结合music_player_scandisk_break中处理的标志位处理
|
||||
if (__this->scandisk_break) {
|
||||
if (__this->scandisk_break)
|
||||
{
|
||||
__this->scandisk_break = 0;
|
||||
/// 此处不做任何处理, 打断的事件已经重发, 由重发事件执行后续处理
|
||||
break;
|
||||
}
|
||||
case MUSIC_PLAYER_ERR_PARM:
|
||||
logo = music_player_get_dev_cur();
|
||||
if (dev_manager_online_check_by_logo(logo, 1)) {
|
||||
if (music_player_get_file_total()) {
|
||||
if (dev_manager_online_check_by_logo(logo, 1))
|
||||
{
|
||||
if (music_player_get_file_total())
|
||||
{
|
||||
msg = KEY_MUSIC_PLAYER_PLAY_FIRST; /// 有文件,播放第一个文件
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev_manager_get_total(1) == 0) {
|
||||
msg = KEY_MUSIC_PLAYER_QUIT;//没有设备了,退出音乐模式
|
||||
} else {
|
||||
msg = KEY_MUSIC_AUTO_NEXT_DEV;
|
||||
if (dev_manager_get_total(1) == 0)
|
||||
{
|
||||
/// 无设备时留在 music 空闲,等待插卡
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 不自动切设备播放
|
||||
}
|
||||
break;
|
||||
case MUSIC_PLAYER_ERR_FILE_READ: // 文件读错误
|
||||
msg = KEY_MUSIC_NEXT; // 播放下一曲
|
||||
break;
|
||||
}
|
||||
if (msg != KEY_NULL) {
|
||||
if (msg != KEY_NULL)
|
||||
{
|
||||
app_task_put_key_msg(msg, 0);
|
||||
}
|
||||
}
|
||||
@ -579,42 +643,101 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
|
||||
log_i("music task msg = %d\n", msg[0]);
|
||||
|
||||
switch (msg[0]) {
|
||||
switch (msg[0])
|
||||
{
|
||||
case KEY_MUSIC_DEVICE_TONE_END:
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
logo = (char *)msg[1];
|
||||
log_i("KEY_MUSIC_DEVICE_TONE_END %s\n", logo);
|
||||
if (logo) {
|
||||
if (true == breakpoint_vm_read(breakpoint, logo)) {
|
||||
if (logo)
|
||||
{
|
||||
if (true == breakpoint_vm_read(breakpoint, logo))
|
||||
{
|
||||
err = music_player_play_by_breakpoint(logo, breakpoint);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
err = music_player_play_first_file(logo);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case KEY_USER_KEY_1:
|
||||
printf("KEY_USER_KEY_1\n");
|
||||
//优先播放sd1/01.mp3,其次播放udisk0/01.mp3,并打开音频通道1,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL1,2-打开VLED_OUT_CH1
|
||||
//播放完成后关闭VOLTAGE_CHANNEL1,VLED_OUT_CH1
|
||||
err = kt_key_event_handler(KEY_USER_KEY_1);
|
||||
break;
|
||||
case KEY_USER_KEY_2:
|
||||
printf("KEY_USER_KEY_2\n");
|
||||
//优先播放sd1/02.mp3,其次播放udisk0/02.mp3,并打开音频通道2,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL2,2-打开VLED_OUT_CH2
|
||||
//播放完成后关闭VOLTAGE_CHANNEL2,VLED_OUT_CH2
|
||||
err = kt_key_event_handler(KEY_USER_KEY_2);
|
||||
break;
|
||||
case KEY_USER_KEY_3:
|
||||
printf("KEY_USER_KEY_3\n");
|
||||
//优先播放sd1/03.mp3,其次播放udisk0/03.mp3,并打开音频通道3,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL3,2-打开VLED_OUT_CH3
|
||||
//播放完成后关闭VOLTAGE_CHANNEL3,VLED_OUT_CH3
|
||||
err = kt_key_event_handler(KEY_USER_KEY_3);
|
||||
break;
|
||||
case KEY_USER_KEY_4:
|
||||
printf("KEY_USER_KEY_4\n");
|
||||
//优先播放sd1/04.mp3,其次播放udisk0/04.mp3,并打开音频通道4,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL4,2-打开VLED_OUT_CH4
|
||||
//播放完成后关闭VOLTAGE_CHANNEL4,VLED_OUT_CH4
|
||||
err = kt_key_event_handler(KEY_USER_KEY_4);
|
||||
break;
|
||||
case KEY_USER_KEY_5:
|
||||
printf("KEY_USER_KEY_5\n");
|
||||
//优先播放sd1/05.mp3,其次播放udisk0/05.mp3,并打开音频通道5,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL5,2-打开VLED_OUT_CH5
|
||||
//播放完成后关闭VOLTAGE_CHANNEL5,VLED_OUT_CH5
|
||||
err = kt_key_event_handler(KEY_USER_KEY_5);
|
||||
break;
|
||||
case KEY_USER_KEY_6:
|
||||
printf("KEY_USER_KEY_6\n");
|
||||
//优先播放sd1/06.mp3,其次播放udisk0/06.mp3,并打开音频通道6,如果播放失败则不做任何反应
|
||||
//如果播放成功:1-打开VOLTAGE_CHANNEL6,2-打开VLED_OUT_CH6
|
||||
//播放完成后关闭VOLTAGE_CHANNEL6,VLED_OUT_CH6
|
||||
err = kt_key_event_handler(KEY_USER_KEY_6);
|
||||
break;
|
||||
case KEY_MUSIC_PLAYER_START:
|
||||
log_i("KEY_MUSIC_PLAYER_START !!\n");
|
||||
app_status_handler(APP_STATUS_MUSIC_PLAY);
|
||||
/// 断点播放活动设备
|
||||
logo = dev_manager_get_logo(dev_manager_find_active(1));
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY) {
|
||||
if (music_player_get_dev_cur() && logo) {
|
||||
if (logo == NULL)
|
||||
{
|
||||
log_w("no play device, stay in music idle\n");
|
||||
break;
|
||||
}
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY)
|
||||
{
|
||||
if (music_player_get_dev_cur() && logo)
|
||||
{
|
||||
/// 播放的设备跟当前活动的设备是同一个设备,不处理
|
||||
if (0 == strcmp(logo, music_player_get_dev_cur())) {
|
||||
if (0 == strcmp(logo, music_player_get_dev_cur()))
|
||||
{
|
||||
log_w("the same dev!!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
if (music_device_tone_play(logo) == true) {
|
||||
if (music_device_tone_play(logo) == true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
if (true == breakpoint_vm_read(breakpoint, logo)) {
|
||||
if (true == breakpoint_vm_read(breakpoint, logo))
|
||||
{
|
||||
err = music_player_play_by_breakpoint(logo, breakpoint);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
err = music_player_play_first_file(logo);
|
||||
}
|
||||
break;
|
||||
@ -626,27 +749,41 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
/// 结束消息处理
|
||||
case KEY_MUSIC_PLAYER_END:
|
||||
log_i("KEY_MUSIC_PLAYER_END\n");
|
||||
if (kt_music_play_end_handler()) {
|
||||
/// 按键指定文件播放结束:关通道,不自动下一曲
|
||||
err = MUSIC_PLAYER_ERR_NULL;
|
||||
break;
|
||||
}
|
||||
err = music_player_end_deal(msg[1]);
|
||||
break;
|
||||
// 播放器解码错误处理
|
||||
case KEY_MUSIC_PLAYER_DEC_ERR:
|
||||
if (kt_music_play_end_handler()) {
|
||||
err = MUSIC_PLAYER_ERR_NULL;
|
||||
break;
|
||||
}
|
||||
err = music_player_decode_err_deal(msg[1]);
|
||||
break;
|
||||
/// 播放执行类消息
|
||||
case KEY_MUSIC_PP:
|
||||
log_i("KEY_MUSIC_PP\n");
|
||||
logo = music_player_get_dev_cur();
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY) {
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY)
|
||||
{
|
||||
music_set_dev_sync_mode(logo, 0);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
music_set_dev_sync_mode(logo, 1);
|
||||
|
||||
}
|
||||
err = music_player_pp();
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY) {
|
||||
if (music_player_get_play_status() == FILE_DEC_STATUS_PLAY)
|
||||
{
|
||||
app_status_handler(APP_STATUS_MUSIC_PLAY);
|
||||
ui_update_status(STATUS_MUSIC_PLAY);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
app_status_handler(APP_STATUS_MUSIC_PP);
|
||||
ui_update_status(STATUS_MUSIC_PAUSE);
|
||||
/* tone_play_by_path(tone_table[IDEX_TONE_MAX_VOL],1); */
|
||||
@ -688,22 +825,28 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
auto_next_dev = ((msg[0] == KEY_MUSIC_AUTO_NEXT_DEV) ? 1 : 0);
|
||||
logo = music_player_get_dev_next(auto_next_dev);
|
||||
printf("next dev = %s\n", logo);
|
||||
if (logo == NULL) { ///找不到下一个设备,不响应设备切换
|
||||
if (logo == NULL)
|
||||
{ /// 找不到下一个设备,不响应设备切换
|
||||
break;
|
||||
}
|
||||
/// 切换设备前先保存一下上一个设备的断点信息,包括文件和解码信息
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true)
|
||||
{
|
||||
music_player_stop(0); // 先停止,防止下一步操作VM卡顿
|
||||
breakpoint_vm_write(breakpoint, music_player_get_dev_cur());
|
||||
}
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
if (music_device_tone_play(logo) == true) {
|
||||
if (music_device_tone_play(logo) == true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
if (true == breakpoint_vm_read(breakpoint, logo)) {
|
||||
if (true == breakpoint_vm_read(breakpoint, logo))
|
||||
{
|
||||
err = music_player_play_by_breakpoint(logo, breakpoint);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
err = music_player_play_first_file(logo);
|
||||
}
|
||||
break;
|
||||
@ -711,12 +854,16 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
log_i("KEY_MUSIC_PLAYE_REC_FOLDER_SWITCH\n");
|
||||
#if (TCFG_RECORD_FOLDER_DEV_ENABLE)
|
||||
/// 尝试保存断点
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true)
|
||||
{
|
||||
breakpoint_vm_write(breakpoint, music_player_get_dev_cur());
|
||||
}
|
||||
if (true == breakpoint_vm_read(breakpoint, music_player_get_cur_music_dev())) {
|
||||
if (true == breakpoint_vm_read(breakpoint, music_player_get_cur_music_dev()))
|
||||
{
|
||||
err = music_player_play_record_folder(NULL, breakpoint);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
err = music_player_play_record_folder(NULL, NULL);
|
||||
}
|
||||
#endif // TCFG_RECORD_FOLDER_DEV_ENABLE
|
||||
@ -736,7 +883,6 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
err = music_player_play_by_path((char *)"udisk0", "/sin.wav"); /// this is a demo
|
||||
break;
|
||||
|
||||
|
||||
/// 非播放执行类消息
|
||||
case KEY_MUSIC_FF:
|
||||
log_i("KEY_MUSIC_FF\n");
|
||||
@ -751,7 +897,8 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
case KEY_MUSIC_CHANGE_REPEAT:
|
||||
log_i("KEY_MUSIC_CHANGE_REPEAT\n");
|
||||
mode = music_player_change_repeat_mode();
|
||||
if (mode > 0) {
|
||||
if (mode > 0)
|
||||
{
|
||||
UI_SHOW_MENU(MENU_MUSIC_REPEATMODE, 1000, mode, NULL);
|
||||
}
|
||||
break;
|
||||
@ -768,7 +915,6 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/// 错误处理
|
||||
music_player_err_deal(err);
|
||||
/// smartbox info update
|
||||
@ -778,7 +924,6 @@ static int music_key_event_opr(struct sys_event *event)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 设备事件响应接口
|
||||
@param 无
|
||||
@ -791,42 +936,48 @@ static int music_sys_event_handler(struct sys_event *event)
|
||||
int err = 0;
|
||||
char *logo = NULL;
|
||||
char *evt_logo = NULL;
|
||||
switch (event->type) {
|
||||
switch (event->type)
|
||||
{
|
||||
case SYS_KEY_EVENT:
|
||||
return music_key_event_opr(event);
|
||||
case SYS_DEVICE_EVENT:
|
||||
switch ((u32)event->arg) {
|
||||
switch ((u32)event->arg)
|
||||
{
|
||||
case DRIVER_EVENT_FROM_SD0:
|
||||
case DRIVER_EVENT_FROM_SD1:
|
||||
case DRIVER_EVENT_FROM_SD2:
|
||||
evt_logo = (char *)event->u.dev.value;
|
||||
case DEVICE_EVENT_FROM_OTG:
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG) {
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG)
|
||||
{
|
||||
evt_logo = (char *)"udisk0";
|
||||
}
|
||||
int str_len = 0;
|
||||
logo = music_player_get_phy_dev(&str_len);
|
||||
log_i("evt_logo =%s, logo = %s len =%d\n", evt_logo, logo, str_len);
|
||||
if (event->u.dev.event == DEVICE_EVENT_OUT) {
|
||||
if (logo == NULL) {
|
||||
if (event->u.dev.event == DEVICE_EVENT_OUT)
|
||||
{
|
||||
if (logo == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (logo && (0 == memcmp(logo, evt_logo, str_len))) {
|
||||
if (logo && (0 == memcmp(logo, evt_logo, str_len)))
|
||||
{
|
||||
/// 相同的设备才响应
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true)
|
||||
{
|
||||
breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
memset(__this->device_tone_dev, 0, sizeof(__this->device_tone_dev));
|
||||
///停止解码,防止设备掉线后还继续使用
|
||||
/// 停止解码,防止设备掉线后还继续使用;不自动切到其他设备播放
|
||||
music_player_stop(1);
|
||||
///重新选择活动设备播放
|
||||
app_task_put_key_msg(KEY_MUSIC_PLAYER_START, 0);//卸载了设备再执行
|
||||
log_i("KEY_MUSIC_PLAYER_START AFTER UMOUNT\n");
|
||||
kt_music_play_end_handler();
|
||||
log_i("dev out, stay idle (no auto play)\n");
|
||||
}
|
||||
} else {
|
||||
#if (MUSIC_DEV_ONLINE_START_AFTER_MOUNT_EN == 0)
|
||||
music_task_dev_online_start();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 设备上线不自动播放
|
||||
}
|
||||
break;
|
||||
default: // switch((u32)event->arg)
|
||||
@ -865,7 +1016,8 @@ void music_task_set_parm(u8 type, int val)
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static void music_player_play_start(void)
|
||||
{
|
||||
switch (__this->task_parm.type) {
|
||||
switch (__this->task_parm.type)
|
||||
{
|
||||
case MUSIC_TASK_START_BY_NORMAL:
|
||||
log_i("MUSIC_TASK_START_BY_NORMAL\n");
|
||||
app_task_put_key_msg(KEY_MUSIC_PLAYER_START, 0);
|
||||
@ -881,34 +1033,16 @@ static void music_player_play_start(void)
|
||||
/// 提示音播放失败,直接推送KEY_MUSIC_PLAYER_START启动播放
|
||||
}
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 模式新设备上线处理
|
||||
@param 无
|
||||
@return
|
||||
@note
|
||||
@note 插卡/插U盘不上线自动播放,由按键/业务自行触发
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
void music_task_dev_online_start(void)
|
||||
{
|
||||
u8 save = 0;
|
||||
char *logo = music_player_get_dev_cur();
|
||||
if (logo && breakpoint) {
|
||||
///新设备上线, 先记录当前设备断点, 然后播放活动设备
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
save = 1;
|
||||
//这里不要直接记忆断点, 解码停了之后再记忆
|
||||
//breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
}
|
||||
///停止解码,播放新活动设备
|
||||
music_player_stop(1);
|
||||
if (save && breakpoint) {
|
||||
breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
app_task_put_key_msg(KEY_MUSIC_PLAYER_START, 0);
|
||||
log_i("KEY_MUSIC_PLAYER_START AFTER MOUNT\n");
|
||||
//先挂载了设备再执行
|
||||
log_i("dev online, stay idle (no auto play)\n");
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
@ -937,7 +1071,6 @@ static void music_task_start()
|
||||
/// 按键使能
|
||||
sys_key_event_enable();
|
||||
|
||||
|
||||
/// 播放器初始化
|
||||
struct __player_parm parm = {0};
|
||||
parm.cb = &music_player_callback;
|
||||
@ -963,7 +1096,8 @@ static void music_task_close()
|
||||
UI_HIDE_CURR_WINDOW();
|
||||
tone_play_stop_by_path(tone_table[IDEX_TONE_MUSIC]); // 停止播放提示音
|
||||
char *logo = music_player_get_dev_cur();
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true) {
|
||||
if (music_player_get_playing_breakpoint(breakpoint, 1) == true)
|
||||
{
|
||||
breakpoint_vm_write(breakpoint, logo);
|
||||
}
|
||||
|
||||
@ -982,16 +1116,13 @@ static void music_task_close()
|
||||
/**@brief music 在线检测 切换模式判断使用
|
||||
@param 无
|
||||
@return 1 设备在线 0 设备不在线
|
||||
@note
|
||||
@note 无 SD/U盘时也允许进入 music,等待插卡后播放
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int music_app_check(void)
|
||||
{
|
||||
if (dev_manager_get_total(1)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief music 主任务
|
||||
@ -1005,36 +1136,24 @@ void app_music_task()
|
||||
int res;
|
||||
int msg[32];
|
||||
music_task_start();
|
||||
/// 进入 music 后不自动播放(有无介质均静默),由按键/业务自行触发播放
|
||||
|
||||
#if (MUSIC_DEVICE_TONE_EN)
|
||||
music_player_play_start();
|
||||
#else
|
||||
#if TCFG_DEC2TWS_ENABLE
|
||||
extern void set_tws_background_connected_flag(u8 flag);
|
||||
extern u8 get_tws_background_connected_flag();
|
||||
if (get_tws_background_connected_flag()) { //不播放提示音
|
||||
music_player_play_start();
|
||||
set_tws_background_connected_flag(0);
|
||||
} else
|
||||
#endif
|
||||
while (1)
|
||||
{
|
||||
tone_play_with_callback_by_name(tone_table[IDEX_TONE_MUSIC], 1, music_tone_play_end_callback, (void *)IDEX_TONE_MUSIC);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
while (1) {
|
||||
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
|
||||
switch (msg[0]) {
|
||||
switch (msg[0])
|
||||
{
|
||||
case APP_MSG_SYS_EVENT:
|
||||
if (music_sys_event_handler((struct sys_event *)(&msg[1])) == false) {
|
||||
if (music_sys_event_handler((struct sys_event *)(&msg[1])) == false)
|
||||
{
|
||||
app_default_event_deal((struct sys_event *)(&msg[1]));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (app_task_exitting()) {
|
||||
if (app_task_exitting())
|
||||
{
|
||||
music_task_close();
|
||||
return;
|
||||
}
|
||||
@ -1054,10 +1173,6 @@ REGISTER_LP_TARGET(music_lp_target) = {
|
||||
|
||||
void app_music_task()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@ -62,8 +62,14 @@ static int power_on_init(void)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
|
||||
app_task_switch_to(APP_MUSIC_TASK);
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
#if TCFG_APP_BT_EN
|
||||
app_task_switch_to(APP_BT_TASK);
|
||||
app_task_switch_to(APP_MUSIC_TASK);
|
||||
#else
|
||||
|
||||
#if TCFG_USB_APPLE_DOCK_EN //苹果iap协议使用pc模式
|
||||
@ -76,6 +82,7 @@ static int power_on_init(void)
|
||||
/* app_task_switch_to(APP_LINEIN_TASK);//如果带检测,设备不在线,则不跳转 */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1,5 +1,26 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fat_vfs_ops
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,27 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
rem @echo off
|
||||
|
||||
@echo *****************************************************************
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user