KT24-1110_65E-HA-651B/apps/soundbox/smartbox/event.c

299 lines
9.3 KiB
C
Raw Permalink Normal View History

2024-11-10 10:44:17 +00:00
#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