Add ril service state change callback.

Change-Id: I1566248d39f2d989ad7bd51dad76b2160d92258d
diff --git a/mbtk/include/mbtk/mbtk_info_api.h b/mbtk/include/mbtk/mbtk_info_api.h
index 2c09366..1b1d88c 100755
--- a/mbtk/include/mbtk/mbtk_info_api.h
+++ b/mbtk/include/mbtk/mbtk_info_api.h
@@ -1038,6 +1038,10 @@
 */

 int mbtk_signal_state_change_cb_reg(mbtk_info_handle_t* handle, mbtk_info_callback_func cb);

 

+/*

+* Set ril server state change callback function.

+*/

+int mbtk_ril_server_state_change_reg(mbtk_info_handle_t* handle, mbtk_info_callback_func cb);

 

 int mbtk_sms_cnmi_set(mbtk_info_handle_t* handle);

 

diff --git a/mbtk/libmbtk_lib/ril/mbtk_info_api.c b/mbtk/libmbtk_lib/ril/mbtk_info_api.c
index cf1d924..e355cce 100755
--- a/mbtk/libmbtk_lib/ril/mbtk_info_api.c
+++ b/mbtk/libmbtk_lib/ril/mbtk_info_api.c
@@ -20,6 +20,8 @@
 #define EPOLL_LISTEN_MAX 100
 #define EPOLL_LISTEN_MAX 100
 
+static mbtk_info_callback_func ril_server_state_cb = NULL;
+
 #if 0
 struct
 {
@@ -268,10 +270,14 @@
             int i;
             for(i = 0; i < nready; i++)
             {
-                LOG("fd[%d] event = %x",epoll_events[i].data.fd, epoll_events[i].events);
+                LOGD("fd[%d] event = %x",epoll_events[i].data.fd, epoll_events[i].events);
                 if(epoll_events[i].events & EPOLLHUP)   // Closed by server.
                 {
-
+                    LOGD("Closed by server.");
+                    if(ril_server_state_cb) {
+                        int state = 1;
+                        ril_server_state_cb(&state, sizeof(int));
+                    }
                 }
                 else if(epoll_events[i].events & EPOLLIN)
                 {
@@ -2587,3 +2593,19 @@
     }
 }
 
+/*
+* Set ril server state change callback function.
+*/
+int mbtk_ril_server_state_change_reg(mbtk_info_handle_t* handle, mbtk_info_callback_func cb)
+{
+    if(handle == NULL)
+    {
+        LOGE("ARG error.");
+        return -1;
+    }
+
+    ril_server_state_cb = cb;
+    return 0;
+}
+
+
diff --git a/mbtk/libmbtk_lib_v2/audio/mbtk_pcm_stream.c b/mbtk/libmbtk_lib_v2/audio/mbtk_pcm_stream.c
index c817e8a..e178b56 100755
--- a/mbtk/libmbtk_lib_v2/audio/mbtk_pcm_stream.c
+++ b/mbtk/libmbtk_lib_v2/audio/mbtk_pcm_stream.c
@@ -23,6 +23,8 @@
 static audio_inter_info_t *audio_info = NULL;
 static pthread_t recorder_thread_play;
 static mbtk_audio_pa_switch_func audio_pa_switch_func = NULL;
+static mbtk_audio_volume_set_func audio_volume_set_func = NULL;
+static int audio_pcm_write_count = 0;
 
 static int lock_get() {
     int fd = open(LOCK_FILE, O_WRONLY | O_CREAT | O_TRUNC, 0666);
@@ -247,11 +249,16 @@
     return -1;
 }
 
-void mbtk_audio_pcm_pa_func_set(mbtk_audio_pa_switch_func pa_switch_func)
+void mbtk_audio_pa_func_set(mbtk_audio_pa_switch_func pa_switch_func)
 {
 	audio_pa_switch_func = pa_switch_func;
 }
 
+void mbtk_audio_volume_set_func_set(mbtk_audio_volume_set_func volume_set_func)
+{
+	audio_volume_set_func = volume_set_func;
+}
+
 int mbtk_audio_pcm_sample_rate_set(mbtk_audio_sample_rate_enum sample_rate)
 {
     if(!audio_info) {
@@ -288,6 +295,7 @@
 
     audio_info->direction = MBTK_AUDIO_DIRECTION_OUTPUT;
     audio_info->info.play.buff_remain_len = 0;
+    audio_pcm_write_count = 0;
 
     return 0;
 play_start_fail:
@@ -333,6 +341,21 @@
                 goto send_fail;
             }
 
+            if(audio_pcm_write_count < 3) {
+                audio_pcm_write_count++;
+                if(audio_pcm_write_count == 3) {
+                    // Set audio volume.
+                    if(audio_volume_set_func) {
+                        audio_volume_set_func();
+                    }
+
+                    // Open PA
+                    if(audio_pa_switch_func) {
+                        audio_pa_switch_func(TRUE);
+                    }
+                }
+            }
+
             index += (audio_info->playback_size - audio_info->info.play.buff_remain_len);
             audio_info->info.play.buff_remain_len = 0;
         }
@@ -396,7 +419,12 @@
         audio_info->info.play.buff_remain_len = 0;
     }
 
-    vcm_playback_drain(0);//wait for drain the AP audiostub queue.
+    // Close PA
+    if(audio_pa_switch_func) {
+        audio_pa_switch_func(FALSE);
+    }
+
+    vcm_playback_drain(80);//wait for drain the AP audiostub queue.
     usleep(80000);//delay 80ms until DSP play out its buffered data.
     audio_info->info.play.stream_out->common.standby(&(audio_info->info.play.stream_out->common));
     audio_info->audio_ahw_dev_ubus->close_output_stream(audio_info->audio_ahw_dev_ubus, audio_info->info.play.stream_out);
diff --git a/mbtk/mbtk_rild/src/mbtk_data_call.c b/mbtk/mbtk_rild/src/mbtk_data_call.c
index 161492b..5215f77 100755
--- a/mbtk/mbtk_rild/src/mbtk_data_call.c
+++ b/mbtk/mbtk_rild/src/mbtk_data_call.c
@@ -98,7 +98,7 @@
         return MBTK_RESULT_FAIL;
     }
 
-#ifdef MBTK_ALL_CID_SUPPORT
+#if 0
     if(apn_set_state[cid] != '1' && apn_set_state[cid] != '2')
     {
         LOGE("cid [%d] is not exist.", cid);