227 lines
5.0 KiB
C
227 lines
5.0 KiB
C
|
#include "smartbox/config.h"
|
|||
|
|
|||
|
#include "syscfg_id.h"
|
|||
|
|
|||
|
#include "smartbox_setting_sync.h"
|
|||
|
#include "smartbox_setting_opt.h"
|
|||
|
#include "le_smartbox_module.h"
|
|||
|
#include "smartbox/function.h"
|
|||
|
|
|||
|
#include "key_event_deal.h"
|
|||
|
#include "audio_config.h"
|
|||
|
#include "bt/vol_sync.h"
|
|||
|
#if (SMART_BOX_EN && RCSP_ADV_EQ_SET_ENABLE)
|
|||
|
|
|||
|
static u8 vol_setting[1] = {0};
|
|||
|
extern int get_bt_tws_connect_status();
|
|||
|
|
|||
|
bool smartbox_set_device_volume(int volume)
|
|||
|
{
|
|||
|
struct smartbox *smart = smartbox_handle_get();
|
|||
|
if (smart == NULL) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (0 == smart->dev_vol_sync) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (0 == smart->A_platform) {
|
|||
|
set_music_device_volume(volume);
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
bool smartbox_set_volume(s8 volume)
|
|||
|
{
|
|||
|
static cur_flag = 0;
|
|||
|
struct smartbox *smart = smartbox_handle_get();
|
|||
|
if (cur_flag || smart == NULL) {
|
|||
|
cur_flag = 0;
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (0 == smart->dev_vol_sync) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
#if TCFG_APP_LINEIN_EN
|
|||
|
if (LINEIN_FUNCTION == smart->cur_app_mode) {
|
|||
|
cur_flag = 1;
|
|||
|
extern int linein_volume_set(u8 vol);
|
|||
|
linein_volume_set(volume);
|
|||
|
cur_flag = 0;
|
|||
|
return true;
|
|||
|
}
|
|||
|
#endif
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
bool samrtbox_key_volume_down(u8 value)
|
|||
|
{
|
|||
|
struct smartbox *smart = smartbox_handle_get();
|
|||
|
if (smart == NULL) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (0 == smart->dev_vol_sync) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
#if TCFG_APP_LINEIN_EN
|
|||
|
if (LINEIN_FUNCTION == smart->cur_app_mode) {
|
|||
|
extern void linein_key_vol_down();
|
|||
|
linein_key_vol_down();
|
|||
|
return true;
|
|||
|
}
|
|||
|
#endif
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
bool smartbox_key_volume_up(u8 value)
|
|||
|
{
|
|||
|
struct smartbox *smart = smartbox_handle_get();
|
|||
|
if (smart == NULL) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (0 == smart->dev_vol_sync) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
#if TCFG_APP_LINEIN_EN
|
|||
|
if (LINEIN_FUNCTION == smart->cur_app_mode) {
|
|||
|
extern void linein_key_vol_up();
|
|||
|
linein_key_vol_up();
|
|||
|
true;
|
|||
|
}
|
|||
|
#endif
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
void smartbox_get_max_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
*vol_info = get_max_sys_vol();
|
|||
|
}
|
|||
|
|
|||
|
void smartbox_get_cur_dev_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
*vol_info = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|||
|
}
|
|||
|
|
|||
|
void smartbox_set_vol_for_find_device(u8 vol_flag)
|
|||
|
{
|
|||
|
static u8 vol = 0;
|
|||
|
static u8 state = 0;
|
|||
|
if (state == vol_flag) {
|
|||
|
return ;
|
|||
|
}
|
|||
|
if (vol_flag) {
|
|||
|
// 停止媒体
|
|||
|
vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|||
|
// 最大声
|
|||
|
app_audio_set_volume(app_audio_get_state(), get_max_sys_vol(), 1);
|
|||
|
|
|||
|
} else {
|
|||
|
// 恢复
|
|||
|
app_audio_set_volume(app_audio_get_state(), vol, 1);
|
|||
|
}
|
|||
|
|
|||
|
smartbox_function_update(COMMON_FUNCTION, BIT(COMMON_FUNCTION_ATTR_TYPE_VOL));
|
|||
|
state = vol_flag;
|
|||
|
}
|
|||
|
|
|||
|
static int smartbox_get_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
*vol_info = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
static void set_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
memcpy(vol_setting, vol_info, sizeof(vol_setting));
|
|||
|
}
|
|||
|
|
|||
|
static void update_vol_vm_value(u8 *vol_info)
|
|||
|
{
|
|||
|
// 不需要写vm操作,5s后会自动保持音量值
|
|||
|
//syscfg_write(CFG_MUSIC_VOL, vol_setting, sizeof(vol_setting));
|
|||
|
}
|
|||
|
|
|||
|
static void vol_setting_sync(u8 *vol_info)
|
|||
|
{
|
|||
|
#if TCFG_USER_TWS_ENABLE
|
|||
|
if (get_bt_tws_connect_status()) {
|
|||
|
update_smartbox_setting(ATTR_TYPE_VOL_SETTING);
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
static void vol_state_update(void)
|
|||
|
{
|
|||
|
// 更新操作,包含写vm操作
|
|||
|
struct smartbox *smart = smartbox_handle_get();
|
|||
|
if (smart == NULL) {
|
|||
|
return ;
|
|||
|
}
|
|||
|
u8 vol = vol_setting[0];
|
|||
|
if (LINEIN_FUNCTION == smart->cur_app_mode) {
|
|||
|
#if TCFG_APP_LINEIN_EN
|
|||
|
extern int linein_volume_set(u8 vol);
|
|||
|
linein_volume_set(vol);
|
|||
|
#endif
|
|||
|
} else {
|
|||
|
app_audio_set_volume(app_audio_get_state(), vol, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void deal_vol_setting(u8 *vol_info, u8 write_vm, u8 tws_sync)
|
|||
|
{
|
|||
|
if (vol_info) {
|
|||
|
set_vol_info(vol_info);
|
|||
|
}
|
|||
|
if (write_vm) {
|
|||
|
update_vol_vm_value(vol_setting);
|
|||
|
}
|
|||
|
if (tws_sync) {
|
|||
|
vol_setting_sync(vol_setting);
|
|||
|
}
|
|||
|
vol_state_update();
|
|||
|
}
|
|||
|
|
|||
|
static int vol_setting_init(void)
|
|||
|
{
|
|||
|
int ret = 0;
|
|||
|
u8 cur_vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|||
|
set_vol_info(&cur_vol);
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
static SMARTBOX_SETTING_OPT vol_setting_opt = {
|
|||
|
.data_len = 1,
|
|||
|
.setting_type = ATTR_TYPE_VOL_SETTING,
|
|||
|
.syscfg_id = CFG_MUSIC_VOL,
|
|||
|
.deal_opt_setting = deal_vol_setting,
|
|||
|
.set_setting = set_vol_info,
|
|||
|
.get_setting = smartbox_get_vol_info,
|
|||
|
.custom_setting_init = vol_setting_init, // 初始化不需要vm操作,所以重新实现
|
|||
|
.custom_setting_release = NULL,
|
|||
|
.custom_vm_info_update = NULL,
|
|||
|
.custom_setting_update = NULL,
|
|||
|
.custom_sibling_setting_deal = NULL,
|
|||
|
};
|
|||
|
REGISTER_APP_SETTING_OPT(vol_setting_opt);
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
bool smartbox_set_device_volume(int volume)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
void smartbox_get_max_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
*vol_info = get_max_sys_vol();
|
|||
|
}
|
|||
|
|
|||
|
void smartbox_get_cur_dev_vol_info(u8 *vol_info)
|
|||
|
{
|
|||
|
*vol_info = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|||
|
}
|
|||
|
|
|||
|
#endif
|