[Tutorial][Guide][Telephony] Update Telephony documents
authorWootak Jung <wootak.jung@samsung.com>
Tue, 2 Jun 2015 02:23:04 +0000 (11:23 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Tue, 2 Jun 2015 05:12:42 +0000 (14:12 +0900)
Change-Id: I10fa870dfd88c80bff75c90fb45854682cccff25
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
org.tizen.guides/html/native/telephony/telephony_guide_n.htm
org.tizen.tutorials/html/native/telephony/telephony_tutorials_n.htm

index e00db46..ff76139 100644 (file)
 
 <p>The Call API (in <a href="../../../../org.tizen.native.mobile.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">mobile</a> and <a href="../../../../org.tizen.native.wearable.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">wearable</a> applications) provides the following functions:</p>
 
-<ul><li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_voice_call_state()</span>
-<p>Determines whether the voice call is connecting, connected, or idle. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_state_e</span> values.</p></li> 
-<li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_video_call_state()</span>
-<p>Determines whether the video call is connecting, connected, or idle. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_state_e</span> values.</p></li>
+<ul>
 <li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_preferred_voice_subscription()</span>
 <p>Gets the current value for the preferred voice call subscription. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_preferred_voice_subs_e</span> values.</p></li>
 <li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_call_list()</span>
@@ -80,8 +77,8 @@
 <p>Gets the call number.</p></li>
 <li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_type()</span>
 <p>Gets the call type. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_type_e</span> values.</p></li>
-<li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_state()</span>
-<p>Gets the call state. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_state_e</span> values.</p></li>
+<li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_status()</span>
+<p>Gets the call status. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_status_e</span> values.</p></li>
 <li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_direction()</span>
 <p>Gets the call direction: MO (Mobile Originated) or MT (Mobile Terminated). It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_direction_e</span> values.</p></li>
 <li><span style="font-family: Courier New,Courier,monospace">telephony_call_get_conference_status()</span>
      <th>Notification ID</th> 
     </tr> 
     <tr> 
-     <td>Voice call</td> 
-     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATE</span></td> 
-    </tr> 
-     <tr> 
-     <td>Video call</td> 
-     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATE</span></td> 
+     <td>Voice Status Idle</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE</span></td>
+    </tr>
+    <tr>
+     <td>Voice Status Active</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE</span></td>
+    </tr>
+    <tr>
+     <td>Voice Status Held</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD</span></td>
+    </tr>
+    <tr>
+     <td>Voice Status Dialing</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING</span></td>
+    </tr>
+    <tr>
+     <td>Voice Status Alerting</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING</span></td>
+    </tr>
+    <tr>
+     <td>Voice Status Incoming</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING</span></td>
+    </tr>
+     <tr>
+     <td>Video Status Idle</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE</span></td>
+    </tr>
+    <tr>
+     <td>Video Status Active</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE</span></td>
+    </tr>
+    <tr>
+     <td>Video Status Dialing</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING</span></td>
+    </tr>
+    <tr>
+     <td>Video Status Alerting</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING</span></td>
+    </tr>
+    <tr>
+     <td>Video Status Incoming</td>
+     <td><span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING</span></td>
     </tr>
     <tr>
      <td>Preferred voice subscription</td>
@@ -303,4 +336,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
 </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
index c8beeb6..567b813 100644 (file)
@@ -42,7 +42,7 @@
 <h1>Telephony: Handling Phone Call, SIM Card, and Network Information</h1>
 
   
-<p>This tutorial demonstrates how you can get the state of both voice and video calls, get notified when the user makes a voice or video call or hangs up the phone, extract information stored on a SIM card, and get IMEI information.</p>
+<p>This tutorial demonstrates how you can get the status of both voice and video calls, get notified when the user makes a voice or video call or hangs up the phone, extract information stored on a SIM card, and get IMEI information.</p>
 
 
 <h2>Warm-up</h2>
@@ -123,91 +123,7 @@ void tutorial_telephony_deinit()
 
  <h2 id="call" name="call">Getting Call Information</h2>
  
-<p>To get the voice and video call states and be notified when the user makes a voice or video call or hangs up the phone, use the Telephony Call API (in <a href="../../../../org.tizen.native.mobile.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">mobile</a> and <a href="../../../../org.tizen.native.wearable.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">wearable</a> applications) in call-related actions:</p>
-
-<h3>Getting the Call State</h3>
-
-<ol><li><p>You can get the state of the current voice call by using the <span style="font-family: Courier New,Courier,monospace">telephony_call_get_voice_call_state()</span> function. It returns one of the <span style="font-family: Courier New,Courier,monospace">telephony_call_state_e</span> values (in <a href="../../../../org.tizen.native.mobile.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html#gafef963e029b4d1d48bece63245f692f2">mobile</a> and <a href="../../../../org.tizen.native.wearable.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html#gafef963e029b4d1d48bece63245f692f2">wearable</a> applications).</p>
-
-
-<pre class="prettyprint">
-void tutorial_telephony_call_get_voice_call_state()
-{
-&nbsp;&nbsp;&nbsp;telephony_error_e ret;
-&nbsp;&nbsp;&nbsp;telephony_call_state_e voice_call_state;
-&nbsp;&nbsp;&nbsp;ret = telephony_call_get_voice_call_state(handle_list.handle[0], &amp;voice_call_state);
-&nbsp;&nbsp;&nbsp;if (ret != TELEPHONY_ERROR_NONE) 
-&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Error handling
-&nbsp;&nbsp;&nbsp;}
-&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Voice call state: [%d]", voice_call_state);
-}
-</pre></li>
-
-<li><p>You can use the previous process to get to the video call state by replacing voice with video in the function: <span style="font-family: Courier New,Courier,monospace">telephony_call_get_video_call_state()</span>.</p>
-
-<pre class="prettyprint">
-void tutorial_telephony_call_get_video_call_state()
-{
-&nbsp;&nbsp;&nbsp;telephony_error_e ret;
-&nbsp;&nbsp;&nbsp;telephony_call_state_e video_call_state;
-&nbsp;&nbsp;&nbsp;ret = telephony_call_get_video_call_state(handle_list.handle[0], &amp;video_call_state);
-&nbsp;&nbsp;&nbsp;if (ret != TELEPHONY_ERROR_NONE) 
-&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Error handling
-&nbsp;&nbsp;&nbsp;}
-&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Video call state: [%d]", video_call_state);
-}
-</pre></li></ol>
-
-<h3>Receiving Change Notifications for the Call States</h3>
-<p>The callback function can be used to obtain change notifications for the call state asynchronously. The call state is returned through a callback function, given to the function as one of its parameters.</p>
-
-<ol><li><p>To be notified when the voice call state changes, implement a callback function compatible with the <span style="font-family: Courier New,Courier,monospace">telephony_noti_cb()</span> function typedef and register this function.</p>
-
-<pre class="prettyprint">
-void voice_call_state_noti_cb(telephony_h handle, telephony_noti_e noti_id, void *data, void* user_data)
-{
-&nbsp;&nbsp;&nbsp;telephony_call_state_e voice_call_state = *(int *)data;
-&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Voice call state: [%d]", voice_call_state);
-}
-
-void tutorial_telephony_set_noti_cb_voice()
-{
-&nbsp;&nbsp;&nbsp;telephony_error_e ret;
-&nbsp;&nbsp;&nbsp;ret = telephony_set_noti_cb(handle_list.handle[0], TELEPHONY_NOTI_VOICE_CALL_STATE,
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;voice_call_state_noti_cb, NULL);
-&nbsp;&nbsp;&nbsp;if (ret != TELEPHONY_ERROR_NONE)
-&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Error handling
-&nbsp;&nbsp;&nbsp;}
-}
-</pre>
-
-<p>After registering, you are notified of the voice call state until you cancel the registration of the callback function. To unregister the callback, invoke the <span style="font-family: Courier New,Courier,monospace">telephony_unset_noti_cb()</span> function with <span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VOICE_CALL_STATE</span>.</p></li>
-
-<li><p>To be notified when the video call state changes, use the same callback function typedef as for the voice calls.</p>
-
-<pre class="prettyprint">
-void video_call_state_noti_cb(telephony_h handle, telephony_noti_e noti_id, void *data, void* user_data)
-{
-&nbsp;&nbsp;&nbsp;telephony_call_state_e video_call_state = *(int *)data;
-&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Video call state: [%d]", video_call_state);
-}
-
-void tutorial_telephony_set_noti_cb_video()
-{
-&nbsp;&nbsp;&nbsp;telephony_error_e ret;
-&nbsp;&nbsp;&nbsp;ret = telephony_set_noti_cb(handle_list.handle[0], TELEPHONY_NOTI_VIDEO_CALL_STATE,
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video_call_state_noti_cb, NULL);
-&nbsp;&nbsp;&nbsp;if (ret != TELEPHONY_ERROR_NONE)
-&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Error handling
-&nbsp;&nbsp;&nbsp;}
-}
-</pre>
-
-<p>After registering, you are notified of the video call state information until you cancel the registration of the callback function. To unregister the callback, invoke the <span style="font-family: Courier New,Courier,monospace">telephony_unset_noti_cb()</span> function with <span style="font-family: Courier New,Courier,monospace">TELEPHONY_NOTI_VIDEO_CALL_STATE</span>.</p></li></ol>
+<p>To get the voice and video call status and be notified when the user makes a voice or video call or hangs up the phone, use the Telephony Call API (in <a href="../../../../org.tizen.native.mobile.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">mobile</a> and <a href="../../../../org.tizen.native.wearable.apireference/group__CAPI__TELEPHONY__INFORMATION__CALL.html">wearable</a> applications) in call-related actions:</p>
 
 <h3>Getting the Current Call List</h3>
 
@@ -229,12 +145,12 @@ void tutorial_telephony_call_get_call_list()
 &nbsp;&nbsp;&nbsp;else 
 &nbsp;&nbsp;&nbsp;{
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int handle_id;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *number;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_type_e type;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_state_e state;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_direction_e direction;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool conf_status;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int handle_id = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *number = NULL;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_type_e type = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_status_e status = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_direction_e direction = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool conf_status = 0;
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (count == 0) 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
@@ -248,18 +164,29 @@ void tutorial_telephony_call_get_call_list()
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_handle_id(call_list[i], &amp;handle_id);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_number(call_list[i], &amp;number);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_type(call_list[i], &amp;type);
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_state(call_list[i], &amp;state);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_status(call_list[i], &amp;status);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_direction(call_list[i], &amp;direction);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_conference_status(call_list[i], &amp;conf_status);
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;handle_id[%d] number[%s] type[%d] state[%d] direction[%d] conf_status[%d]&quot;,
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_id, number, type, state, direction, conf_status);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "id[%d] number[%s] type[%s] status[%s] direction[%s] conference_status[%s]",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_id, number,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type == TELEPHONY_CALL_TYPE_VOICE ? "VOICE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type == TELEPHONY_CALL_TYPE_VIDEO ? "VIDEO" : "E911",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_IDLE ? "IDLE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_ACTIVE ? "ACTVIE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_HELD ? "HELD" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_DIALING ? "DIALING" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_ALERTING ? "ALERTING" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_INCOMING ? "INCOMING" : "UNKNOWN",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;direction == TELEPHONY_CALL_DIRECTION_MO ? "MO" : "MT",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf_status ? "TRUE" : "FALSE");
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(number);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_release_call_list(count, &call_list);
 &nbsp;&nbsp;&nbsp;}
 }
 </pre>
-<p>After getting the handle, you can use it to retrieve various call information (such as handle ID, number, type, state, direction, conference status).</p></li>
+<p>After getting the handle, you can use it to retrieve various call information (such as handle ID, number, type, status, direction, conference status).</p></li>
 
 <li><p>When the call handle is no longer needed, call the <span style="font-family: Courier New,Courier,monospace">telephony_call_release_call_list()</span> function to free the handle:</p>
 <pre class="prettyprint">
@@ -269,6 +196,105 @@ void tutorial_telephony_call_release_call_list()
 }
 </pre></li></ol>
 
+<h3>Receiving Change Notifications for the Call Status</h3>
+<p>The callback function can be used to obtain change notifications for the call status asynchronously. The call id is returned through a callback function, given to the function as one of its parameters.</p>
+
+<li><p>To be notified when the voice call status changes, implement a callback function compatible with the <span style="font-family: Courier New,Courier,monospace">telephony_noti_cb()</span> function typedef and register this function.</p>
+
+<pre class="prettyprint">
+static int voice_call_noti_tbl[] = {
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE,
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE,
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD,
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING,
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING,
+&nbsp;&nbsp;&nbsp;TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING,
+};
+
+void voice_call_status_noti_cb(telephony_h handle, telephony_noti_e noti_id, void *data, void* user_data)
+{
+&nbsp;&nbsp;&nbsp;int ret;
+&nbsp;&nbsp;&nbsp;telephony_call_h *call_list;
+&nbsp;&nbsp;&nbsp;unsigned int count = 0;
+
+&nbsp;&nbsp;&nbsp;switch (noti_id) {
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Idle!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Active!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Held!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Dialing!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Alerting!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Noti!!! Voice Call Status Incoming!!! [%d]", *(int *)data);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;default:
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "Unknown noti");
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
+&nbsp;&nbsp;&nbsp;}
+
+&nbsp;&nbsp;&nbsp;ret_value = telephony_call_get_call_list(handle_list.handle[0], &count, &call_list);
+&nbsp;&nbsp;&nbsp;if (ret_value != TELEPHONY_ERROR_NONE) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOGE("telephony_call_get_call_list() failed!!!zz [0x%x]", ret_value);
+&nbsp;&nbsp;&nbsp;} else {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int handle_id = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *number = NULL;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_type_e type = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_status_e status = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_direction_e direction = 0;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool conf_status = 0;
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < count; i++) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_handle_id(call_list[i], &handle_id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_number(call_list[i], &number);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_type(call_list[i], &type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_status(call_list[i], &status);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_direction(call_list[i], &direction);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_get_conference_status(call_list[i], &conf_status);
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlog_print(DLOG_INFO, LOG_TAG, "id[%d] number[%s] type[%s] status[%s] direction[%s] conference_status[%s]",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_id, number,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type == TELEPHONY_CALL_TYPE_VOICE ? "VOICE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type == TELEPHONY_CALL_TYPE_VIDEO ? "VIDEO" : "E911",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_IDLE ? "IDLE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_ACTIVE ? "ACTVIE" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_HELD ? "HELD" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_DIALING ? "DIALING" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_ALERTING ? "ALERTING" :
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status == TELEPHONY_CALL_STATUS_INCOMING ? "INCOMING" : "UNKNOWN",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;direction == TELEPHONY_CALL_DIRECTION_MO ? "MO" : "MT",
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf_status ? "TRUE" : "FALSE");
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(number);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;telephony_call_release_call_list(count, &call_list);
+&nbsp;&nbsp;&nbsp;}
+}
+
+void tutorial_telephony_set_noti_cb_voice()
+{
+&nbsp;&nbsp;&nbsp;telephony_error_e ret;
+&nbsp;&nbsp;&nbsp;int i;
+
+&nbsp;&nbsp;&nbsp;for (i = 0; i < (sizeof(voice_call_noti_tbl) / sizeof(int)); i++) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = telephony_set_noti_cb(handle_list.handle[0], voice_call_noti_tbl[i], voice_call_status_noti_cb, NULL);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbspif (ret != TELEPHONY_ERROR_NONE)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp// Error handling
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp}
+&nbsp;&nbsp;&nbsp;}
+}
+</pre>
+
+<p>After registering, you are notified of the voice call status until you cancel the registration of the callback function. To unregister the callback, invoke the <span style="font-family: Courier New,Courier,monospace">telephony_unset_noti_cb()</span> function with each notification.</p></li>
 
  <h2 id="sim" name="sim">Getting SIM Information</h2>