4 * Copyright (c) 2014 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"
35 static void on_response_default_set(GObject *source_object, GAsyncResult *res, gpointer user_data)
38 GDBusConnection *conn = NULL;
39 struct tapi_resp_data *evt_cb_data = user_data;
42 GVariant *dbus_result;
44 conn = G_DBUS_CONNECTION (source_object);
45 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
48 g_variant_get (dbus_result, "(i)", &result);
50 if (evt_cb_data->cb_fn) {
51 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
55 g_variant_unref(dbus_result);
58 static void on_response_get_version(GObject *source_object, GAsyncResult *res, gpointer user_data)
61 GDBusConnection *conn = NULL;
62 struct tapi_resp_data *evt_cb_data = user_data;
64 TelMiscVersionInformation data;
65 char *sw = NULL, *hw = NULL, *rf = NULL, *product = NULL;
67 GVariant *dbus_result;
69 memset(&data, 0, sizeof(TelMiscVersionInformation));
71 conn = G_DBUS_CONNECTION (source_object);
72 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
75 g_variant_get (dbus_result, "(issss)", &result,
76 &sw, &hw, &rf, &product);
78 dbg("product code [%s]", product);
80 g_strlcpy((gchar *)data.szSwVersion, sw, MAX_VERSION_LEN);
81 g_strlcpy((gchar *)data.szHwVersion, hw, MAX_VERSION_LEN);
82 g_strlcpy((gchar *)data.szRfCalDate, rf, MAX_VERSION_LEN);
83 g_strlcpy((gchar *)data.szProductCode, product, TAPI_MISC_PRODUCT_CODE_LEN_MAX);
90 if (evt_cb_data->cb_fn) {
92 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
94 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
97 g_variant_unref(dbus_result);
100 static void on_response_get_serial_number(GObject *source_object, GAsyncResult *res, gpointer user_data)
102 GError *error = NULL;
103 GDBusConnection *conn = NULL;
104 struct tapi_resp_data *evt_cb_data = user_data;
106 TelMiscSNInformation data;
107 char *sn = NULL, *meid = NULL, *imei = NULL, *imeisv = NULL;
109 GVariant *dbus_result;
111 conn = G_DBUS_CONNECTION (source_object);
112 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
115 g_variant_get (dbus_result, "(issss)", &result,
116 &sn, &meid, &imei, &imeisv);
118 g_strlcpy((gchar *)data.szEsn, sn, TAPI_MISC_ME_SN_LEN_MAX);
119 g_strlcpy((gchar *)data.szMeid, meid, TAPI_MISC_ME_SN_LEN_MAX);
120 g_strlcpy((gchar *)data.szImei, imei, TAPI_MISC_ME_SN_LEN_MAX);
121 g_strlcpy((gchar *)data.szImeiSv, imeisv, TAPI_MISC_ME_SN_LEN_MAX);
129 if (evt_cb_data->cb_fn) {
131 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
133 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
137 g_variant_unref(dbus_result);
140 static void on_response_get_imei(GObject *source_object, GAsyncResult *res, gpointer user_data)
142 GError *error = NULL;
143 GDBusConnection *conn = NULL;
144 struct tapi_resp_data *evt_cb_data = user_data;
148 GVariant *dbus_result;
150 conn = G_DBUS_CONNECTION (source_object);
151 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
154 g_variant_get (dbus_result, "(is)", &result, &imei);
156 if (evt_cb_data->cb_fn) {
158 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
160 evt_cb_data->cb_fn(evt_cb_data->handle, result, imei, evt_cb_data->user_data);
165 g_variant_unref(dbus_result);
168 static void on_response_get_flight_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
170 GError *error = NULL;
171 GDBusConnection *conn = NULL;
172 struct tapi_resp_data *evt_cb_data = user_data;
174 gboolean mode = FALSE;
176 GVariant *dbus_result;
178 conn = G_DBUS_CONNECTION (source_object);
179 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
182 g_variant_get (dbus_result, "(bi)", &mode, &result);
184 if (evt_cb_data->cb_fn) {
185 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mode, evt_cb_data->user_data);
189 g_variant_unref(dbus_result);
194 * Turn Off or Turn On the Modem.
196 * @param[in] tapi_power_phone_cmd_t Turn ON or OFF.
198 * @return TapiResult_t API result code. Either Success or some Error Code.
199 * @exception In case of exceptions return value contains appropriate error code.
201 * @see tapi_power_phone_cmd_t, TapiResult_t.
203 EXPORT_API int tel_process_power_command(TapiHandle *handle, tapi_power_phone_cmd_t cmd, tapi_response_cb callback, void *user_data)
205 struct tapi_resp_data *evt_cb_data = NULL;
208 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
210 msg("[%s] tel_process_power_command:[%d] (0:ON,1:OFF,2:RST,3:LOW)", handle->cp_name, cmd);
212 if (cmd > TAPI_PHONE_POWER_MAX)
213 return TAPI_API_INVALID_INPUT;
214 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
216 param = g_variant_new("(i)", cmd);
218 g_dbus_connection_call(handle->dbus_connection,
219 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
220 "SetPower", param, NULL,
221 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
222 on_response_default_set, evt_cb_data);
224 return TAPI_API_SUCCESS;
229 * Enter in to or Leave from Flight Mode.
231 * @param[in] Enable (if 1, Enable and if 0, Disable)
233 * @return TapiResult_t API result code. Either Success or some Error Code.
234 * @exception In case of exceptions return value contains appropriate error code.
238 EXPORT_API int tel_set_flight_mode(TapiHandle *handle, tapi_power_flight_mode_type_t mode, tapi_response_cb callback, void *user_data)
240 struct tapi_resp_data *evt_cb_data = NULL;
244 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
246 msg("[%s] requested flight mode:[%d] (1:enter, 2:leave)", handle->cp_name, mode);
248 if (mode == TAPI_POWER_FLIGHT_MODE_ENTER) {
251 else if (mode == TAPI_POWER_FLIGHT_MODE_LEAVE) {
255 return TAPI_API_INVALID_INPUT;
258 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
260 param = g_variant_new("(b)", b_mode);
262 g_dbus_connection_call(handle->dbus_connection,
263 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
264 "SetFlightMode", param, NULL,
265 G_DBUS_CALL_FLAGS_NONE, 180000, handle->ca,
266 on_response_default_set, evt_cb_data);
268 return TAPI_API_SUCCESS;
271 EXPORT_API int tel_get_flight_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
273 struct tapi_resp_data *evt_cb_data = NULL;
275 dbg("Func Entrance");
277 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
278 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
280 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
282 g_dbus_connection_call(handle->dbus_connection,
283 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
284 "GetFlightMode", NULL, NULL,
285 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
286 on_response_get_flight_mode, evt_cb_data);
288 return TAPI_API_SUCCESS;
291 EXPORT_API int tel_get_misc_me_version(TapiHandle *handle, tapi_response_cb callback, void *user_data)
293 struct tapi_resp_data *evt_cb_data = NULL;
295 dbg("Func Entrance");
297 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
298 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
300 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
302 g_dbus_connection_call(handle->dbus_connection,
303 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
304 "GetVersion", NULL, NULL,
305 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
306 on_response_get_version, evt_cb_data);
308 return TAPI_API_SUCCESS;
311 EXPORT_API TelMiscVersionInformation *tel_get_misc_me_version_sync(TapiHandle *handle)
313 GVariant *dbus_result;
314 GError *error = NULL;
316 TelMiscVersionInformation *data = NULL;
317 char *sw = NULL, *hw = NULL, *rf = NULL, *product = NULL;
319 dbg("Func Entrance");
321 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
323 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
324 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
325 "GetVersion", NULL, NULL,
326 G_DBUS_CALL_FLAGS_NONE, TAPI_SHORT_TIMEOUT, handle->ca, &error);
329 warn("dbus error = %d (%s)", error->code, error->message);
336 g_variant_get (dbus_result, "(issss)", &result,
337 &sw, &hw, &rf, &product);
338 g_variant_unref(dbus_result);
343 dbg("product code[%s]", product);
345 data = calloc(1, sizeof(TelMiscVersionInformation));
349 g_strlcpy((gchar *)data->szSwVersion, sw, MAX_VERSION_LEN);
350 g_strlcpy((gchar *)data->szHwVersion, hw, MAX_VERSION_LEN);
351 g_strlcpy((gchar *)data->szRfCalDate, rf, MAX_VERSION_LEN);
352 g_strlcpy((gchar *)data->szProductCode, product, TAPI_MISC_PRODUCT_CODE_LEN_MAX);
362 EXPORT_API int tel_get_misc_me_imei(TapiHandle *handle, tapi_response_cb callback, void *user_data)
364 struct tapi_resp_data *evt_cb_data = NULL;
366 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
367 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
369 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
371 sdbg("[%s] Func Entrance", handle->cp_name);
373 g_dbus_connection_call(handle->dbus_connection,
374 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
375 "GetIMEI", NULL, NULL,
376 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
377 on_response_get_imei, evt_cb_data);
379 return TAPI_API_SUCCESS;
382 EXPORT_API char *tel_get_misc_me_imei_sync(TapiHandle *handle)
384 GVariant *dbus_result;
385 GError *error = NULL;
389 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
391 sdbg("[%s] Func Entrance", handle->cp_name);
393 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
394 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
395 "GetIMEI", NULL, NULL,
396 G_DBUS_CALL_FLAGS_NONE, TAPI_SHORT_TIMEOUT, handle->ca, &error);
399 warn("dbus error = %d (%s)", error->code, error->message);
406 g_variant_get (dbus_result, "(is)", &result, &imei);
407 g_variant_unref(dbus_result);
417 EXPORT_API int tel_get_misc_me_sn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
419 struct tapi_resp_data *evt_cb_data = NULL;
421 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
422 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
424 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
426 sdbg("[%s] Func Entrance", handle->cp_name);
428 g_dbus_connection_call(handle->dbus_connection,
429 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
430 "GetSerialNumber", NULL, NULL,
431 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
432 on_response_get_serial_number, evt_cb_data);
434 return TAPI_API_SUCCESS;
437 EXPORT_API TelMiscSNInformation *tel_get_misc_me_sn_sync(TapiHandle *handle)
439 GVariant *dbus_result;
440 GError *error = NULL;
441 char *sn = NULL, *meid = NULL,*imei = NULL, *imeisv = NULL;
442 TelMiscSNInformation *data = NULL;
445 TAPI_RET_ERR_NUM_IF_FAIL(handle, NULL);
447 sdbg("[%s] Func Entrance", handle->cp_name);
449 dbus_result = g_dbus_connection_call_sync(handle->dbus_connection,
450 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_MODEM_INTERFACE,
451 "GetSerialNumber", NULL, NULL,
452 G_DBUS_CALL_FLAGS_NONE, TAPI_SHORT_TIMEOUT, handle->ca, &error);
454 warn("dbus error = %d (%s)", error->code, error->message);
461 g_variant_get (dbus_result, "(issss)", &result, &sn, &meid, &imei, &imeisv);
462 g_variant_unref(dbus_result);
467 data = calloc(1, sizeof(TelMiscSNInformation));
471 g_strlcpy((gchar *)data->szEsn, sn, TAPI_MISC_ME_SN_LEN_MAX);
472 g_strlcpy((gchar *)data->szMeid, meid, TAPI_MISC_ME_SN_LEN_MAX);
473 g_strlcpy((gchar *)data->szImei, imei, TAPI_MISC_ME_SN_LEN_MAX);
474 g_strlcpy((gchar *)data->szImeiSv, imeisv, TAPI_MISC_ME_SN_LEN_MAX);
485 EXPORT_API int tel_check_modem_power_status(TapiHandle *handle, int *result)
487 int ret = TAPI_API_SUCCESS;
489 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
490 TAPI_RET_ERR_NUM_IF_FAIL(result, TAPI_API_INVALID_PTR);
492 ret = tel_get_property_int(handle, TAPI_PROP_MODEM_POWER, result);
493 if (ret == TAPI_API_ACCESS_DENIED) {
494 err("Access denied");
496 } else if (ret != TAPI_API_SUCCESS) {
497 err("failed. (ret=%d)", ret);
501 msg("[%s] modem_power_status = %d (0=on,1=off,2=rst,3=low)", handle->cp_name, *result);