299 lines
9.3 KiB
C
299 lines
9.3 KiB
C
|
#include "smartbox/config.h"
|
||
|
#include "smartbox/event.h"
|
||
|
#include "smartbox/smartbox.h"
|
||
|
#include "btstack/btstack_task.h"
|
||
|
#include "btstack/avctp_user.h"
|
||
|
#include "smartbox/function.h"
|
||
|
|
||
|
#include "fm_emitter/fm_emitter_manage.h"
|
||
|
#include "app_action.h"
|
||
|
#include "key_event_deal.h"
|
||
|
#include "audio_config.h"
|
||
|
#include "smartbox_setting_opt.h"
|
||
|
#include "le_smartbox_module.h"
|
||
|
|
||
|
#if (SMART_BOX_EN)
|
||
|
|
||
|
extern void bt_search_device(void);
|
||
|
|
||
|
extern void emitter_search_stop(u8 result);
|
||
|
|
||
|
static void smartbox_common_event_deal(int msg, int argc, int *argv)
|
||
|
{
|
||
|
int err = 0;
|
||
|
struct smartbox *smart = (struct smartbox *)argv[0];
|
||
|
if (smart == NULL) {
|
||
|
printf("smart hdl NULL err!!\n");
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
switch (msg) {
|
||
|
case USER_MSG_SMARTBOX_DISCONNECT_EDR:
|
||
|
printf("USER_MSG_SMARTBOX_DISCONNECT_EDR\n");
|
||
|
if (get_curr_channel_state() != 0) {
|
||
|
user_send_cmd_prepare(USER_CTRL_A2DP_CMD_CLOSE, 0, NULL);
|
||
|
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
|
||
|
}
|
||
|
break;
|
||
|
#if TCFG_USER_EMITTER_ENABLE
|
||
|
case USER_MSG_SMARTBOX_BT_SCAN_OPEN:
|
||
|
printf("USER_MSG_SMARTBOX_BT_SCAN_OPEN\n");
|
||
|
bt_search_device();
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_BT_SCAN_STOP:
|
||
|
printf("USER_MSG_SMARTBOX_BT_SCAN_STOP\n");
|
||
|
emitter_search_stop(0);
|
||
|
break;
|
||
|
|
||
|
case USER_MSG_SMARTBOX_BT_CONNECT_SPEC_ADDR:
|
||
|
printf("USER_MSG_SMARTBOX_BT_CONNECT_SPEC_ADDR\n");
|
||
|
put_buf(smart->emitter_con_addr, 6);
|
||
|
user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, smart->emitter_con_addr);
|
||
|
break;
|
||
|
#endif//TCFG_USER_EMITTER_ENABLE
|
||
|
|
||
|
case USER_MSG_SMARTBOX_SET_VOL:
|
||
|
printf("USER_MSG_SMARTBOX_SET_VOL\n");
|
||
|
smartbox_function_update(COMMON_FUNCTION, (u32)argv[1]);
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_SET_EQ_PARAM:
|
||
|
printf("USER_MSG_SMARTBOX_SET_EQ_PARAM\n");
|
||
|
smartbox_function_update(COMMON_FUNCTION, (u32)argv[1]);
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_SET_FMTX_FREQ:
|
||
|
printf("USER_MSG_SMARTBOX_SET_FMTX_FREQ\n");
|
||
|
#if (TCFG_APP_FM_EMITTER_EN && TCFG_FM_EMITTER_INSIDE_ENABLE)
|
||
|
u16 freq = (u16)argv[1];
|
||
|
printf("freq %d\n", freq);
|
||
|
fm_emitter_manage_set_fre(freq);
|
||
|
#endif
|
||
|
/* #if TCFG_UI_ENABLE */
|
||
|
/* ui_set_menu_ioctl(MENU_FM_DISP_FRE, freq); */
|
||
|
/* #endif */
|
||
|
break;
|
||
|
#if TCFG_USER_EMITTER_ENABLE
|
||
|
case USER_MSG_SMARTBOX_SET_BT_EMITTER_SW:
|
||
|
printf("USER_MSG_SMARTBOX_SET_BT_EMITTER_SW\n");
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_SET_BT_EMITTER_CONNECT_STATES:
|
||
|
printf("USER_MSG_SMARTBOX_SET_BT_EMITTER_CONNECT_STATES, state = %d\n", argv[1]);
|
||
|
if (argv[1]) {
|
||
|
emitter_search_stop(0);
|
||
|
put_buf(smart->emitter_con_addr, 6);
|
||
|
user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, smart->emitter_con_addr);
|
||
|
} else {
|
||
|
if (get_curr_channel_state() != 0) {
|
||
|
printf("-----------------11111111111111111\n");
|
||
|
user_send_cmd_prepare(USER_CTRL_A2DP_CMD_CLOSE, 0, NULL);
|
||
|
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
#endif//TCFG_USER_EMITTER_ENABLE
|
||
|
|
||
|
#if (RCSP_FILE_OPT && TCFG_APP_MUSIC_EN)
|
||
|
case USER_MSG_SMARTBOX_BS_END:
|
||
|
printf("USER_MSG_SMARTBOX_BS_END\n");
|
||
|
u8 reason = (u8)argv[1];
|
||
|
char *dev_logo = (char *)argv[2];
|
||
|
char *cur_dev_logo = music_player_get_dev_cur();
|
||
|
u32 sclust = (u32)argv[3];
|
||
|
smartbox_browser_stop();
|
||
|
printf("reason = %d, dev_loop = %s, sclust = %x\n", reason, dev_logo, sclust);
|
||
|
if (2 == reason) {
|
||
|
u8 app = app_get_curr_task();
|
||
|
if (app == APP_MUSIC_TASK) {
|
||
|
printf("is music mode \n");
|
||
|
if ((music_player_get_file_sclust() == sclust) //簇号相同
|
||
|
&& (cur_dev_logo && (strcmp(cur_dev_logo, dev_logo) == 0)) //设备相同
|
||
|
&& (music_player_get_play_status() == FILE_DEC_STATUS_PLAY) //正在播放
|
||
|
) {
|
||
|
//同一个设备的同一首歌曲,在播放的情况,浏览选中不重新播放
|
||
|
printf("the same music file!!\n");
|
||
|
} else {
|
||
|
dev_manager_set_active_by_logo(dev_logo);
|
||
|
app_task_put_key_msg(KEY_MUSIC_PLAYE_BY_DEV_SCLUST, sclust);
|
||
|
}
|
||
|
} else {
|
||
|
printf("is not music mode\n");
|
||
|
///设定音乐模式初次播放参数为按照簇号播放
|
||
|
music_task_set_parm(MUSIC_TASK_START_BY_SCLUST, sclust);
|
||
|
///将选定的设备设置为活动设备
|
||
|
dev_manager_set_active_by_logo(dev_logo);
|
||
|
///切换模式
|
||
|
app_task_switch_to(APP_MUSIC_TASK);
|
||
|
}
|
||
|
}
|
||
|
JL_CMD_send(JL_OPCODE_FILE_BROWSE_REQUEST_STOP, &reason, 1, JL_NEED_RESPOND);
|
||
|
break;
|
||
|
#endif
|
||
|
case USER_MSG_SMARTBOX_MODE_SWITCH:
|
||
|
printf("USER_MSG_SMARTBOX_MODE_SWITCH\n");
|
||
|
bool ret = true;
|
||
|
u8 mode = (u8)argv[1];
|
||
|
switch (mode) {
|
||
|
case FM_FUNCTION_MASK:
|
||
|
#if TCFG_APP_FM_EN
|
||
|
ret = app_task_switch_to(APP_FM_TASK);
|
||
|
#endif
|
||
|
break;
|
||
|
case BT_FUNCTION_MASK:
|
||
|
#if TCFG_APP_BT_EN
|
||
|
ret = app_task_switch_to(APP_BT_TASK);
|
||
|
#endif
|
||
|
break;
|
||
|
case MUSIC_FUNCTION_MASK:
|
||
|
#if TCFG_APP_MUSIC_EN
|
||
|
ret = app_task_switch_to(APP_MUSIC_TASK);
|
||
|
#endif
|
||
|
break;
|
||
|
case RTC_FUNCTION_MASK:
|
||
|
#if TCFG_APP_RTC_EN
|
||
|
ret = app_task_switch_to(APP_RTC_TASK);
|
||
|
#endif
|
||
|
break;
|
||
|
case LINEIN_FUNCTION_MASK:
|
||
|
#if TCFG_APP_LINEIN_EN
|
||
|
ret = app_task_switch_to(APP_LINEIN_TASK);
|
||
|
#endif
|
||
|
break;
|
||
|
case FMTX_FUNCTION_MASK:
|
||
|
break;
|
||
|
}
|
||
|
if (false == ret) {
|
||
|
extern void function_change_inform(u8 app_mode, u8 ret);
|
||
|
function_change_inform(app_get_curr_task(), ret);
|
||
|
}
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_FM_UPDATE_STATE:
|
||
|
printf("USER_MSG_SMARTBOX_FM_UPDATE_STATE\n");
|
||
|
extern void smartbot_fm_msg_deal(int msg);
|
||
|
smartbot_fm_msg_deal(-1);
|
||
|
break;
|
||
|
case USER_MSG_SMARTBOX_RTC_UPDATE_STATE:
|
||
|
/* printf("USER_MSG_SMARTBOX_RTC_UPDATE_STATE\n"); */
|
||
|
/* extern void smartbot_rtc_msg_deal(int msg); */
|
||
|
/* smartbot_rtc_msg_deal(-1); */
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#define APP_SMART_BOX_MSG_VAL_MAX 8
|
||
|
bool smartbox_msg_post(int msg, int argc, ...)
|
||
|
{
|
||
|
int argv[APP_SMART_BOX_MSG_VAL_MAX] = {0};
|
||
|
bool ret = true;
|
||
|
va_list argptr;
|
||
|
va_start(argptr, argc);
|
||
|
|
||
|
if (argc > APP_SMART_BOX_MSG_VAL_MAX) {
|
||
|
printf("%s, msg argc err\n", __FUNCTION__);
|
||
|
ret = false;
|
||
|
} else {
|
||
|
argv[0] = (int) smartbox_common_event_deal;
|
||
|
argv[2] = msg;
|
||
|
for (int i = 0; i < argc; i++) {
|
||
|
argv[i + 3] = va_arg(argptr, int);
|
||
|
}
|
||
|
|
||
|
if (argc >= 2) {
|
||
|
argv[1] = argc + 1;
|
||
|
} else {
|
||
|
argv[1] = 3;
|
||
|
argc = 3;
|
||
|
}
|
||
|
int r = os_taskq_post_type("app_core", Q_CALLBACK, argc + 3, argv);
|
||
|
if (r) {
|
||
|
printf("app_next post msg err %x\n", r);
|
||
|
ret = false;
|
||
|
}
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
int smartbox_bt_key_event_deal(int key_event, int ret)
|
||
|
{
|
||
|
struct smartbox *smart = smartbox_handle_get();
|
||
|
if (smart == NULL) {
|
||
|
return ret;
|
||
|
}
|
||
|
if (BT_CALL_HANGUP != get_call_status()) {
|
||
|
return ret;
|
||
|
}
|
||
|
switch (key_event) {
|
||
|
case KEY_VOL_DOWN:
|
||
|
case KEY_VOL_UP:
|
||
|
smartbox_function_update(COMMON_FUNCTION, BIT(COMMON_FUNCTION_ATTR_TYPE_VOL));
|
||
|
break;
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
int smartbox_common_key_event_deal(int key_event, int ret)
|
||
|
{
|
||
|
struct smartbox *smart = smartbox_handle_get();
|
||
|
if (smart == NULL) {
|
||
|
return ret;
|
||
|
}
|
||
|
if (BT_CALL_HANGUP != get_call_status()) {
|
||
|
return ret;
|
||
|
}
|
||
|
switch (key_event) {
|
||
|
case KEY_MINOR_OPT:
|
||
|
#if RCSP_ADV_FIND_DEVICE_ENABLE
|
||
|
printf("smartbox_find_dev\n");
|
||
|
extern void smartbox_find_device(void);
|
||
|
smartbox_find_device();
|
||
|
ret = true;
|
||
|
#endif
|
||
|
break;
|
||
|
case KEY_VOL_DOWN:
|
||
|
case KEY_VOL_UP:
|
||
|
smartbox_function_update(COMMON_FUNCTION, BIT(COMMON_FUNCTION_ATTR_TYPE_VOL));
|
||
|
break;
|
||
|
default:
|
||
|
if (smartbox_opt_key_event_update(key_event, NULL)) {
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
bool smartbox_key_event_filter_before(int key_event)
|
||
|
{
|
||
|
struct smartbox *smart = smartbox_handle_get();
|
||
|
if (smart == NULL) {
|
||
|
return false;
|
||
|
}
|
||
|
if (0 == smart->dev_vol_sync) {
|
||
|
return false;
|
||
|
}
|
||
|
bool ret = false;
|
||
|
switch (key_event) {
|
||
|
case KEY_VOL_UP:
|
||
|
printf("COMMON KEY_VOL_UP\n");
|
||
|
extern void volume_up(void);
|
||
|
volume_up();
|
||
|
UI_SHOW_MENU(MENU_MAIN_VOL, 1000, app_audio_get_volume(APP_AUDIO_CURRENT_STATE), NULL);
|
||
|
ret = true;
|
||
|
break;
|
||
|
case KEY_VOL_DOWN:
|
||
|
printf("COMMON KEY_VOL_DOWN\n");
|
||
|
extern void volume_down(void);
|
||
|
volume_down();
|
||
|
UI_SHOW_MENU(MENU_MAIN_VOL, 1000, app_audio_get_volume(APP_AUDIO_CURRENT_STATE), NULL);
|
||
|
ret = true;
|
||
|
break;
|
||
|
}
|
||
|
if (ret) {
|
||
|
smartbox_function_update(COMMON_FUNCTION, BIT(COMMON_FUNCTION_ATTR_TYPE_VOL));
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|