34aadefc19e19736b8afff453503d2c1ef966dd5
[framework/telephony/libslp-tapi.git] / src / tapi_proxy_sat.c
1 /*
2  * libslp-tapi
3  *
4  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Kyeongchul Kim <kyeongchul.kim@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  */
20
21 #include <stdio.h>
22 #include <string.h>
23
24 #include <vconf.h>
25
26 #include "TelDefines.h"
27 #include "tel_cs_conn.h"
28 #include "tapi_proxy.h"
29 #include "TelUtility.h"
30 #include "TapiUtility.h"
31 #include "TelSat.h"
32
33 extern tapi_dbus_connection_name conn_name;
34
35 /**
36  *
37  * To send envelope command (MENU SELECTION) to USIM.
38  *
39  * @return              values in enum TapiResult_t.
40  * @param[in]           TelSatMenuSelectionReqInfo_t    menu selection evelope data.
41  * @Interface           Asynchronous.
42  * @remark
43  * @Refer               TelSatMenuSelectionReqInfo_t
44  */
45 EXPORT_API int tel_select_sat_menu(TelSatMenuSelectionReqInfo_t *pMenuSelect, int *pRequestId)
46 {
47         int ret_val;
48         TS_BOOL ret = FALSE;
49         TAPI_GLIB_INIT_PARAMS();
50
51         if (pMenuSelect == NULL)
52                 return TAPI_API_INVALID_PTR;
53
54         if (pRequestId == NULL)
55                 return TAPI_API_INVALID_PTR;
56
57         if (conn_name.length_of_name == 0) {
58                 TAPI_LIB_DEBUG(LEVEL_ERR, "No dbus connection name");
59                 return TAPI_API_OPERATION_FAILED;
60         }
61
62         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
63
64         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
65                         out_param1,out_param2,out_param3,out_param4);
66
67         g_array_append_vals(in_param1, pMenuSelect, sizeof(TelSatMenuSelectionReqInfo_t));
68
69         TAPI_LIB_DEBUG(LEVEL_DEBUG, " Send env cmd... menu selection");
70
71         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
72
73         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_SIMATK_SEND_MENU_SELECTION_ENVELOPE, in_param1, in_param2,
74                         in_param3, in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
75
76         if (TRUE == ret) {
77                 ret_val = g_array_index(out_param1, int, 0);
78                 *pRequestId = g_array_index(out_param2, int, 0);
79         }
80         else {
81                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
82                 *pRequestId = INVALID_REQUEST_ID;
83         }
84
85         TAPI_LIB_DEBUG(LEVEL_DEBUG, " ret: %d \n", ret);
86
87         TAPI_LIB_DEBUG(LEVEL_DEBUG, " ret_val: %d \n", ret_val);
88
89         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
90                         out_param1,out_param2,out_param3,out_param4);
91
92         return ret_val;
93 }
94
95 /**
96  *
97  * API to send event download to SIM.
98  *
99  * @return              values in enum TapiResult_t.
100  * @param[in]           TelSatEventDownloadReqInfo_t    event download data.
101  * @Interface           Asynchronous.
102  * @remark
103  * @Refer               TelSatEventDownloadReqInfo_t
104  */
105 EXPORT_API int tel_download_sat_event(TelSatEventDownloadReqInfo_t *pEventData, int *pRequestId)
106 {
107         TAPI_LIB_DEBUG(LEVEL_DEBUG, "Enter");
108
109         int ret_val;
110         TS_BOOL ret = FALSE;
111
112         TAPI_GLIB_INIT_PARAMS();
113
114         if (pEventData == NULL){
115                 TAPI_LIB_DEBUG(LEVEL_ERR, "Error: 1st param is NULL");
116                 return TAPI_API_INVALID_PTR;
117         }
118
119         if (pRequestId == NULL){
120                 TAPI_LIB_DEBUG(LEVEL_ERR, "Error: 2nd param is NULL");
121                 return TAPI_API_INVALID_PTR;
122         }
123
124         if (conn_name.length_of_name == 0) {
125                 TAPI_LIB_DEBUG(LEVEL_ERR, "Error: No dbus connection name");
126                 return TAPI_API_OPERATION_FAILED;
127         }
128
129         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
130
131         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
132                         out_param1,out_param2,out_param3,out_param4);
133
134         g_array_append_vals(in_param1, pEventData, sizeof(TelSatEventDownloadReqInfo_t));
135         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
136
137         TAPI_LIB_DEBUG(LEVEL_DEBUG, " event download: event=0x%x", pEventData->eventDownloadType);
138
139         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_SIMATK_SEND_EVENT_DOWNLOAD, in_param1, in_param2,
140                         in_param3, in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
141         //prevent 2223
142         if (TRUE == ret) {
143                 ret_val = g_array_index(out_param1, int, 0);
144                 *pRequestId = g_array_index(out_param2, int, 0);
145         }
146         else {
147                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
148                 *pRequestId = INVALID_REQUEST_ID;
149         }
150
151         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
152                         out_param1,out_param2,out_param3,out_param4);
153
154         return ret_val;
155 }
156
157 /**
158  *
159  * API to get main menu information.
160  *
161  * @return              values in enum TapiResult_t.
162  * @param[out]          TelSatSetupMenuInfo_t   main menu data.
163  * @Interface           Synchronous.
164  * @remark
165  * @Refer               TelSatSetupMenuInfo_t
166  */
167 EXPORT_API int tel_get_sat_main_menu_info(TelSatSetupMenuInfo_t *pMainMenu)
168 {
169         TAPI_LIB_DEBUG(LEVEL_DEBUG, " Get Main Menu Information");
170         int ret_val;
171         TS_BOOL ret = FALSE;
172         TAPI_GLIB_INIT_PARAMS();
173
174         if (pMainMenu == NULL)
175                 return TAPI_API_INVALID_PTR;
176
177         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
178
179         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
180                         out_param1,out_param2,out_param3,out_param4);
181
182         g_array_append_vals(in_param1, pMainMenu, sizeof(TelSatSetupMenuInfo_t));
183         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
184
185         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_SIMATK_GET_MAIN_MENU_INFO, in_param1, in_param2, in_param3,
186                         in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
187
188         if (TRUE == ret) {
189                 ret_val = g_array_index(out_param1, int, 0);
190                 if (ret_val == TAPI_API_SUCCESS)
191                         *pMainMenu = g_array_index(out_param2,TelSatSetupMenuInfo_t,0);
192         }
193         else {
194                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
195         }
196
197         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
198                         out_param1,out_param2,out_param3,out_param4);
199
200         return ret_val;
201 }
202
203 /**
204  *
205  * API to send application excution result.
206  *
207  * @return              values in enum TapiResult_t.
208  * @param[in]           TelSatAppsRetInfo_t     application result information data.
209  * @Interface           Asynchronous.
210  * @remark
211  * @Refer               TelSatAppsRetInfo_t
212  */
213 EXPORT_API int tel_send_sat_app_exec_result(TelSatAppsRetInfo_t *pAppRetInfo)
214 {
215         TAPI_LIB_DEBUG(LEVEL_DEBUG, " tel_send_sat_app_exec_result");
216         int ret_val;
217         TS_BOOL ret = FALSE;
218         TAPI_GLIB_INIT_PARAMS();
219
220         if (pAppRetInfo == NULL)
221                 return TAPI_API_INVALID_PTR;
222
223         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
224
225         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
226                         out_param1,out_param2,out_param3,out_param4);
227
228         g_array_append_vals(in_param1, pAppRetInfo, sizeof(TelSatAppsRetInfo_t));
229         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
230
231         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_SIMATK_SEND_APP_EXEC_RESULT, in_param1, in_param2,
232                         in_param3, in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
233
234         if (TRUE == ret) {
235                 ret_val = g_array_index(out_param1, int, 0);
236         }
237         else {
238                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
239         }
240
241         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
242                         out_param1,out_param2,out_param3,out_param4);
243
244         return ret_val;
245 }
246
247 /**
248  *
249  * API to send UI display status.
250  *
251  * @return              values in enum TapiResult_t.
252  * @param[in]           TelSatUiDisplayStatusType_t     display status data.
253  command_id     command identifier
254  * @Interface           Asynchronous.
255  * @remark
256  * @Refer               TelSatUiDisplayStatusType_t
257  */
258 EXPORT_API int tel_send_ui_display_status(int commandId, TelSatUiDisplayStatusType_t status)
259 {
260         TAPI_LIB_DEBUG(LEVEL_DEBUG, " tel_send_ui_display_status");
261         TAPI_LIB_DEBUG(LEVEL_DEBUG,"status [%d]\n", status);
262         int ret_val;
263         TS_BOOL ret = FALSE;
264         TAPI_GLIB_INIT_PARAMS();
265
266         if (commandId < 0) {
267                 TAPI_LIB_DEBUG(LOG_DEBUG,"command id should be positive");
268                 return TAPI_API_SAT_INVALID_COMMAND_ID;
269         }
270
271         if ((status != TAPI_SAT_DISPLAY_SUCCESS) && (status != TAPI_SAT_DISPLAY_FAIL)) {
272                 TAPI_LIB_DEBUG(LOG_DEBUG,"invalid status sent");
273                 return TAPI_API_INVALID_INPUT;
274         }
275
276         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
277
278         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
279                         out_param1,out_param2,out_param3,out_param4);
280
281         g_array_append_vals(in_param1, &commandId, sizeof(int));
282         g_array_append_vals(in_param1, &status, sizeof(TelSatUiDisplayStatusType_t));
283         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
284
285         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_UI_DISPLAY_STATUS, in_param1, in_param2, in_param3,
286                         in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
287         if (TRUE == ret) {
288                 ret_val = g_array_index(out_param1, int, 0);
289         }
290         else {
291                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
292         }
293
294         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
295                         out_param1,out_param2,out_param3,out_param4);
296
297         return ret_val;
298 }
299
300 /**
301  *
302  * API to send UI user confirmation data.
303  *
304  * @return              values in enum TapiResult_t.
305  * @param[in]           command_id      command identifier
306  command_type           command type
307  key_type                       user confirmation value
308  addtional_data         addtional data
309  data_len                       data length
310  * @Interface           Asynchronous.
311  * @remark
312  * @Refer
313  */
314 EXPORT_API int tel_send_sat_ui_user_confirm(TelSatUiUserConfirmInfo_t *pUserConfirmData)
315 {
316         TAPI_LIB_DEBUG(LEVEL_DEBUG, " tel_send_sat_ui_user_confirm");
317         int ret_val;
318         TS_BOOL ret = FALSE;
319         TelSatTextInfo_t add_data;
320         TAPI_GLIB_INIT_PARAMS();
321
322         if (pUserConfirmData == NULL) {
323                 TAPI_LIB_DEBUG(LEVEL_DEBUG, " pUserConfirmData is NULL");
324                 return TAPI_API_INVALID_PTR;
325         }
326
327         if (pUserConfirmData->commandId < 0) {
328                 TAPI_LIB_DEBUG(LOG_DEBUG,"command id should be positive");
329                 return TAPI_API_SAT_INVALID_COMMAND_ID;
330         }
331
332         if (pUserConfirmData->dataLen < 0) {
333                 TAPI_LIB_DEBUG(LOG_DEBUG,"data length should not be negative [%d]", pUserConfirmData->dataLen);
334                 return TAPI_API_INVALID_INPUT;
335         }
336
337         if ((pUserConfirmData->keyType < TAPI_SAT_USER_CONFIRM_YES) || (pUserConfirmData->keyType
338                         > TAPI_SAT_USER_CONFIRM_TIMEOUT)) {
339                 TAPI_LIB_DEBUG(LOG_DEBUG,"invalid key type");
340                 return TAPI_API_INVALID_INPUT;
341         }
342
343         if ((pUserConfirmData->pAdditionalData == NULL && pUserConfirmData->dataLen != 0)) {
344                 TAPI_LIB_DEBUG(LOG_DEBUG,"essential data(pAdditionalData or dataLen) is absent");
345                 return TAPI_API_INVALID_INPUT;
346         }
347
348         TAPI_RET_ERR_NUM_IF_FAIL(tapi_check_dbus_status(), TAPI_API_SYSTEM_RPC_LINK_NOT_EST);
349
350         TAPI_GLIB_ALLOC_PARAMS(in_param1,in_param2,in_param3,in_param4,
351                         out_param1,out_param2,out_param3,out_param4);
352
353         g_array_append_vals(in_param1, &pUserConfirmData->commandId, sizeof(int));
354         g_array_append_vals(in_param1, &pUserConfirmData->commandType, sizeof(int));
355         g_array_append_vals(in_param1, &pUserConfirmData->keyType, sizeof(int));
356         g_array_append_vals(in_param1, &pUserConfirmData->dataLen, sizeof(int));
357
358         if (pUserConfirmData->pAdditionalData != NULL && pUserConfirmData->dataLen != 0) {
359                 memset(&add_data, 0x00, sizeof(TelSatTextInfo_t));
360                 memcpy(add_data.string, pUserConfirmData->pAdditionalData, pUserConfirmData->dataLen);
361                 add_data.stringLen = pUserConfirmData->dataLen;
362                 g_array_append_vals(in_param2, &add_data, sizeof(TelSatTextInfo_t));
363         }
364
365         g_array_append_vals(in_param4, &conn_name, sizeof(tapi_dbus_connection_name));
366
367         ret = tapi_send_request(TAPI_CS_SERVICE_SIMATK, TAPI_CS_UI_USER_CONFIRM, in_param1, in_param2, in_param3,
368                         in_param4, &out_param1, &out_param2, &out_param3, &out_param4);
369         if (TRUE == ret) {
370                 ret_val = g_array_index(out_param1, int, 0);
371         }
372         else {
373                 ret_val = TAPI_API_SYSTEM_RPC_LINK_DOWN;
374         }
375
376         TAPI_GLIB_FREE_PARAMS(in_param1,in_param2,in_param3,in_param4,
377                         out_param1,out_param2,out_param3,out_param4);
378
379         if (ret_val == TAPI_API_SUCCESS) {
380                 return TRUE;
381         }
382
383         return FALSE;
384 }