4 * Copyright (c) 2011 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"
30 #include "ITapiModem.h"
36 static void on_response_default_set(GObject *source_object, GAsyncResult *res, gpointer user_data)
39 GDBusConnection *conn = NULL;
40 struct tapi_resp_data *evt_cb_data = user_data;
43 GVariant *dbus_result;
45 conn = G_DBUS_CONNECTION (source_object);
46 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
50 if (evt_cb_data->cb_fn) {
51 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
61 g_variant_get (dbus_result, "(i)", &result);
63 if (evt_cb_data->cb_fn) {
64 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
70 static void on_response_get_version(GObject *source_object, GAsyncResult *res, gpointer user_data)
73 GDBusConnection *conn = NULL;
74 struct tapi_resp_data *evt_cb_data = user_data;
76 TelMiscVersionInformation data;
77 char *sw = NULL, *hw = NULL, *rf = NULL, *product = NULL;
79 GVariant *dbus_result;
81 memset(&data, 0, sizeof(TelMiscVersionInformation));
83 conn = G_DBUS_CONNECTION (source_object);
84 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
88 if (evt_cb_data->cb_fn) {
89 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
99 g_variant_get (dbus_result, "(issss)", &result,
100 &sw, &hw, &rf, &product);
102 dbg("product code [%s]", product);
104 g_strlcpy((gchar *)data.szSwVersion, sw, MAX_VERSION_LEN);
105 g_strlcpy((gchar *)data.szHwVersion, hw, MAX_VERSION_LEN);
106 g_strlcpy((gchar *)data.szRfCalDate, rf, MAX_VERSION_LEN);
107 g_strlcpy((gchar *)data.szProductCode, product, TAPI_MISC_PRODUCT_CODE_LEN_MAX);
109 if (evt_cb_data->cb_fn) {
110 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
116 static void on_response_get_serial_number(GObject *source_object, GAsyncResult *res, gpointer user_data)
118 GError *error = NULL;
119 GDBusConnection *conn = NULL;
120 struct tapi_resp_data *evt_cb_data = user_data;
124 GVariant *dbus_result;
126 conn = G_DBUS_CONNECTION (source_object);
127 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
131 if (evt_cb_data->cb_fn) {
132 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
142 g_variant_get (dbus_result, "(is)", &result, &sn);
144 if (evt_cb_data->cb_fn) {
145 evt_cb_data->cb_fn(evt_cb_data->handle, result, sn, evt_cb_data->user_data);
151 static void on_response_get_imei(GObject *source_object, GAsyncResult *res, gpointer user_data)
153 GError *error = NULL;
154 GDBusConnection *conn = NULL;
155 struct tapi_resp_data *evt_cb_data = user_data;
159 GVariant *dbus_result;
161 conn = G_DBUS_CONNECTION (source_object);
162 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
166 if (evt_cb_data->cb_fn) {
167 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
177 g_variant_get (dbus_result, "(is)", &result, &imei);
179 if (evt_cb_data->cb_fn) {
180 evt_cb_data->cb_fn(evt_cb_data->handle, result, imei, evt_cb_data->user_data);
186 static void on_response_set_dun_pin_ctrl(GObject *source_object, GAsyncResult *res, gpointer user_data)
188 GError *error = NULL;
189 GDBusConnection *conn = NULL;
190 struct tapi_resp_data *evt_cb_data = user_data;
193 GVariant *dbus_result;
195 conn = G_DBUS_CONNECTION (source_object);
196 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
200 if (evt_cb_data->cb_fn) {
201 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
211 g_variant_get (dbus_result, "(i)", &result);
212 dbg("dun pin ctrl result(%d)", result);
214 if (evt_cb_data->cb_fn) {
215 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
221 static void on_response_get_flight_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
223 GError *error = NULL;
224 GDBusConnection *conn = NULL;
225 struct tapi_resp_data *evt_cb_data = user_data;
227 gboolean mode = FALSE;
229 GVariant *dbus_result;
231 conn = G_DBUS_CONNECTION (source_object);
232 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
236 if (evt_cb_data->cb_fn) {
237 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
247 g_variant_get (dbus_result, "(bi)", &mode, &result);
249 if (evt_cb_data->cb_fn) {
250 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mode, evt_cb_data->user_data);
258 * Turn Off or Turn On the Modem.
260 * @param[in] tapi_power_phone_cmd_t Turn ON or OFF.
262 * @return TapiResult_t API result code. Either Success or some Error Code.
263 * @exception In case of exceptions return value contains appropriate error code.
265 * @see tapi_power_phone_cmd_t, TapiResult_t.
267 EXPORT_API int tel_process_power_command(TapiHandle *handle, tapi_power_phone_cmd_t cmd, tapi_response_cb callback, void *user_data)
269 struct tapi_resp_data *evt_cb_data = NULL;
272 dbg("Func Entrance");
274 if (cmd > TAPI_PHONE_POWER_RESET)
275 return TAPI_API_INVALID_INPUT;
277 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
279 param = g_variant_new("(i)", cmd);
281 g_dbus_connection_call(handle->dbus_connection,
282 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
283 "SetPower", param, NULL,
284 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
285 on_response_default_set, evt_cb_data);
287 return TAPI_API_SUCCESS;
292 * Enter in to or Leave from Flight Mode.
294 * @param[in] Enable (if 1, Enable and if 0, Disable)
296 * @return TapiResult_t API result code. Either Success or some Error Code.
297 * @exception In case of exceptions return value contains appropriate error code.
301 EXPORT_API int tel_set_flight_mode(TapiHandle *handle, tapi_power_flight_mode_type_t mode, tapi_response_cb callback, void *user_data)
303 struct tapi_resp_data *evt_cb_data = NULL;
307 dbg("Func Entrance");
309 if (mode == TAPI_POWER_FLIGHT_MODE_ENTER) {
312 else if (mode == TAPI_POWER_FLIGHT_MODE_LEAVE) {
316 return TAPI_API_INVALID_INPUT;
319 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
321 param = g_variant_new("(b)", b_mode);
323 g_dbus_connection_call(handle->dbus_connection,
324 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
325 "SetFlightMode", param, NULL,
326 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
327 on_response_default_set, evt_cb_data);
329 return TAPI_API_SUCCESS;
332 EXPORT_API int tel_get_flight_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
334 struct tapi_resp_data *evt_cb_data = NULL;
336 dbg("Func Entrance");
338 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
340 g_dbus_connection_call(handle->dbus_connection,
341 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
342 "GetFlightMode", NULL, NULL,
343 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
344 on_response_get_flight_mode, evt_cb_data);
346 return TAPI_API_SUCCESS;
349 EXPORT_API int tel_get_misc_me_version(TapiHandle *handle, tapi_response_cb callback, void *user_data)
351 struct tapi_resp_data *evt_cb_data = NULL;
353 dbg("Func Entrance");
355 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
357 g_dbus_connection_call(handle->dbus_connection,
358 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
359 "GetVersion", NULL, NULL,
360 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
361 on_response_get_version, evt_cb_data);
363 return TAPI_API_SUCCESS;
366 EXPORT_API TelMiscVersionInformation *tel_get_misc_me_version_sync(TapiHandle *handle)
368 GVariant *dbus_result;
370 TelMiscVersionInformation *data = NULL;
371 char *sw = NULL, *hw = NULL, *rf = NULL, *product = NULL;
373 dbg("Func Entrance");
378 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
379 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
380 "GetVersion", NULL, NULL,
381 G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
383 g_variant_get (dbus_result, "(issss)", &result,
384 &sw, &hw, &rf, &product);
386 dbg("product code[%s]", product);
388 data = calloc(sizeof(TelMiscVersionInformation), 1);
392 g_strlcpy((gchar *)data->szSwVersion, sw, MAX_VERSION_LEN);
393 g_strlcpy((gchar *)data->szHwVersion, hw, MAX_VERSION_LEN);
394 g_strlcpy((gchar *)data->szRfCalDate, rf, MAX_VERSION_LEN);
395 g_strlcpy((gchar *)data->szProductCode, product, TAPI_MISC_PRODUCT_CODE_LEN_MAX);
400 EXPORT_API int tel_get_misc_me_imei(TapiHandle *handle, tapi_response_cb callback, void *user_data)
402 struct tapi_resp_data *evt_cb_data = NULL;
404 dbg("Func Entrance");
406 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
408 g_dbus_connection_call(handle->dbus_connection,
409 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
410 "GetIMEI", NULL, NULL,
411 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
412 on_response_get_imei, evt_cb_data);
414 return TAPI_API_SUCCESS;
417 EXPORT_API char *tel_get_misc_me_imei_sync(TapiHandle *handle)
419 GVariant *dbus_result;
423 dbg("Func Entrance");
428 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
429 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
430 "GetIMEI", NULL, NULL,
431 G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
433 g_variant_get (dbus_result, "(is)", &result, &imei);
438 EXPORT_API int tel_get_misc_me_sn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
440 struct tapi_resp_data *evt_cb_data = NULL;
442 dbg("Func Entrance");
444 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
446 g_dbus_connection_call(handle->dbus_connection,
447 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
448 "GetSerialNumber", NULL, NULL,
449 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
450 on_response_get_serial_number, evt_cb_data);
452 return TAPI_API_SUCCESS;
455 EXPORT_API char *tel_get_misc_me_sn_sync(TapiHandle *handle)
457 GVariant *dbus_result;
461 dbg("Func Entrance");
466 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
467 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
468 "GetSerialNumber", NULL, NULL,
469 G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
471 g_variant_get (dbus_result, "(is)", &result, &sn);
476 EXPORT_API int tel_check_modem_power_status(TapiHandle *handle, int *result)
478 return tel_get_property_int(handle, TAPI_PROP_MODEM_POWER, result);
481 EXPORT_API int tel_control_modem_dun_pin_ctrl(TapiHandle *handle, tapi_ps_btdun_pincontrol *pincontrol, tapi_response_cb callback, void *user_data)
483 struct tapi_resp_data *evt_cb_data = NULL;
486 dbg("Func Entrance ");
488 if (!handle || !handle->dbus_connection || !pincontrol){
489 dbg("invalid parameter");
490 return TAPI_API_INVALID_INPUT;
493 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
495 param = g_variant_new("(ib)", pincontrol->signal, pincontrol->status);
497 g_dbus_connection_call(handle->dbus_connection,
498 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
499 "SetDunPinCtrl", param, NULL,
500 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
501 on_response_set_dun_pin_ctrl, evt_cb_data);
503 return TAPI_API_SUCCESS;