Restructure files
[platform/adaptation/spreadtrum/audio-hal-sc7727.git] / tizen-audio-modem.c
index 0154e26..9ad85a7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * 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:
  *
@@ -31,6 +31,7 @@
 #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"
@@ -176,40 +177,12 @@ int _audio_modem_is_call_connected(audio_hal_t *ah)
 {
     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;
@@ -230,7 +203,7 @@ static int __vbc_write_response(int fd, unsigned int cmd, uint32_t paras_size)
 }
 
 #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;
@@ -244,7 +217,7 @@ static void i2s_pin_mux_sel(audio_hal_t *ah, int type)
     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;
     }
@@ -252,21 +225,21 @@ static void i2s_pin_mux_sel(audio_hal_t *ah, int type)
        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);
                     }
                 }
@@ -276,21 +249,21 @@ static void i2s_pin_mux_sel(audio_hal_t *ah, int type)
         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);
                     }
                 }
@@ -382,8 +355,7 @@ again:
                     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,
@@ -403,9 +375,9 @@ again:
 
                     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");
@@ -424,7 +396,7 @@ again:
                     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);
@@ -444,9 +416,9 @@ again:
 
                     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); */
 
@@ -476,7 +448,7 @@ again:
                     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);
@@ -502,16 +474,6 @@ again:
                 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;
@@ -633,9 +595,9 @@ again:
 
                     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");
@@ -662,7 +624,7 @@ again:
                     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);
@@ -681,14 +643,6 @@ again:
                 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;
@@ -738,7 +692,7 @@ static audio_return_t __vbc_control_open(audio_hal_t *ah)
     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;
@@ -747,41 +701,37 @@ static audio_return_t __vbc_control_close(audio_hal_t *ah)
     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) {
@@ -794,12 +744,12 @@ static void __audio_modem_start_tag(void *data, const XML_Char *tag_name,
         /* 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!");
@@ -816,15 +766,15 @@ static void __audio_modem_start_tag(void *data, const XML_Char *tag_name,
             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!");
@@ -917,16 +867,8 @@ static void __audio_modem_end_tag(void *data, const XML_Char *tag_name)
     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;
@@ -954,9 +896,7 @@ static audio_modem_t * __audio_modem_parse (void)
         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 (;;) {
@@ -1000,8 +940,7 @@ audio_return_t _audio_modem_init(audio_hal_t *ah)
     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;
     }
@@ -1016,7 +955,7 @@ audio_return_t _audio_modem_init(audio_hal_t *ah)
     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;