2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <telephony_network.h>
19 #include <vconf-keys.h>
30 #define LOG_TAG "CAPI_TELEPHONY_NETWORK_INFO"
32 // whether vconf_notify_key_changed is registered or not
33 static bool flight_mode_is_registered = false;
34 static bool svctype_is_registered = false;
35 static bool svc_cs_is_registered = false;
36 static bool cell_id_is_registered = false;
37 static bool rssi_is_registered = false;
38 static bool roaming_is_registered = false;
40 typedef struct _telephony_cb_data
47 // Callback function data
48 static telephony_cb_data service_state_cb = {NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE, NULL, NULL};
49 static telephony_cb_data cell_id_cb = {0, NULL, NULL};
50 static telephony_cb_data rssi_cb = {NETWORK_INFO_RSSI_0, NULL, NULL};
51 static telephony_cb_data roaming_cb = {false, NULL, NULL};
53 // Callback function adapter
54 static void __telephony_service_changed_cb_adapter(keynode_t *node, void* user_data);
55 static void __cell_id_changed_cb_adapter(keynode_t *node, void* user_data);
56 static void __rssi_changed_cb_adapter(keynode_t *node, void* user_data);
57 static void __roaming_changed_cb_adapter(keynode_t *node, void* user_data);
58 static char* __convert_error_code_to_string(network_info_error_e error_code);
59 static int __check_service_state(char* function_name);
62 #define NETWORK_INFO_CHECK_INPUT_PARAMETER(arg) \
65 LOGE("[%s] INVALID_PARAMETER(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_INVALID_PARAMETER); \
66 return NETWORK_INFO_ERROR_INVALID_PARAMETER; \
70 int network_info_get_lac(int* lac)
72 int ret = NETWORK_INFO_ERROR_NONE;
74 NETWORK_INFO_CHECK_INPUT_PARAMETER(lac);
76 ret = __check_service_state((char*)__FUNCTION__);
77 if( ret != NETWORK_INFO_ERROR_NONE )
82 if( vconf_get_int(VCONFKEY_TELEPHONY_LAC, lac) != 0 )
84 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
85 return NETWORK_INFO_ERROR_OPERATION_FAILED;
88 return NETWORK_INFO_ERROR_NONE;
92 int network_info_get_cell_id(int* cell_id)
94 int ret = NETWORK_INFO_ERROR_NONE;
96 NETWORK_INFO_CHECK_INPUT_PARAMETER(cell_id);
98 ret = __check_service_state((char*)__FUNCTION__);
99 if( ret != NETWORK_INFO_ERROR_NONE )
104 if( vconf_get_int(VCONFKEY_TELEPHONY_CELLID, cell_id) != 0 )
106 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
107 return NETWORK_INFO_ERROR_OPERATION_FAILED;
110 return NETWORK_INFO_ERROR_NONE;
114 int network_info_get_rssi(network_info_rssi_e* rssi)
116 int ret = NETWORK_INFO_ERROR_NONE;
118 NETWORK_INFO_CHECK_INPUT_PARAMETER(rssi);
120 ret = __check_service_state((char*)__FUNCTION__);
121 if( ret != NETWORK_INFO_ERROR_NONE )
126 if( vconf_get_int(VCONFKEY_TELEPHONY_RSSI, (int *)rssi) != 0 )
128 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
129 return NETWORK_INFO_ERROR_OPERATION_FAILED;
132 return NETWORK_INFO_ERROR_NONE;
136 int network_info_is_roaming(bool* is_roaming)
138 int roaming_state = 0;
139 int ret = NETWORK_INFO_ERROR_NONE;
141 NETWORK_INFO_CHECK_INPUT_PARAMETER(is_roaming);
143 ret = __check_service_state((char*)__FUNCTION__);
144 if( ret != NETWORK_INFO_ERROR_NONE )
149 if( vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &roaming_state) != 0 )
151 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
152 return NETWORK_INFO_ERROR_OPERATION_FAILED;
155 if( roaming_state == VCONFKEY_TELEPHONY_SVC_ROAM_ON )
164 return NETWORK_INFO_ERROR_NONE;
168 int network_info_get_mcc(char** mcc)
170 char plmn_str[32] = "";
173 int ret = NETWORK_INFO_ERROR_NONE;
175 NETWORK_INFO_CHECK_INPUT_PARAMETER(mcc);
177 ret = __check_service_state((char*)__FUNCTION__);
178 if( ret != NETWORK_INFO_ERROR_NONE )
183 if( vconf_get_int(VCONFKEY_TELEPHONY_PLMN, &plmn_int) != 0 )
185 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
186 return NETWORK_INFO_ERROR_OPERATION_FAILED;
189 snprintf(plmn_str, 32, "%d", plmn_int);
190 *mcc = (char*)malloc(sizeof(char) * (mcc_length+1));
193 LOGE("[%s] OUT_OF_MEMORY(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OUT_OF_MEMORY);
194 return NETWORK_INFO_ERROR_OUT_OF_MEMORY;
196 memset(*mcc, 0x00, mcc_length+1);
197 strncpy(*mcc, plmn_str, mcc_length);
199 return NETWORK_INFO_ERROR_NONE;
203 int network_info_get_mnc(char** mnc)
205 char plmn_str[32] = "";
207 int mnc_length = 3; //mcc_length can 2 or 3 depending on a network, so have to proper way to get the exact length of mcc
208 int ret = NETWORK_INFO_ERROR_NONE;
210 NETWORK_INFO_CHECK_INPUT_PARAMETER(mnc);
212 ret = __check_service_state((char*)__FUNCTION__);
213 if( ret != NETWORK_INFO_ERROR_NONE )
218 if( vconf_get_int(VCONFKEY_TELEPHONY_PLMN, &plmn_int) != 0 )
220 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
221 return NETWORK_INFO_ERROR_OPERATION_FAILED;
224 snprintf(plmn_str, 32, "%d", plmn_int);
225 *mnc = (char*)malloc(sizeof(char) * (mnc_length+1));
228 LOGE("[%s] OUT_OF_MEMORY(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OUT_OF_MEMORY);
229 return NETWORK_INFO_ERROR_OUT_OF_MEMORY;
231 memset(*mnc, 0x00, mnc_length+1);
232 strncpy(*mnc, plmn_str+3, mnc_length);
234 return NETWORK_INFO_ERROR_NONE;
238 int network_info_get_provider_name(char** provider_name)
240 char* provider_name_p = NULL;
241 int ret = NETWORK_INFO_ERROR_NONE;
243 NETWORK_INFO_CHECK_INPUT_PARAMETER(provider_name);
245 ret = __check_service_state((char*)__FUNCTION__);
246 if( ret != NETWORK_INFO_ERROR_NONE )
251 provider_name_p = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
252 if( provider_name_p == NULL )
254 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
255 return NETWORK_INFO_ERROR_OPERATION_FAILED;
258 *provider_name = provider_name_p;
260 return NETWORK_INFO_ERROR_NONE;
264 int network_info_get_type(network_info_type_e* network_type)
266 int service_type = 0;
267 int ret = NETWORK_INFO_ERROR_NONE;
269 NETWORK_INFO_CHECK_INPUT_PARAMETER(network_type);
271 ret = __check_service_state((char*)__FUNCTION__);
272 if( ret != NETWORK_INFO_ERROR_NONE )
277 if( vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0 )
279 LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
280 return NETWORK_INFO_ERROR_OPERATION_FAILED;
285 case VCONFKEY_TELEPHONY_SVCTYPE_2G:
286 *network_type = NETWORK_INFO_TYPE_GSM;
288 case VCONFKEY_TELEPHONY_SVCTYPE_2_5G:
289 *network_type = NETWORK_INFO_TYPE_GPRS;
291 case VCONFKEY_TELEPHONY_SVCTYPE_2_5G_EDGE:
292 *network_type = NETWORK_INFO_TYPE_EDGE;
294 case VCONFKEY_TELEPHONY_SVCTYPE_3G:
295 *network_type = NETWORK_INFO_TYPE_UMTS;;
297 case VCONFKEY_TELEPHONY_SVCTYPE_HSDPA:
298 *network_type = NETWORK_INFO_TYPE_HSDPA;
301 *network_type = NETWORK_INFO_TYPE_UNKNOWN;
305 return NETWORK_INFO_ERROR_NONE;
309 int network_info_get_service_state(network_info_service_state_e* network_service_state)
311 int service_type = 0;
313 int is_flight_mode = 0;
315 NETWORK_INFO_CHECK_INPUT_PARAMETER(network_service_state);
318 if( vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0 )
320 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to get service type", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
321 return NETWORK_INFO_ERROR_OPERATION_FAILED;
324 if( service_type == VCONFKEY_TELEPHONY_SVCTYPE_EMERGENCY )
326 *network_service_state = NETWORK_INFO_SERVICE_STATE_EMERGENCY_ONLY;
327 return NETWORK_INFO_ERROR_NONE;
330 // get circuit service
331 if( vconf_get_int(VCONFKEY_TELEPHONY_SVC_CS, &cs_status) != 0 )
333 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to get the status of cs", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
334 return NETWORK_INFO_ERROR_OPERATION_FAILED;
337 if( cs_status == VCONFKEY_TELEPHONY_SVC_CS_ON )
339 *network_service_state = NETWORK_INFO_SERVICE_STATE_IN_SERVICE;
340 return NETWORK_INFO_ERROR_NONE;
344 if( vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &is_flight_mode) != 0 )
346 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to get flight mode", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
347 return NETWORK_INFO_ERROR_OPERATION_FAILED;
350 if( is_flight_mode == 1 )
352 *network_service_state = NETWORK_INFO_SERVICE_STATE_RADIO_OFF;
353 return NETWORK_INFO_ERROR_NONE;
356 *network_service_state = NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE;
357 return NETWORK_INFO_ERROR_NONE;
360 int network_info_set_service_state_changed_cb(network_info_service_state_changed_cb callback, void* user_data)
362 int ret = NETWORK_INFO_ERROR_OPERATION_FAILED;
363 network_info_service_state_e service_state = NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE;
365 NETWORK_INFO_CHECK_INPUT_PARAMETER(callback);
367 ret = network_info_get_service_state(&service_state);
368 if( ret != NETWORK_INFO_ERROR_NONE )
370 LOGE("[%s] %s(0x%08x) : fail to get current service state", __FUNCTION__, __convert_error_code_to_string(ret), ret);
374 if( flight_mode_is_registered == false)
376 if( vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, (vconf_callback_fn)__telephony_service_changed_cb_adapter, NULL) != 0 )
378 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback of flight mode", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
379 return NETWORK_INFO_ERROR_OPERATION_FAILED;
381 flight_mode_is_registered = true;
384 if( svctype_is_registered == false )
386 if(vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, (vconf_callback_fn)__telephony_service_changed_cb_adapter, NULL) != 0)
388 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback of service type", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
389 return NETWORK_INFO_ERROR_OPERATION_FAILED;
391 svctype_is_registered = true;
394 if( svc_cs_is_registered == false )
396 if(vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVC_CS, (vconf_callback_fn)__telephony_service_changed_cb_adapter, NULL) != 0)
398 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback of circuit service", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
399 return NETWORK_INFO_ERROR_OPERATION_FAILED;
401 svc_cs_is_registered = true;
404 service_state_cb.previous_value = service_state;
405 service_state_cb.cb = callback;
406 service_state_cb.user_data = user_data;
408 return NETWORK_INFO_ERROR_NONE;
411 int network_info_unset_service_state_changed_cb()
413 if( flight_mode_is_registered == true )
415 if( vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, (vconf_callback_fn)__telephony_service_changed_cb_adapter) != 0 )
417 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback of flight mode", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
418 return NETWORK_INFO_ERROR_OPERATION_FAILED;
420 flight_mode_is_registered = false;
423 if( svctype_is_registered == true )
425 if(vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, (vconf_callback_fn)__telephony_service_changed_cb_adapter) != 0)
427 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback of service type", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
428 return NETWORK_INFO_ERROR_OPERATION_FAILED;
430 svctype_is_registered = false;
433 if( svc_cs_is_registered == true )
435 if(vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVC_CS, (vconf_callback_fn)__telephony_service_changed_cb_adapter) != 0)
437 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback of circuit service", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
438 return NETWORK_INFO_ERROR_OPERATION_FAILED;
440 svc_cs_is_registered = false;
443 service_state_cb.previous_value = NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE;
444 service_state_cb.cb = NULL;
445 service_state_cb.user_data = NULL;
447 return NETWORK_INFO_ERROR_NONE;
450 int network_info_set_cell_id_changed_cb(network_info_cell_id_changed_cb callback, void* user_data)
453 int ret = NETWORK_INFO_ERROR_NONE;
455 NETWORK_INFO_CHECK_INPUT_PARAMETER(callback);
457 if (cell_id_is_registered == false) { /* Not yet registered */
458 if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_CELLID,
459 (vconf_callback_fn)__cell_id_changed_cb_adapter, NULL) != 0) {
460 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
461 return NETWORK_INFO_ERROR_OPERATION_FAILED;
463 cell_id_is_registered = true;
466 /* Callback details */
467 ret = network_info_get_cell_id(&cell_id);
468 if (ret == NETWORK_INFO_ERROR_OPERATION_FAILED) {
469 cell_id_cb.previous_value = -1;
471 cell_id_cb.previous_value = cell_id;
473 cell_id_cb.cb = callback;
474 cell_id_cb.user_data = user_data;
476 return NETWORK_INFO_ERROR_NONE;
479 int network_info_unset_cell_id_changed_cb()
481 if( cell_id_is_registered == true )
483 if( vconf_ignore_key_changed(VCONFKEY_TELEPHONY_CELLID, (vconf_callback_fn)__cell_id_changed_cb_adapter) != 0 )
485 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
486 return NETWORK_INFO_ERROR_OPERATION_FAILED;
489 cell_id_is_registered = false;
490 cell_id_cb.previous_value = 0;
491 cell_id_cb.cb = NULL;
492 cell_id_cb.user_data = NULL;
495 return NETWORK_INFO_ERROR_NONE;
498 int network_info_set_rssi_changed_cb(network_info_rssi_changed_cb callback, void* user_data)
500 network_info_rssi_e rssi = NETWORK_INFO_RSSI_0;
501 int ret = NETWORK_INFO_ERROR_NONE;
503 NETWORK_INFO_CHECK_INPUT_PARAMETER(callback);
505 if (rssi_is_registered == false) { /* Not yet registered */
506 if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_RSSI,
507 (vconf_callback_fn)__rssi_changed_cb_adapter,
509 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
510 return NETWORK_INFO_ERROR_OPERATION_FAILED;
512 rssi_is_registered = true;
515 /* Callback details */
516 ret = network_info_get_rssi(&rssi);
517 if (ret == NETWORK_INFO_ERROR_OPERATION_FAILED) {
518 rssi_cb.previous_value = NETWORK_INFO_RSSI_0;
520 rssi_cb.previous_value = rssi;
522 rssi_cb.cb = callback;
523 rssi_cb.user_data = user_data;
525 return NETWORK_INFO_ERROR_NONE;
528 int network_info_unset_rssi_changed_cb()
530 if( rssi_is_registered == true )
532 if( vconf_ignore_key_changed(VCONFKEY_TELEPHONY_RSSI, (vconf_callback_fn)__rssi_changed_cb_adapter) != 0 )
534 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
535 return NETWORK_INFO_ERROR_OPERATION_FAILED;
538 rssi_is_registered = false;
539 rssi_cb.previous_value = NETWORK_INFO_RSSI_0;
541 rssi_cb.user_data = NULL;
544 return NETWORK_INFO_ERROR_NONE;
547 int network_info_set_roaming_state_changed_cb(network_info_roaming_state_changed_cb callback, void *user_data)
549 bool is_roaming = false;
550 int ret = NETWORK_INFO_ERROR_NONE;
552 NETWORK_INFO_CHECK_INPUT_PARAMETER(callback);
554 if (roaming_is_registered == false) { /* Not yet registered */
555 if(vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM,
556 (vconf_callback_fn)__roaming_changed_cb_adapter, NULL) != 0) {
557 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to register callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
558 return NETWORK_INFO_ERROR_OPERATION_FAILED;
560 roaming_is_registered = true;
563 /* Callback details */
564 ret = network_info_is_roaming(&is_roaming);
565 if (ret == NETWORK_INFO_ERROR_OPERATION_FAILED) {
566 roaming_cb.previous_value = -1;
568 roaming_cb.previous_value = is_roaming;
570 roaming_cb.cb = callback;
571 roaming_cb.user_data = user_data;
573 return NETWORK_INFO_ERROR_NONE;
576 int network_info_unset_roaming_state_changed_cb()
578 if( roaming_is_registered == true )
580 if( vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVC_ROAM, (vconf_callback_fn)__roaming_changed_cb_adapter) != 0 )
582 LOGE("[%s] OPERATION_FAILED(0x%08x) : fail to unregister callback function", __FUNCTION__, NETWORK_INFO_ERROR_OPERATION_FAILED);
583 return NETWORK_INFO_ERROR_OPERATION_FAILED;
586 roaming_is_registered = false;
587 roaming_cb.previous_value = false;
588 roaming_cb.cb = NULL;
589 roaming_cb.user_data = NULL;
592 return NETWORK_INFO_ERROR_NONE;
595 static void __telephony_service_changed_cb_adapter(keynode_t *node, void* user_data)
597 network_info_service_state_e status = NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE;
599 if( service_state_cb.cb == NULL )
604 if( network_info_get_service_state(&status) == NETWORK_INFO_ERROR_NONE )
606 if( status != service_state_cb.previous_value )
608 ((network_info_service_state_changed_cb)(service_state_cb.cb))(status, service_state_cb.user_data);
609 service_state_cb.previous_value = status;
614 static void __cell_id_changed_cb_adapter(keynode_t *node, void* user_data)
618 if( cell_id_cb.cb == NULL )
620 LOGI("[%s] There is no registered callback", __FUNCTION__);
624 if( network_info_get_cell_id(&cell_id) == NETWORK_INFO_ERROR_NONE )
626 if( cell_id != cell_id_cb.previous_value )
628 LOGI("[%s] network_info_cell_id_changed_cb will be called", __FUNCTION__);
629 ((network_info_cell_id_changed_cb)(cell_id_cb.cb))(cell_id, cell_id_cb.user_data);
630 cell_id_cb.previous_value = cell_id;
635 static void __rssi_changed_cb_adapter(keynode_t *node, void* user_data)
637 network_info_rssi_e rssi = 0;
639 if( rssi_cb.cb == NULL )
644 if( network_info_get_rssi(&rssi) == NETWORK_INFO_ERROR_NONE )
646 if( rssi != rssi_cb.previous_value )
648 ((network_info_rssi_changed_cb)(rssi_cb.cb))(rssi, rssi_cb.user_data);
649 rssi_cb.previous_value = rssi;
654 static void __roaming_changed_cb_adapter(keynode_t *node, void* user_data)
658 if( roaming_cb.cb == NULL )
663 if( network_info_is_roaming(&is_roaming) == NETWORK_INFO_ERROR_NONE )
665 if( is_roaming != roaming_cb.previous_value )
667 ((network_info_roaming_state_changed_cb)(roaming_cb.cb))(is_roaming, roaming_cb.user_data);
668 roaming_cb.previous_value = is_roaming;
674 static char* __convert_error_code_to_string(network_info_error_e error_code)
678 case NETWORK_INFO_ERROR_OUT_OF_MEMORY:
679 return "OUT_OF_MEMORY";
680 case NETWORK_INFO_ERROR_INVALID_PARAMETER:
681 return "INVALID_PARAMETER";
682 case NETWORK_INFO_ERROR_OPERATION_FAILED:
683 return "OPERATION_FAILED";
684 case NETWORK_INFO_ERROR_OUT_OF_SERVICE:
685 return "OUT_OF_SERVICE";
691 static int __check_service_state(char* function_name)
693 network_info_service_state_e service_state = NETWORK_INFO_SERVICE_STATE_OUT_OF_SERVICE;
695 if( network_info_get_service_state(&service_state) != NETWORK_INFO_ERROR_NONE )
697 LOGE("[%s] OPERATION_FAILED(0x%08x)", function_name, NETWORK_INFO_ERROR_OPERATION_FAILED);
698 return NETWORK_INFO_ERROR_OPERATION_FAILED;
701 if( service_state != NETWORK_INFO_SERVICE_STATE_IN_SERVICE )
703 LOGE("[%s] OUT_OF_SERVICE(0x%08x)", function_name, NETWORK_INFO_ERROR_OUT_OF_SERVICE);
704 return NETWORK_INFO_ERROR_OUT_OF_SERVICE;
707 return NETWORK_INFO_ERROR_NONE;