/*
* audio-hal
*
- * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
*
#include <vconf.h>
#include "tizen-audio-internal.h"
+#include "tizen-audio-impl.h"
#define vbc_thread_new pthread_create
#define MIXER_VBC_SWITCH "VBC Switch"
{
int val = -1; /* Mixer values 0 - cp [3g] ,1 - cp [2g] ,2 - ap */
- _audio_mixer_control_get_value(ah, MIXER_VBC_SWITCH, &val);
+ _mixer_control_get_value(ah, MIXER_VBC_SWITCH, &val);
AUDIO_LOG_INFO("modem is connected for call = %d", (val == VBC_TD_CHANNELID));
return (val == VBC_TD_CHANNELID) ? 1 : 0;
}
-static int __voice_read_samplerate(int fd, set_samplerate_t *paras_ptr)
-{
- int ret = 0;
- if (fd > 0 && paras_ptr != NULL) {
- ret = __read_nonblock(fd, paras_ptr, sizeof(set_samplerate_t));
- if (ret != sizeof(set_samplerate_t))
- ret = -1;
- }
- AUDIO_LOG_INFO("Return value of read sample rate = %d", ret);
- return ret;
-
-}
-
-static int __voice_get_samplerate(audio_hal_t *ah, int fd)
-{
- set_samplerate_t samplerate_paras;
-
- memset(&samplerate_paras, 0, sizeof(set_samplerate_t));
- __voice_read_samplerate(fd, &samplerate_paras);
-
- if (samplerate_paras.samplerate <= 0)
- ah->modem.samplerate = 8000;
- else
- ah->modem.samplerate = samplerate_paras.samplerate;
-
- return 0;
-}
-
static int __vbc_write_response(int fd, unsigned int cmd, uint32_t paras_size)
{
int ret = 0;
}
#define FM_IIS 0x10
-static void i2s_pin_mux_sel(audio_hal_t *ah, int type)
+static void __i2s_pin_mux_sel(audio_hal_t *ah, int type)
{
audio_return_t ret = AUDIO_RET_OK;
audio_modem_t *modem;
modem = ah->modem.cp;
if (type == FM_IIS) {
- _audio_mixer_control_set_value(ah,
+ _mixer_control_set_value(ah,
PIN_SWITCH_IIS0_SYS_SEL, PIN_SWITCH_IIS0_VBC_ID);
return;
}
if(ah->device.active_out & AUDIO_DEVICE_OUT_BT_SCO) {
if(modem->i2s_bt.is_ext) {
if(modem->i2s_bt.is_switch) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_IIS0_SYS_SEL, PIN_SWITCH_IIS0_CP0_ID);
}
} else {
if(modem->i2s_bt.is_switch) {
int value = 0;
- _audio_mixer_control_get_value (ah, PIN_SWITCH_IIS0_SYS_SEL, &value);
+ _mixer_control_get_value (ah, PIN_SWITCH_IIS0_SYS_SEL, &value);
if(value == PIN_SWITCH_IIS0_CP0_ID) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_IIS0_SYS_SEL, PIN_SWITCH_IIS0_AP_ID);
}
}
if(ah->device.active_out & AUDIO_DEVICE_OUT_BT_SCO) {
if(modem->i2s_bt.is_switch) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_BT_IIS_SYS_SEL, PIN_SWITCH_BT_IIS_CP0_IIS0_ID);
}
}
if(ah->device.active_out & AUDIO_DEVICE_OUT_BT_SCO) {
if(modem->i2s_bt.is_ext) {
if(modem->i2s_bt.is_switch) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_IIS0_SYS_SEL, PIN_SWITCH_IIS0_CP1_ID);
}
} else {
if(modem->i2s_bt.is_switch) {
int value = 0;
- _audio_mixer_control_get_value (ah, PIN_SWITCH_IIS0_SYS_SEL, &value);
+ _mixer_control_get_value (ah, PIN_SWITCH_IIS0_SYS_SEL, &value);
if(value == PIN_SWITCH_IIS0_CP1_ID) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_IIS0_SYS_SEL, PIN_SWITCH_IIS0_CP2_ID);
}
}
if(ah->device.active_out & AUDIO_DEVICE_OUT_BT_SCO) {
if(modem->i2s_bt.is_switch) {
- ret = _audio_mixer_control_set_value(ah,
+ ret = _mixer_control_set_value(ah,
PIN_SWITCH_BT_IIS_SYS_SEL, PIN_SWITCH_BT_IIS_CP1_IIS0_ID);
}
}
AUDIO_LOG_INFO("[voice] Received VBC_CMD_PCM_OPEN");
ah->modem.is_connected = 1;
- audio_ret = _audio_do_route_voicecall(ah, ah->device.init_call_devices, ah->device.num_of_call_devices);
- if (AUDIO_IS_ERROR(audio_ret)) {
+ if ((audio_ret = _audio_update_route_voicecall(ah, ah->device.init_call_devices, ah->device.num_of_call_devices))) {
AUDIO_LOG_WARN("set voicecall route return 0x%x", audio_ret);
if (audio_ret == AUDIO_ERR_INVALID_STATE) {
/* send signal and wait for the ucm setting,
if (ah->device.active_out & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_BT_SCO)) {
if (ah->modem.cp_type == CP_TG)
- i2s_pin_mux_sel(ah, 1);
+ __i2s_pin_mux_sel(ah, 1);
else if(ah->modem.cp_type == CP_W)
- i2s_pin_mux_sel(ah, 0);
+ __i2s_pin_mux_sel(ah, 0);
}
AUDIO_LOG_DEBUG("[voice] Send response for VBC_CMD_PCM_OPEN");
COND_TIMEDWAIT(ah->device.device_cond, ah->device.device_lock, "device_cond", TIMEOUT_SEC);
MUTEX_UNLOCK(ah->device.device_lock, "device_lock");
- _audio_mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_ARM_CHANNELID);
+ _mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_ARM_CHANNELID);
AUDIO_LOG_DEBUG("[voice] Send response for VBC_CMD_PCM_CLOSE");
__vbc_write_response(vbpipe_fd, VBC_CMD_PCM_CLOSE, 0);
if (ah->device.active_out & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_BT_SCO)) {
if (ah->modem.cp_type == CP_TG)
- i2s_pin_mux_sel(ah, 1);
+ __i2s_pin_mux_sel(ah, 1);
else if(ah->modem.cp_type == CP_W)
- i2s_pin_mux_sel(ah, 0);
+ __i2s_pin_mux_sel(ah, 0);
}
/* To do: set mode params : __vbc_set_mode_params(ah, vbpipe_fd); */
else
AUDIO_LOG_INFO("is_switch:%d", switch_ctrl_params.is_switch);
- _audio_mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_TD_CHANNELID);
+ _mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_TD_CHANNELID);
AUDIO_LOG_DEBUG("[voice] Send response for VBC_CMD_SET_GAIN");
__vbc_write_response(vbpipe_fd, VBC_CMD_SWITCH_CTRL, 0);
case VBC_CMD_SET_SAMPLERATE: {
AUDIO_LOG_INFO("[voice] Received VBC_CMD_SET_SAMPLERATE");
-// _voice_pcm_close(ah, 0);
-//
-// __voice_get_samplerate(ah, vbpipe_fd);
-//
-// ret = _voice_pcm_open(ah);
-// if (ret < 0) {
-// _voice_pcm_close(ah, 1);
-// break;
-// }
-
AUDIO_LOG_DEBUG("[voice] Send response for VBC_CMD_SET_SAMPLERATE");
__vbc_write_response(vbpipe_fd, VBC_CMD_SET_SAMPLERATE, 0);
break;
if (ah->device.active_out & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_BT_SCO)) {
if (ah->modem.cp_type == CP_TG)
- i2s_pin_mux_sel(ah, 1);
+ __i2s_pin_mux_sel(ah, 1);
else if(ah->modem.cp_type == CP_W)
- i2s_pin_mux_sel(ah, 0);
+ __i2s_pin_mux_sel(ah, 0);
}
/* To do: set mode params : __vbc_set_mode_params(ah, vbpipe_fd); */
AUDIO_LOG_DEBUG("[voip] Send response for VBC_CMD_SET_MODE");
else
AUDIO_LOG_INFO("is_switch:%d", switch_ctrl_params.is_switch);
- _audio_mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_TD_CHANNELID);
+ _mixer_control_set_value(ah, MIXER_VBC_SWITCH, VBC_TD_CHANNELID);
AUDIO_LOG_DEBUG("[voip] Send response for VBC_CMD_SWITCH_CTRL");
__vbc_write_response(vbpipe_fd, VBC_CMD_SWITCH_CTRL, 0);
case VBC_CMD_SET_SAMPLERATE: {
AUDIO_LOG_INFO("[voip] Received VBC_CMD_SET_SAMPLERATE");
-// _voice_pcm_close(ah, 0);
-// __voice_get_samplerate(ah, vbpipe_fd);
-//
-// ret = _voice_pcm_open(ah);
-// if (ret < 0) {
-// _voice_pcm_close(ah, 1);
-// break;
-// }
AUDIO_LOG_DEBUG("[voip] Send response for VBC_CMD_SET_SAMPLERATE");
__vbc_write_response(vbpipe_fd, VBC_CMD_SET_SAMPLERATE, 0);
break;
return AUDIO_RET_OK;
}
-static audio_return_t __vbc_control_close(audio_hal_t *ah)
+void __vbc_control_close(audio_hal_t *ah)
{
/* TODO. Make sure we always receive CLOSE command from modem and then close pcm device */
ah->modem.vbc.exit_vbc_thread = 1;
pthread_cancel(ah->modem.vbc.voice_thread_handle);
pthread_cancel(ah->modem.vbc.voip_thread_handle);
- return AUDIO_RET_OK;
+ return;
}
-static vbc_ctrl_pipe_para_t *__audio_modem_create(audio_modem_t *modem, const char *num)
+static void __audio_modem_create(audio_modem_t *modem, const char *num)
{
if (!atoi((char *)num)) {
AUDIO_LOG_ERROR("Unnormal modem num!");
- return NULL;
+ return;
}
modem->num = atoi((char *)num);
/* check if we need to allocate space for modem profile */
- if(!modem->vbc_ctrl_pipe_info) {
+ if (!modem->vbc_ctrl_pipe_info) {
modem->vbc_ctrl_pipe_info = malloc(modem->num * sizeof(vbc_ctrl_pipe_para_t));
-
if (modem->vbc_ctrl_pipe_info == NULL) {
AUDIO_LOG_ERROR("Unable to allocate modem profiles");
- return NULL;
- } else {
- /* initialise the new profile */
- memset((void*)modem->vbc_ctrl_pipe_info, 0x00, modem->num * sizeof(vbc_ctrl_pipe_para_t));
+ return;
}
+
+ /* initialise the new profile */
+ memset((void*)modem->vbc_ctrl_pipe_info, 0x00, modem->num * sizeof(vbc_ctrl_pipe_para_t));
}
- AUDIO_LOG_DEBUG("peter: modem num is %d",modem->num);
- /* return the profile just added */
- return modem->vbc_ctrl_pipe_info;
+ AUDIO_LOG_DEBUG("peter: modem num is %d", modem->num);
}
static void __audio_modem_start_tag(void *data, const XML_Char *tag_name,
const XML_Char **attr)
{
- struct modem_config_parse_state *state = data;
- audio_modem_t *modem = state->modem_info;
+ audio_modem_t *modem = (audio_modem_t *)data;
/* Look at tags */
if (strcmp(tag_name, "audio") == 0) {
/* Obtain the modem num */
if (strcmp(attr[0], "num") == 0) {
AUDIO_LOG_DEBUG("The modem num is '%s'", attr[1]);
- state->vbc_ctrl_pipe_info = __audio_modem_create(modem, attr[1]);
+ __audio_modem_create(modem, attr[1]);
} else {
AUDIO_LOG_ERROR("no modem num!");
}
} else if (strcmp(tag_name, "cp") == 0) {
- if (state->vbc_ctrl_pipe_info) {
+ if (modem->vbc_ctrl_pipe_info) {
/* Obtain the modem name \pipe\vbc filed */
if (strcmp(attr[0], "name") != 0) {
AUDIO_LOG_ERROR("Unnamed modem!");
AUDIO_LOG_DEBUG("cp name is '%s', pipe is '%s',vbc is '%s'", attr[1], attr[3],attr[5]);
if(strcmp(attr[1], "w") == 0)
{
- state->vbc_ctrl_pipe_info->cp_type = CP_W;
+ modem->vbc_ctrl_pipe_info->cp_type = CP_W;
}
else if(strcmp(attr[1], "t") == 0)
{
- state->vbc_ctrl_pipe_info->cp_type = CP_TG;
+ modem->vbc_ctrl_pipe_info->cp_type = CP_TG;
}
- memcpy((void*)state->vbc_ctrl_pipe_info->s_vbc_ctrl_pipe_name,(void*)attr[3],strlen((char *)attr[3]));
- state->vbc_ctrl_pipe_info->channel_id = atoi((char *)attr[5]);
- state->vbc_ctrl_pipe_info++;
+ memcpy((void*)modem->vbc_ctrl_pipe_info->s_vbc_ctrl_pipe_name,(void*)attr[3],strlen((char *)attr[3]));
+ modem->vbc_ctrl_pipe_info->channel_id = atoi((char *)attr[5]);
+ modem->vbc_ctrl_pipe_info++;
} else {
AUDIO_LOG_ERROR("error profile!");
return;
}
-struct config_parse_state {
- audio_modem_t *modem_info;
- /* To do : pga control setting*/
- /* struct audio_pga *pga; */
- /* struct pga_profile *profile; */
- /* struct pga_attribute_item *attribute_item; */
-};
static audio_modem_t * __audio_modem_parse (void)
{
- struct config_parse_state state;
XML_Parser parser;
FILE *file;
int bytes_read;
goto err_parser_create;
}
- memset(&state, 0, sizeof(state));
- state.modem_info = modem;
- XML_SetUserData(parser, &state);
+ XML_SetUserData(parser, modem);
XML_SetElementHandler(parser, __audio_modem_start_tag, __audio_modem_end_tag);
for (;;) {
ah->modem.vbc.vbpipe_count = 0;
/* Initialize vbc interface */
- audio_ret = __vbc_control_open(ah);
- if (AUDIO_IS_ERROR(audio_ret)) {
+ if ((audio_ret = __vbc_control_open(ah))) {
AUDIO_LOG_ERROR("__vbc_control_open failed");
goto exit;
}
ah->modem.cp_type = ah->modem.cp->vbc_ctrl_pipe_info->cp_type;
/* This ctrl need to be set "0" always - SPRD */
- _audio_mixer_control_set_value(ah, PIN_SWITCH_BT_IIS_CON_SWITCH, 0);
+ _mixer_control_set_value(ah, PIN_SWITCH_BT_IIS_CON_SWITCH, 0);
exit:
return audio_ret;