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) {
111 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
113 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
118 static void on_response_get_serial_number(GObject *source_object, GAsyncResult *res, gpointer user_data)
120 GError *error = NULL;
121 GDBusConnection *conn = NULL;
122 struct tapi_resp_data *evt_cb_data = user_data;
126 GVariant *dbus_result;
128 conn = G_DBUS_CONNECTION (source_object);
129 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
133 if (evt_cb_data->cb_fn) {
134 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
144 g_variant_get (dbus_result, "(is)", &result, &sn);
146 if (evt_cb_data->cb_fn) {
148 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
150 evt_cb_data->cb_fn(evt_cb_data->handle, result, sn, evt_cb_data->user_data);
156 static void on_response_get_imei(GObject *source_object, GAsyncResult *res, gpointer user_data)
158 GError *error = NULL;
159 GDBusConnection *conn = NULL;
160 struct tapi_resp_data *evt_cb_data = user_data;
164 GVariant *dbus_result;
166 conn = G_DBUS_CONNECTION (source_object);
167 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
171 if (evt_cb_data->cb_fn) {
172 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
182 g_variant_get (dbus_result, "(is)", &result, &imei);
184 if (evt_cb_data->cb_fn) {
186 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
188 evt_cb_data->cb_fn(evt_cb_data->handle, result, imei, evt_cb_data->user_data);
194 static void on_response_set_dun_pin_ctrl(GObject *source_object, GAsyncResult *res, gpointer user_data)
196 GError *error = NULL;
197 GDBusConnection *conn = NULL;
198 struct tapi_resp_data *evt_cb_data = user_data;
201 GVariant *dbus_result;
203 conn = G_DBUS_CONNECTION (source_object);
204 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
208 if (evt_cb_data->cb_fn) {
209 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
219 g_variant_get (dbus_result, "(i)", &result);
220 dbg("dun pin ctrl result(%d)", result);
222 if (evt_cb_data->cb_fn) {
223 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
229 static void on_response_get_flight_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
231 GError *error = NULL;
232 GDBusConnection *conn = NULL;
233 struct tapi_resp_data *evt_cb_data = user_data;
235 gboolean mode = FALSE;
237 GVariant *dbus_result;
239 conn = G_DBUS_CONNECTION (source_object);
240 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
244 if (evt_cb_data->cb_fn) {
245 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
255 g_variant_get (dbus_result, "(bi)", &mode, &result);
257 if (evt_cb_data->cb_fn) {
258 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mode, evt_cb_data->user_data);
266 * Turn Off or Turn On the Modem.
268 * @param[in] tapi_power_phone_cmd_t Turn ON or OFF.
270 * @return TapiResult_t API result code. Either Success or some Error Code.
271 * @exception In case of exceptions return value contains appropriate error code.
273 * @see tapi_power_phone_cmd_t, TapiResult_t.
275 EXPORT_API int tel_process_power_command(TapiHandle *handle, tapi_power_phone_cmd_t cmd, tapi_response_cb callback, void *user_data)
277 struct tapi_resp_data *evt_cb_data = NULL;
280 dbg("Func Entrance");
282 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
284 if (cmd > TAPI_PHONE_POWER_RESET)
285 return TAPI_API_INVALID_INPUT;
287 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
289 param = g_variant_new("(i)", cmd);
291 g_dbus_connection_call(handle->dbus_connection,
292 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
293 "SetPower", param, NULL,
294 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
295 on_response_default_set, evt_cb_data);
297 return TAPI_API_SUCCESS;
302 * Enter in to or Leave from Flight Mode.
304 * @param[in] Enable (if 1, Enable and if 0, Disable)
306 * @return TapiResult_t API result code. Either Success or some Error Code.
307 * @exception In case of exceptions return value contains appropriate error code.
311 EXPORT_API int tel_set_flight_mode(TapiHandle *handle, tapi_power_flight_mode_type_t mode, tapi_response_cb callback, void *user_data)
313 struct tapi_resp_data *evt_cb_data = NULL;
317 dbg("Func Entrance");
319 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
321 if (mode == TAPI_POWER_FLIGHT_MODE_ENTER) {
324 else if (mode == TAPI_POWER_FLIGHT_MODE_LEAVE) {
328 return TAPI_API_INVALID_INPUT;
331 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
333 param = g_variant_new("(b)", b_mode);
335 g_dbus_connection_call(handle->dbus_connection,
336 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
337 "SetFlightMode", param, NULL,
338 G_DBUS_CALL_FLAGS_NONE, 180000, handle->ca,
339 on_response_default_set, evt_cb_data);
341 return TAPI_API_SUCCESS;
344 EXPORT_API int tel_get_flight_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
346 struct tapi_resp_data *evt_cb_data = NULL;
348 dbg("Func Entrance");
350 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
351 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
353 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
355 g_dbus_connection_call(handle->dbus_connection,
356 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
357 "GetFlightMode", NULL, NULL,
358 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
359 on_response_get_flight_mode, evt_cb_data);
361 return TAPI_API_SUCCESS;
364 EXPORT_API int tel_get_misc_me_version(TapiHandle *handle, tapi_response_cb callback, void *user_data)
366 struct tapi_resp_data *evt_cb_data = NULL;
368 dbg("Func Entrance");
370 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
371 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
373 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
375 g_dbus_connection_call(handle->dbus_connection,
376 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
377 "GetVersion", NULL, NULL,
378 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
379 on_response_get_version, evt_cb_data);
381 return TAPI_API_SUCCESS;
384 EXPORT_API TelMiscVersionInformation *tel_get_misc_me_version_sync(TapiHandle *handle)
386 GVariant *dbus_result;
387 GError *error = NULL;
389 TelMiscVersionInformation *data = NULL;
390 char *sw = NULL, *hw = NULL, *rf = NULL, *product = NULL;
392 dbg("Func Entrance");
394 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
396 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
397 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
398 "GetVersion", NULL, NULL,
399 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &error);
402 warn("dbus error = %d (%s)", error->code, error->message);
409 g_variant_get (dbus_result, "(issss)", &result,
410 &sw, &hw, &rf, &product);
415 dbg("product code[%s]", product);
417 data = calloc(1, sizeof(TelMiscVersionInformation));
421 g_strlcpy((gchar *)data->szSwVersion, sw, MAX_VERSION_LEN);
422 g_strlcpy((gchar *)data->szHwVersion, hw, MAX_VERSION_LEN);
423 g_strlcpy((gchar *)data->szRfCalDate, rf, MAX_VERSION_LEN);
424 g_strlcpy((gchar *)data->szProductCode, product, TAPI_MISC_PRODUCT_CODE_LEN_MAX);
429 EXPORT_API int tel_get_misc_me_imei(TapiHandle *handle, tapi_response_cb callback, void *user_data)
431 struct tapi_resp_data *evt_cb_data = NULL;
433 sdbg("Func Entrance");
435 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
436 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
438 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
440 g_dbus_connection_call(handle->dbus_connection,
441 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
442 "GetIMEI", NULL, NULL,
443 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
444 on_response_get_imei, evt_cb_data);
446 return TAPI_API_SUCCESS;
449 EXPORT_API char *tel_get_misc_me_imei_sync(TapiHandle *handle)
451 GVariant *dbus_result;
452 GError *error = NULL;
456 sdbg("Func Entrance");
458 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
460 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
461 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
462 "GetIMEI", NULL, NULL,
463 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &error);
466 warn("dbus error = %d (%s)", error->code, error->message);
473 g_variant_get (dbus_result, "(is)", &result, &imei);
481 EXPORT_API int tel_get_misc_me_sn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
483 struct tapi_resp_data *evt_cb_data = NULL;
485 sdbg("Func Entrance");
487 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
488 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
490 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
492 g_dbus_connection_call(handle->dbus_connection,
493 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
494 "GetSerialNumber", NULL, NULL,
495 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
496 on_response_get_serial_number, evt_cb_data);
498 return TAPI_API_SUCCESS;
501 EXPORT_API char *tel_get_misc_me_sn_sync(TapiHandle *handle)
503 GVariant *dbus_result;
504 GError *error = NULL;
508 sdbg("Func Entrance");
510 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
512 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
513 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
514 "GetSerialNumber", NULL, NULL,
515 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &error);
518 warn("dbus error = %d (%s)", error->code, error->message);
525 g_variant_get (dbus_result, "(is)", &result, &sn);
533 EXPORT_API int tel_check_modem_power_status(TapiHandle *handle, int *result)
535 int ret = TAPI_API_SUCCESS;
537 dbg("Func Entrance");
539 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
540 TAPI_RET_ERR_NUM_IF_FAIL(result, TAPI_API_INVALID_PTR);
542 ret = tel_get_property_int(handle, TAPI_PROP_MODEM_POWER, result);
543 if (ret != TAPI_API_SUCCESS) {
544 warn("failed. (ret=0x%x)", ret);
548 dbg("power status = %d (0=on,1=off,2=err)", *result);
553 EXPORT_API int tel_control_modem_dun_pin_ctrl(TapiHandle *handle, tapi_ps_btdun_pincontrol *pincontrol, tapi_response_cb callback, void *user_data)
555 struct tapi_resp_data *evt_cb_data = NULL;
558 dbg("Func Entrance ");
560 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
561 TAPI_RET_ERR_NUM_IF_FAIL(handle->dbus_connection, TAPI_API_INVALID_PTR);
562 TAPI_RET_ERR_NUM_IF_FAIL(pincontrol, TAPI_API_INVALID_PTR);
564 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
566 param = g_variant_new("(ib)", pincontrol->signal, pincontrol->status);
568 g_dbus_connection_call(handle->dbus_connection,
569 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
570 "SetDunPinCtrl", param, NULL,
571 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
572 on_response_set_dun_pin_ctrl, evt_cb_data);
574 return TAPI_API_SUCCESS;