4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include "tapi_common.h"
26 #include "TapiUtility.h"
27 #include "TelNetwork.h"
31 #include "ITapiNetwork.h"
33 static int _convert_systemtype_to_act(int type)
36 case TAPI_NETWORK_SYSTEM_GSM:
40 case TAPI_NETWORK_SYSTEM_GPRS:
44 case TAPI_NETWORK_SYSTEM_EGPRS:
48 case TAPI_NETWORK_SYSTEM_PCS1900:
51 case TAPI_NETWORK_SYSTEM_UMTS:
55 case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
59 case TAPI_NETWORK_SYSTEM_IS95A:
63 case TAPI_NETWORK_SYSTEM_IS95B:
67 case TAPI_NETWORK_SYSTEM_CDMA_1X:
71 case TAPI_NETWORK_SYSTEM_EVDO_REV_0:
75 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID:
79 case TAPI_NETWORK_SYSTEM_EVDO_REV_A:
83 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID:
87 case TAPI_NETWORK_SYSTEM_EVDV:
91 case TAPI_NETWORK_SYSTEM_LTE:
102 static int _convert_act_to_systemtype(int act)
106 return TAPI_NETWORK_SYSTEM_GSM;
110 return TAPI_NETWORK_SYSTEM_GPRS;
114 return TAPI_NETWORK_SYSTEM_EGPRS;
118 return TAPI_NETWORK_SYSTEM_UMTS;
122 return TAPI_NETWORK_SYSTEM_GSM_AND_UMTS;
126 return TAPI_NETWORK_SYSTEM_IS95A;
130 return TAPI_NETWORK_SYSTEM_IS95B;
134 return TAPI_NETWORK_SYSTEM_CDMA_1X;
138 return TAPI_NETWORK_SYSTEM_EVDO_REV_0;
142 return TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID;
146 return TAPI_NETWORK_SYSTEM_EVDO_REV_A;
150 return TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID;
154 return TAPI_NETWORK_SYSTEM_EVDV;
158 return TAPI_NETWORK_SYSTEM_LTE;
165 return TAPI_NETWORK_SYSTEM_NO_SRV;
168 static void on_signal_registration_status (TapiHandle *handle, GVariant *param,
169 char *noti_id, struct tapi_evt_cb *evt_cb_data)
171 struct tel_noti_network_registration_status noti;
173 g_variant_get(param, "(iiib)", ¬i.cs, ¬i.ps, ¬i.type, ¬i.is_roaming);
175 CALLBACK_CALL(¬i);
178 static void on_signal_strength (TapiHandle *handle, GVariant *param,
179 char *noti_id, struct tapi_evt_cb *evt_cb_data)
181 struct tel_noti_network_signal_strength noti;
183 g_variant_get(param, "(i)", ¬i.dbm);
185 CALLBACK_CALL(¬i);
188 static void on_signal_cell_info (TapiHandle *handle, GVariant *param,
189 char *noti_id, struct tapi_evt_cb *evt_cb_data)
191 struct tel_noti_network_cell_info noti;
193 memset(¬i, 0, sizeof(struct tel_noti_network_cell_info));
194 g_variant_get(param, "(ii)", ¬i.lac, ¬i.cell_id);
196 CALLBACK_CALL(¬i);
199 static void on_signal_change (TapiHandle *handle, GVariant *param,
200 char *noti_id, struct tapi_evt_cb *evt_cb_data)
202 struct tel_noti_network_change noti;
205 memset(¬i, 0, sizeof(struct tel_noti_network_change));
207 g_variant_get(param, "(isi)", &act, &plmn, ¬i.lac);
211 noti.act = TAPI_NETWORK_SYSTEM_GSM;
214 noti.act = TAPI_NETWORK_SYSTEM_GPRS;
217 noti.act = TAPI_NETWORK_SYSTEM_EGPRS;
220 noti.act = TAPI_NETWORK_SYSTEM_UMTS;
223 noti.act = TAPI_NETWORK_SYSTEM_GSM_AND_UMTS;
226 noti.act = TAPI_NETWORK_SYSTEM_IS95A;
229 noti.act = TAPI_NETWORK_SYSTEM_IS95B;
232 noti.act = TAPI_NETWORK_SYSTEM_CDMA_1X;
235 noti.act = TAPI_NETWORK_SYSTEM_EVDO_REV_0;
238 noti.act = TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID;
241 noti.act = TAPI_NETWORK_SYSTEM_EVDO_REV_A;
244 noti.act = TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID;
247 noti.act = TAPI_NETWORK_SYSTEM_EVDV;
250 noti.act = TAPI_NETWORK_SYSTEM_LTE;
253 noti.act = TAPI_NETWORK_SYSTEM_NO_SRV;
258 snprintf(noti.plmn, 7, "%s", plmn);
261 CALLBACK_CALL(¬i);
264 static void on_signal_time_info (TapiHandle *handle, GVariant *param,
265 char *noti_id, struct tapi_evt_cb *evt_cb_data)
267 struct tel_noti_network_time_info noti;
270 memset(¬i, 0, sizeof(struct tel_noti_network_time_info));
271 g_variant_get(param, "(iiiiiiiiibs)", ¬i.year, ¬i.month, ¬i.day,
272 ¬i.hour, ¬i.minute, ¬i.second,
273 ¬i.wday, ¬i.gmtoff, ¬i.dstoff, ¬i.isdst,
277 snprintf(noti.plmn, 7, "%s", plmn);
280 CALLBACK_CALL(¬i);
283 static void on_signal_identity (TapiHandle *handle, GVariant *param,
284 char *noti_id, struct tapi_evt_cb *evt_cb_data)
286 struct tel_noti_network_identity noti;
287 char *plmn = NULL, *s_name = NULL, *f_name = NULL;
289 memset(¬i, 0, sizeof(struct tel_noti_network_identity));
291 g_variant_get(param, "(sss)", &plmn, &s_name, &f_name);
294 snprintf(noti.plmn, 7, "%s", plmn);
297 snprintf(noti.short_name, 17, "%s", s_name);
300 snprintf(noti.full_name, 33, "%s", f_name);
303 CALLBACK_CALL(¬i);
306 static struct signal_map signals[] = {
307 { "RegistrationStatus", on_signal_registration_status },
308 { "SignalStrength", on_signal_strength },
309 { "CellInfo", on_signal_cell_info },
310 { "Change", on_signal_change },
311 { "TimeInfo", on_signal_time_info },
312 { "Identity", on_signal_identity },
315 void _process_network_event(const gchar *sig, GVariant *param,
316 TapiHandle *handle, char *noti_id, struct tapi_evt_cb *evt_cb_data)
319 TAPI_RETURN_IF_FAIL(evt_cb_data);
321 for (i = 0; i < sizeof (signals) / sizeof (struct signal_map); i++) {
322 if (!g_strcmp0 (sig, signals[i].signal_name)) {
323 signals[i].callback (handle, param, noti_id, evt_cb_data);
328 dbg("not handled NETWORK noti[%s]",sig );
331 static gboolean _check_plmn(const char *plmn)
333 unsigned int plmn_len = 0;
340 plmn_len = strlen(plmn);
341 if (plmn_len < 5 || plmn_len > 6) {
342 err("PLMN length(%d) is invalid", plmn_len);
349 static gboolean _check_operation(TelNetworkPreferredPlmnOp_t operation)
352 case TAPI_NETWORK_PREF_PLMN_ADD:
353 case TAPI_NETWORK_PREF_PLMN_EDIT:
354 case TAPI_NETWORK_PREF_PLMN_DELETE:
357 err("operation %d is not supported", operation);
361 static gboolean _check_network_mode(int mode)
363 if (mode == TAPI_NETWORK_MODE_AUTO) {
366 if (mode & TAPI_NETWORK_MODE_GSM) {
367 mode &= ~TAPI_NETWORK_MODE_GSM;
369 if (mode & TAPI_NETWORK_MODE_WCDMA) {
370 mode &= ~TAPI_NETWORK_MODE_WCDMA;
372 if (mode & TAPI_NETWORK_MODE_CDMA) {
373 mode &= ~TAPI_NETWORK_MODE_CDMA;
375 if (mode & TAPI_NETWORK_MODE_LTE) {
376 mode &= ~TAPI_NETWORK_MODE_LTE;
381 err("mode %d is not supported", mode);
385 static gboolean _check_band_mode(TelNetworkBandPreferred_t band_mode)
388 case TAPI_NETWORK_BAND_MODE_PREFERRED:
389 case TAPI_NETWORK_BAND_MODE_ONLY:
392 err("band_mode %d is not supported", band_mode);
396 static gboolean _check_band(TelNetworkBand_t band)
399 case TAPI_NETWORK_BAND_TYPE_ANY:
400 case TAPI_NETWORK_BAND_TYPE_GSM850:
401 case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
402 case TAPI_NETWORK_BAND_TYPE_GSM1900:
403 case TAPI_NETWORK_BAND_TYPE_GSM:
404 case TAPI_NETWORK_BAND_TYPE_WCDMA:
405 case TAPI_NETWORK_BAND_TYPE_WCDMA850:
406 case TAPI_NETWORK_BAND_TYPE_WCDMA1900:
407 case TAPI_NETWORK_BAND_TYPE_WCDMA2100:
408 case TAPI_NETWORK_BAND_TYPE_GSM900:
409 case TAPI_NETWORK_BAND_TYPE_GSM1800:
410 case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
411 case TAPI_NETWORK_BAND_TYPE_LTE_BAND_4:
412 case TAPI_NETWORK_BAND_TYPE_LTE_BAND_17:
415 err("band %d is not supported", band);
419 static gboolean _check_service_domain(TelNetworkServiceDomain_t service_domain)
421 switch(service_domain) {
422 case TAPI_NETWORK_SERVICE_DOMAIN_COMBINED:
423 case TAPI_NETWORK_SERVICE_DOMAIN_PS:
424 case TAPI_NETWORK_SERVICE_DOMAIN_CS:
425 case TAPI_NETWORK_SERVICE_DOMAIN_AUTOMATIC:
428 err("service_domain %d is not supported", service_domain);
432 static void on_response_search_network (GObject *source_object,
433 GAsyncResult *res, gpointer user_data)
435 GError *error = NULL;
436 struct tapi_resp_data *evt_cb_data = user_data;
440 TelNetworkPlmnList_t list;
442 GVariant *dbus_result = NULL;
443 GVariant *value = NULL;
444 GVariantIter *iter = NULL;
445 GVariantIter *iter_row = NULL;
446 const gchar *key = NULL;
448 memset (&list, 0, sizeof(TelNetworkPlmnList_t));
450 dbus_result = g_dbus_connection_call_finish (
451 G_DBUS_CONNECTION (source_object), res, &error);
455 if (evt_cb_data->cb_fn) {
456 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
466 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
468 list.networks_count = g_variant_iter_n_children(iter);
471 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
472 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
473 if (!g_strcmp0(key, "plmn")) {
474 strncpy(list.network_list[i].plmn, g_variant_get_string(value, NULL), TAPI_NETWORK_PLMN_LEN_MAX);
475 list.network_list[i].plmn_id = atoi(g_variant_get_string(value, NULL));
477 if (!g_strcmp0(key, "act")) {
478 list.network_list[i].access_technology = _convert_act_to_systemtype(g_variant_get_int32(value));
480 if (!g_strcmp0(key, "type")) {
481 list.network_list[i].type_of_plmn = g_variant_get_int32(value);
483 if (!g_strcmp0(key, "name")) {
484 strncpy(list.network_list[i].network_name, g_variant_get_string(value, NULL), 40);
488 g_variant_iter_free(iter_row);
490 g_variant_iter_free(iter);
492 if (evt_cb_data->cb_fn) {
493 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
499 static void on_response_get_network_selection_mode (GObject *source_object,
500 GAsyncResult *res, gpointer user_data)
502 GError *error = NULL;
503 struct tapi_resp_data *evt_cb_data = user_data;
506 GVariant *dbus_result;
509 dbus_result = g_dbus_connection_call_finish (
510 G_DBUS_CONNECTION (source_object), res, &error);
514 if (evt_cb_data->cb_fn) {
515 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
525 g_variant_get (dbus_result, "(ii)", &mode, &result);
527 if (evt_cb_data->cb_fn) {
528 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mode, evt_cb_data->user_data);
534 static void on_response_default_set (GObject *source_object, GAsyncResult *res,
537 GError *error = NULL;
538 struct tapi_resp_data *evt_cb_data = user_data;
541 GVariant *dbus_result;
543 dbus_result = g_dbus_connection_call_finish (
544 G_DBUS_CONNECTION (source_object), res, &error);
548 if (evt_cb_data->cb_fn) {
549 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
560 g_variant_get (dbus_result, "(i)", &result);
562 if (evt_cb_data->cb_fn) {
563 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
569 static void on_response_get_network_preferred_plmn (GObject *source_object,
570 GAsyncResult *res, gpointer user_data)
572 GError *error = NULL;
573 struct tapi_resp_data *evt_cb_data = user_data;
577 TelNetworkPreferredPlmnList_t list;
579 GVariant *dbus_result = NULL;
580 GVariant *value = NULL;
581 GVariantIter *iter = NULL;
582 GVariantIter *iter_row = NULL;
583 const gchar *key = NULL;
585 memset (&list, 0, sizeof(TelNetworkPreferredPlmnList_t));
587 dbus_result = g_dbus_connection_call_finish (
588 G_DBUS_CONNECTION (source_object), res, &error);
592 if (evt_cb_data->cb_fn) {
593 evt_cb_data->cb_fn(evt_cb_data->handle, -1, &list, evt_cb_data->user_data);
603 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
605 list.NumOfPrefPlmns = g_variant_iter_n_children(iter);
607 if (list.NumOfPrefPlmns == 0) {
608 dbg("num_of_.. = 0");
609 if (evt_cb_data->cb_fn) {
610 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
618 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
619 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
620 if (!g_strcmp0(key, "plmn")) {
621 strncpy(list.PrefPlmnRecord[i].Plmn, g_variant_get_string(value, NULL), 6);
623 if (!g_strcmp0(key, "act")) {
624 list.PrefPlmnRecord[i].SystemType = _convert_act_to_systemtype(g_variant_get_int32(value));
626 if (!g_strcmp0(key, "index")) {
627 list.PrefPlmnRecord[i].Index = g_variant_get_int32(value);
629 if (!g_strcmp0(key, "name")) {
630 strncpy(list.PrefPlmnRecord[i].network_name, g_variant_get_string(value, NULL), 40);
634 g_variant_iter_free(iter_row);
636 g_variant_iter_free(iter);
638 if (evt_cb_data->cb_fn) {
639 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
645 static void on_response_get_network_band (GObject *source_object,
646 GAsyncResult *res, gpointer user_data)
648 GError *error = NULL;
649 struct tapi_resp_data *evt_cb_data = user_data;
652 GVariant *dbus_result;
656 dbus_result = g_dbus_connection_call_finish (
657 G_DBUS_CONNECTION (source_object), res, &error);
661 if (evt_cb_data->cb_fn) {
662 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
672 g_variant_get (dbus_result, "(iii)", &band, &mode, &result);
674 if (evt_cb_data->cb_fn) {
675 evt_cb_data->cb_fn(evt_cb_data->handle, result, &band, evt_cb_data->user_data);
681 static void on_response_get_network_mode (GObject *source_object,
682 GAsyncResult *res, gpointer user_data)
684 GError *error = NULL;
685 struct tapi_resp_data *evt_cb_data = user_data;
688 GVariant *dbus_result;
691 dbus_result = g_dbus_connection_call_finish (
692 G_DBUS_CONNECTION (source_object), res, &error);
696 if (evt_cb_data->cb_fn) {
697 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
707 g_variant_get (dbus_result, "(ii)", &mode, &result);
709 if (evt_cb_data->cb_fn) {
710 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mode, evt_cb_data->user_data);
716 static void on_response_get_network_service_domain (GObject *source_object,
717 GAsyncResult *res, gpointer user_data)
719 GError *error = NULL;
720 struct tapi_resp_data *evt_cb_data = user_data;
723 GVariant *dbus_result;
726 dbus_result = g_dbus_connection_call_finish (
727 G_DBUS_CONNECTION (source_object), res, &error);
731 if (evt_cb_data->cb_fn) {
732 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
742 g_variant_get (dbus_result, "(ii)", &domain, &result);
744 if (evt_cb_data->cb_fn) {
745 evt_cb_data->cb_fn(evt_cb_data->handle, result, &domain, evt_cb_data->user_data);
751 static void on_response_get_network_serving (GObject *source_object,
752 GAsyncResult *res, gpointer user_data)
754 GError *error = NULL;
755 struct tapi_resp_data *evt_cb_data = user_data;
758 TelNetworkServing_t data;
760 GVariant *dbus_result;
763 memset (&data, 0, sizeof(TelNetworkServing_t));
765 dbus_result = g_dbus_connection_call_finish (
766 G_DBUS_CONNECTION (source_object), res, &error);
770 if (evt_cb_data->cb_fn) {
771 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
781 g_variant_get (dbus_result, "(isii)",
787 data.act = _convert_act_to_systemtype(data.act);
790 snprintf(data.plmn, 7, "%s", plmn);
794 if (evt_cb_data->cb_fn) {
795 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
801 static void on_response_get_neighboring_cell_info (GObject *source_object,
802 GAsyncResult *res, gpointer user_data)
804 GError *error = NULL;
805 struct tapi_resp_data *evt_cb_data = user_data;
807 int geran_index = 0, umts_index = 0;
809 TelNetworkNeighboringCellInfo_t list;
811 GVariant *dbus_result = NULL;
812 GVariant *value = NULL;
813 GVariantIter *iter = NULL;
814 GVariantIter *iter_row = NULL;
815 const gchar *key = NULL;
816 gint v0, v1, v2, v3, v4;
818 memset (&list, 0, sizeof(TelNetworkNeighboringCellInfo_t));
820 dbus_result = g_dbus_connection_call_finish (
821 G_DBUS_CONNECTION (source_object), res, &error);
825 if (evt_cb_data->cb_fn) {
826 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
836 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
838 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
839 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
840 if (!g_strcmp0(key, "serving")) {
841 g_variant_get(value, "(iii)", &v0,&v1,&v2);
842 list.serving.act = _convert_act_to_systemtype(v0);
843 list.serving.mcc = v1;
844 list.serving.mnc = v2;
846 else if (!g_strcmp0(key, "g_serving")) {
847 g_variant_get(value, "(iiiii)", &v0,&v1,&v2,&v3,&v4);
848 list.serving.cell.geran.cell_id = v0;
849 list.serving.cell.geran.lac = v1;
850 list.serving.cell.geran.bcch = v2;
851 list.serving.cell.geran.bsic = v3;
852 list.serving.cell.geran.rxlev = v4;
854 else if (!g_strcmp0(key, "u_serving")) {
855 g_variant_get(value, "(iiiii)", &v0,&v1,&v2,&v3,&v4);
856 list.serving.cell.umts.cell_id = v0;
857 list.serving.cell.umts.lac = v1;
858 list.serving.cell.umts.arfcn = v2;
859 list.serving.cell.umts.psc = v3;
860 list.serving.cell.umts.rscp = v4;
862 else if (!g_strcmp0(key, "l_serving")) {
863 g_variant_get(value, "(iiiii)", &v0,&v1,&v2,&v3,&v4);
864 list.serving.cell.lte.cell_id = v0;
865 list.serving.cell.lte.lac = v1;
866 list.serving.cell.lte.earfcn = v2;
867 list.serving.cell.lte.tac = v3;
868 list.serving.cell.lte.rssi = v4;
870 else if (!g_strcmp0(key, "geran")) {
871 g_variant_get(value, "(iiiii)", &v0,&v1,&v2,&v3,&v4);
872 list.geran_list[geran_index].cell_id = v0;
873 list.geran_list[geran_index].lac = v1;
874 list.geran_list[geran_index].bcch = v2;
875 list.geran_list[geran_index].bsic = v3;
876 list.geran_list[geran_index].rxlev = v4;
879 else if (!g_strcmp0(key, "umts")) {
880 g_variant_get(value, "(iiiii)", &v0,&v1,&v2,&v3,&v4);
881 list.umts_list[umts_index].cell_id = v0;
882 list.umts_list[umts_index].lac = v1;
883 list.umts_list[umts_index].arfcn = v2;
884 list.umts_list[umts_index].psc = v3;
885 list.umts_list[umts_index].rscp = v4;
889 g_variant_iter_free(iter_row);
891 g_variant_iter_free(iter);
893 list.geran_list_count = geran_index;
894 list.umts_list_count = umts_index;
895 dbg("act=%d, count(geran:%d, umts:%d)", list.serving.act, geran_index, umts_index);
897 if (evt_cb_data->cb_fn) {
898 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
904 EXPORT_API int tel_search_network(TapiHandle *handle, tapi_response_cb callback, void *user_data)
906 struct tapi_resp_data *evt_cb_data = NULL;
908 dbg("Func Entrance");
910 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
912 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
914 g_dbus_connection_call(handle->dbus_connection,
915 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
916 "Search", NULL, NULL,
917 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
918 on_response_search_network, evt_cb_data);
920 return TAPI_API_SUCCESS;
923 EXPORT_API int tel_get_network_selection_mode(struct tapi_handle *handle, tapi_response_cb callback, void *user_data)
925 struct tapi_resp_data *evt_cb_data = NULL;
927 dbg("Func Entrance");
929 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
931 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
933 g_dbus_connection_call(handle->dbus_connection,
934 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
935 "GetSelectionMode", NULL, NULL,
936 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
937 on_response_get_network_selection_mode, evt_cb_data);
939 return TAPI_API_SUCCESS;
942 EXPORT_API int tel_select_network_automatic(struct tapi_handle *handle, tapi_response_cb callback, void *user_data)
944 struct tapi_resp_data *evt_cb_data = NULL;
947 dbg("Func Entrance");
949 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL, TAPI_API_INVALID_PTR);
951 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
953 param = g_variant_new("(isi)",
958 g_dbus_connection_call(handle->dbus_connection,
959 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
960 "SetSelectionMode", param, NULL,
961 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
962 on_response_default_set, evt_cb_data);
964 return TAPI_API_SUCCESS;
967 EXPORT_API int tel_select_network_manual(struct tapi_handle *handle, const char *plmn, int type, tapi_response_cb callback, void *user_data)
969 struct tapi_resp_data *evt_cb_data = NULL;
972 dbg("plmn:[%s] type:[%d]",plmn?plmn:"", type);
974 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && _check_plmn(plmn), TAPI_API_INVALID_PTR);
976 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
978 param = g_variant_new("(isi)",
981 _convert_systemtype_to_act(type));
983 g_dbus_connection_call(handle->dbus_connection,
984 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
985 "SetSelectionMode", param, NULL,
986 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
987 on_response_default_set, evt_cb_data);
989 return TAPI_API_SUCCESS;
992 EXPORT_API int tel_set_network_preferred_plmn(
994 TelNetworkPreferredPlmnOp_t operation,
995 TelNetworkPreferredPlmnInfo_t *info,
996 tapi_response_cb callback,
999 struct tapi_resp_data *evt_cb_data = NULL;
1003 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && info != NULL &&
1004 _check_operation(operation) &&
1005 _check_plmn((const char *)&info->Plmn), TAPI_API_INVALID_PTR);
1007 dbg("Func Entrance");
1009 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1011 switch (info->SystemType) {
1012 case TAPI_NETWORK_SYSTEM_GSM:
1016 case TAPI_NETWORK_SYSTEM_UMTS:
1020 case TAPI_NETWORK_SYSTEM_GPRS:
1024 case TAPI_NETWORK_SYSTEM_EGPRS:
1028 case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
1037 param = g_variant_new("(iiis)",
1043 g_dbus_connection_call(handle->dbus_connection,
1044 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1045 "SetPreferredPlmn", param, NULL,
1046 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1047 on_response_default_set, evt_cb_data);
1049 return TAPI_API_SUCCESS;
1052 EXPORT_API int tel_get_network_preferred_plmn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1054 struct tapi_resp_data *evt_cb_data = NULL;
1056 dbg("Func Entrance");
1058 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1060 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1062 g_dbus_connection_call(handle->dbus_connection,
1063 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1064 "GetPreferredPlmn", NULL, NULL,
1065 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1066 on_response_get_network_preferred_plmn, evt_cb_data);
1068 return TAPI_API_SUCCESS;
1071 EXPORT_API int tel_set_network_band(TapiHandle *handle, TelNetworkBandPreferred_t mode, TelNetworkBand_t band, tapi_response_cb callback, void *user_data)
1073 struct tapi_resp_data *evt_cb_data = NULL;
1076 dbg("mode:[%d] band:[%d]",mode,band);
1078 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1079 _check_band_mode(mode) &&
1080 _check_band(band), TAPI_API_INVALID_PTR);
1082 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1084 param = g_variant_new("(ii)",
1088 g_dbus_connection_call(handle->dbus_connection,
1089 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1090 "SetBand", param, NULL,
1091 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1092 on_response_default_set, evt_cb_data);
1094 return TAPI_API_SUCCESS;
1097 EXPORT_API int tel_get_network_band(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1099 struct tapi_resp_data *evt_cb_data = NULL;
1101 dbg("Func Entrance");
1103 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1105 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1107 g_dbus_connection_call(handle->dbus_connection,
1108 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1109 "GetBand", NULL, NULL,
1110 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1111 on_response_get_network_band, evt_cb_data);
1113 return TAPI_API_SUCCESS;
1116 EXPORT_API int tel_set_network_mode(TapiHandle *handle, int mode, tapi_response_cb callback, void *user_data)
1118 struct tapi_resp_data *evt_cb_data = NULL;
1121 dbg("mode:[0x%x]", mode);
1123 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1124 _check_network_mode(mode), TAPI_API_INVALID_PTR);
1126 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1128 param = g_variant_new("(i)",
1131 g_dbus_connection_call(handle->dbus_connection,
1132 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1133 "SetMode", param, NULL,
1134 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
1135 on_response_default_set, evt_cb_data);
1137 return TAPI_API_SUCCESS;
1140 EXPORT_API int tel_get_network_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1142 struct tapi_resp_data *evt_cb_data = NULL;
1144 dbg("Func Entrance");
1146 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1148 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1150 g_dbus_connection_call(handle->dbus_connection,
1151 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1152 "GetMode", NULL, NULL,
1153 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1154 on_response_get_network_mode, evt_cb_data);
1156 return TAPI_API_SUCCESS;
1159 EXPORT_API int tel_set_network_service_domain(TapiHandle *handle, TelNetworkServiceDomain_t domain, tapi_response_cb callback, void *user_data)
1161 struct tapi_resp_data *evt_cb_data = NULL;
1164 dbg("domain:[%d]", domain);
1166 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1167 _check_service_domain(domain), TAPI_API_INVALID_PTR);
1169 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1171 param = g_variant_new("(i)", domain);
1173 g_dbus_connection_call(handle->dbus_connection,
1174 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1175 "SetServiceDomain", param, NULL,
1176 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1177 on_response_default_set, evt_cb_data);
1179 return TAPI_API_SUCCESS;
1182 EXPORT_API int tel_get_network_service_domain(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1184 struct tapi_resp_data *evt_cb_data = NULL;
1186 dbg("Func Entrance");
1188 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1190 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1192 g_dbus_connection_call(handle->dbus_connection,
1193 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1194 "GetServiceDomain", NULL, NULL,
1195 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1196 on_response_get_network_service_domain, evt_cb_data);
1198 return TAPI_API_SUCCESS;
1201 EXPORT_API int tel_cancel_network_manual_search(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1203 struct tapi_resp_data *evt_cb_data = NULL;
1205 dbg("Func Entrance");
1207 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL, TAPI_API_INVALID_PTR);
1209 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1211 g_dbus_connection_call(handle->dbus_connection,
1212 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1213 "SearchCancel", NULL, NULL,
1214 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1215 on_response_default_set, evt_cb_data);
1217 return TAPI_API_SUCCESS;
1220 EXPORT_API int tel_get_network_serving(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1222 struct tapi_resp_data *evt_cb_data = NULL;
1224 dbg("Func Entrance");
1226 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1228 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1230 g_dbus_connection_call(handle->dbus_connection,
1231 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1232 "GetServingNetwork", NULL, NULL,
1233 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1234 on_response_get_network_serving, evt_cb_data);
1236 return TAPI_API_SUCCESS;
1239 EXPORT_API int tel_get_network_neighboring_cell_info(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1241 struct tapi_resp_data *evt_cb_data = NULL;
1243 dbg("Func Entrance");
1245 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1247 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1249 g_dbus_connection_call(handle->dbus_connection,
1250 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1251 "GetNgbrCellInfo", NULL, NULL,
1252 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1253 on_response_get_neighboring_cell_info, evt_cb_data);
1255 return TAPI_API_SUCCESS;