2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "ciss-tapi-request.h"
18 #include "ciss-parser.h"
19 #include "ciss-util.h"
21 #include "ciss-debug.h"
22 #include "ciss-string.h"
23 #include "ciss-widget.h"
24 #include "ciss-ussd.h"
25 #include "ciss-resp.h"
26 #include "ciss-converter.h"
28 static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *noti_id, void *data, void *user_data);
29 static void __ciss_ss_forward_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
30 static void __ciss_ss_barring_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
31 static void __ciss_ss_waiting_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
32 static void __ciss_ss_cli_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
33 static void __ciss_change_ss_barring_pw_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
34 static void __ciss_ss_ussd_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
36 EventHandler event_list[] = {
37 {TAPI_NOTIFY_SS_REL_COMP_MSG, 0, __ciss_tapi_ss_rel_complete_cb},
40 int _ciss_tapi_event_setup(ciss_appdata_t *ad)
47 len = sizeof(event_list) / sizeof(EventHandler);
49 ad->tapi_handle = tel_init(NULL);
50 if (ad->tapi_handle) {
51 for (i = 0; i < len; i++) {
52 api_err = tel_register_noti_event(ad->tapi_handle, event_list[i].event_type, event_list[i].func, (void *) ad);
53 if (api_err != TAPI_API_SUCCESS) {
54 DBG("tapi_register_noti_event() ret : %d", api_err);
59 DBG("tapi_init() failed.");
66 void _ciss_deregister_tel_event(void *data)
71 ciss_appdata_t *ad = (ciss_appdata_t *)data;
72 int ret = TAPI_API_SUCCESS;
74 ret = tel_deinit(ad->tapi_handle);
75 if (ret != TAPI_API_SUCCESS)
76 DBG("tapi_deinit() ret : %d", ret);
79 ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx, void *data)
83 retv_if(data == NULL, CISS_ERR_UNKNOWN);
85 ciss_appdata_t *ad = (ciss_appdata_t *)data;
86 TelSsUssdMsgInfo_t stUssdRecord;
87 TelSsForwardInfo_t stCfActReq;
88 TelSsBarringInfo_t stCbReq;
89 TelSsWaitingInfo_t stCwReq;
90 int err = TAPI_API_SUCCESS;
91 TelSsCliType_t cliType;
92 ciss_err_t error_code = CISS_ERR_NONE;
94 if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
95 memset(&stCfActReq, 0, sizeof(TelSsForwardInfo_t));
96 stCfActReq.Condition = (TelSsForwardWhen_t) mmi_ctx->ss_flavor;
97 DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCfActReq.Condition, mmi_ctx->ss_flavor);
99 stCfActReq.Class = mmi_ctx->tapi_bsg;
100 stCfActReq.NoReplyConditionTimer = mmi_ctx->nr_timer;
101 strncpy((char *)stCfActReq.szPhoneNumber, mmi_ctx->forward_number, CISS_NUMBER_LEN_MAX);
102 stCfActReq.szPhoneNumber[CISS_NUMBER_LEN_MAX] = '\0';
103 } else if (mmi_ctx->ss_type == CISS_SERVICE_BARRING) {
104 memset(&stCbReq, 0, sizeof(TelSsBarringInfo_t));
105 stCbReq.Type = (TelSsBarringType_t) mmi_ctx->ss_flavor;
106 DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCbReq.Type, mmi_ctx->ss_flavor);
107 stCbReq.Class = mmi_ctx->tapi_bsg;
108 memcpy(&stCbReq.szPassword, mmi_ctx->ss_password, CISS_MAX_PASSWORD_LEN);
109 } else if (mmi_ctx->ss_type == CISS_SERVICE_WAITING) {
110 memset(&stCwReq, 0, sizeof(TelSsWaitingInfo_t));
111 stCwReq.Class = mmi_ctx->tapi_bsg;
113 switch (mmi_ctx->opcode) {
116 if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
117 stCfActReq.Mode = TAPI_SS_CF_MODE_REGISTRATION_EV;
119 err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
120 if (err != TAPI_API_SUCCESS) {
121 DBG("\n [CISS-ENGINE] tel_set_ss_forward : REGISTRATION call fails g_err_code = %x", err);
122 _ciss_get_error_from_tapi_error(&error_code, err);
129 if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
130 stCfActReq.Mode = TAPI_SS_CF_MODE_ERASURE_EV;
132 err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
133 if (err != TAPI_API_SUCCESS) {
134 DBG("\n [CISS-ENGINE] tel_set_ss_forward : DE-REGISTRATION call fails g_err_code = %x", err);
135 _ciss_get_error_from_tapi_error(&error_code, err);
141 switch(mmi_ctx->ss_type){
142 case CISS_SERVICE_FORWARDING:
143 stCfActReq.Mode = TAPI_SS_CF_MODE_ENABLE_EV;
145 err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
146 if (err != TAPI_API_SUCCESS) {
147 DBG("\n [CISS-ENGINE] tel_set_ss_forward : ACTIVATE call fails g_err_code = %x", err);
148 _ciss_get_error_from_tapi_error(&error_code, err);
151 case CISS_SERVICE_BARRING:
152 stCbReq.Mode = TAPI_SS_CB_MODE_ACTIVATE;
154 err = tel_set_ss_barring(ad->tapi_handle, &stCbReq, __ciss_ss_barring_resp_cb, ad);
155 if (err != TAPI_API_SUCCESS) {
156 DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails g_err_code = %x", err);
157 _ciss_get_error_from_tapi_error(&error_code, err);
160 case CISS_SERVICE_WAITING:
161 stCwReq.Mode = TAPI_SS_CW_MODE_ACTIVATE;
163 err = tel_set_ss_waiting(ad->tapi_handle, &stCwReq, __ciss_ss_waiting_resp_cb, ad);
164 if (err != TAPI_API_SUCCESS) {
165 DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err);
166 _ciss_get_error_from_tapi_error(&error_code, err);
169 case CISS_SERVICE_IDENTIFICATION:
170 DBG("\n [CISS-ENGINE] Don't activated CLI option");
171 error_code = CISS_ERR_ILLEGAL_SS_OPER;
177 switch(mmi_ctx->ss_type){
178 case CISS_SERVICE_FORWARDING:
179 stCfActReq.Mode = TAPI_SS_CF_MODE_DISABLE_EV;
180 err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
181 if (err != TAPI_API_SUCCESS) {
182 DBG("\n [CISS-ENGINE] tel_set_ss_forward : DEACTIVATE call fails g_err_code = %x", err);
183 _ciss_get_error_from_tapi_error(&error_code, err);
186 case CISS_SERVICE_BARRING:
187 stCbReq.Mode = TAPI_SS_CB_MODE_DEACTIVATE;
188 err = tel_set_ss_barring(ad->tapi_handle, &stCbReq, __ciss_ss_barring_resp_cb, ad);
189 if (err != TAPI_API_SUCCESS) {
190 DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails g_err_code = %x", err);
191 _ciss_get_error_from_tapi_error(&error_code, err);
194 case CISS_SERVICE_WAITING:
195 stCwReq.Mode = TAPI_SS_CW_MODE_DEACTIVATE;
196 err = tel_set_ss_waiting(ad->tapi_handle, &stCwReq, __ciss_ss_waiting_resp_cb, ad);
197 if (err != TAPI_API_SUCCESS) {
198 DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err);
199 _ciss_get_error_from_tapi_error(&error_code, err);
205 DBG("interrogateSS");
206 switch(mmi_ctx->ss_type){
207 case CISS_SERVICE_FORWARDING:
208 err = tel_get_ss_forward_status(ad->tapi_handle, stCfActReq.Class, stCfActReq.Condition,
209 __ciss_ss_forward_resp_cb, ad);
210 if (err != TAPI_API_SUCCESS) {
211 DBG("\n [CISS-ENGINE] tel_get_ss_forward_status call fails g_err_code = %x", err);
212 _ciss_get_error_from_tapi_error(&error_code, err);
215 case CISS_SERVICE_BARRING:
216 err = tel_get_ss_barring_status(ad->tapi_handle, stCbReq.Class, stCbReq.Type,
217 __ciss_ss_barring_resp_cb, ad);
218 if (err != TAPI_API_SUCCESS) {
219 DBG("\n [CISS-ENGINE] tel_get_ss_barring_status call fails g_err_code = %x", err);
220 _ciss_get_error_from_tapi_error(&error_code, err);
223 case CISS_SERVICE_WAITING:
224 err = tel_get_ss_waiting_status(ad->tapi_handle, stCbReq.Class,
225 __ciss_ss_waiting_resp_cb, ad);
226 if (err != TAPI_API_SUCCESS) {
227 DBG("\n [CISS-ENGINE] tel_get_ss_waiting_status call fails g_err_code = %x", err);
228 _ciss_get_error_from_tapi_error(&error_code, err);
231 case CISS_SERVICE_IDENTIFICATION:
232 cliType = (TelSsCliType_t)mmi_ctx->ss_flavor;
233 err = tel_get_ss_cli_status(ad->tapi_handle, cliType,
234 __ciss_ss_cli_resp_cb, ad);
235 if (err != TAPI_API_SUCCESS) {
236 DBG("\n [CISS-ENGINE] tel_get_ss_cli_status call fails g_err_code = %x", err);
237 _ciss_get_error_from_tapi_error(&error_code, err);
242 case registerPassword:
243 DBG("registerPassword");
244 /* password registration request */
245 /* check for too short password and mismatch password */
246 if (CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_password) ||
247 CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password) ||
248 CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password2)) {
249 /* too short password */
250 DBG("\n [CISS-ENGINE] Too short password");
251 error_code = CISS_ERR_CB_PWD_TOO_SORT;
254 err = tel_change_ss_barring_password(ad->tapi_handle,
255 mmi_ctx->ss_password,
256 mmi_ctx->ss_new_password,
257 mmi_ctx->ss_new_password2,
258 __ciss_change_ss_barring_pw_resp_cb, ad);
260 if (err != TAPI_API_SUCCESS) {
261 DBG("\n [CISS-ENGINE] tel_change_ss_barring_password call fails g_err_code = %x", err);
262 _ciss_get_error_from_tapi_error(&error_code, err);
265 case processUnstructuredSS_Request:
266 DBG("processUnstructuredSS_Request");
267 memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t));
268 stUssdRecord.Length = mmi_ctx->user_string_length;
269 stUssdRecord.Type = mmi_ctx->ussd_type;
271 _ciss_strcpy(stUssdRecord.szString, sizeof(stUssdRecord.szString), (char *)mmi_ctx->user_string);
273 DBG("\n [CISS-ENGINE] stUssdRecord.Length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.Length, stUssdRecord.szString);
275 err = tel_send_ss_ussd_request(ad->tapi_handle,
277 __ciss_ss_ussd_resp_cb, ad);
278 if (err != TAPI_API_SUCCESS) {
279 DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request call fails g_err_code = %x", err);
280 _ciss_get_error_from_tapi_error(&error_code, err);
283 case unstructuredSS_Request:
284 DBG("unstructuredSS_Request");
285 memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t));
286 stUssdRecord.Length = mmi_ctx->user_string_length;
287 stUssdRecord.Type = mmi_ctx->ussd_type;
289 _ciss_strcpy(stUssdRecord.szString, sizeof(stUssdRecord.szString), (char *)mmi_ctx->user_string);
291 DBG("\n [CISS-ENGINE] stUssdRecord.Length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.Length, stUssdRecord.szString);
293 err = tel_send_ss_ussd_request(ad->tapi_handle,
295 __ciss_ss_ussd_resp_cb, ad);
296 if (err != TAPI_API_SUCCESS) {
297 DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request call fails g_err_code = %x", err);
298 _ciss_get_error_from_tapi_error(&error_code, err);
302 error_code = CISS_ERR_UNKNOWN;
303 DBG("\n [CISS-ENGINE] Invalid Parsed opcode = %d", mmi_ctx->opcode);
311 int _ciss_on_tapi_sat_ss_event(void *tapi_data, void *data)
314 retv_if(data == NULL, -1);
318 ciss_appdata_t *ad = (ciss_appdata_t *)data;
319 TelSatSendSsIndSsData_t send_ss_info;
320 memset(&send_ss_info, 0, sizeof(TelSatSendSsIndSsData_t));
321 memcpy(&send_ss_info, tapi_data, sizeof(TelSatSendSsIndSsData_t));
323 DBG("ad->is_sat_request = %d", ad->is_sat_request);
326 evas_object_del(ad->popup);
330 if (send_ss_info.ssStringLen > 0) {
331 ciss_err_t ciss_err_code;
332 ad->is_sat_request = EINA_TRUE;
333 ad->sat_terminal_response.sat_command_id = send_ss_info.commandId;
335 ciss_mmi_context_t mmi_ctx;
336 ciss_err_code = _ciss_parse_req_string((char *)send_ss_info.ssString, &mmi_ctx);
338 if (ciss_err_code == CISS_ERR_NONE) {
339 ciss_err_code = _ciss_send_tapi_request(&mmi_ctx, ad);
342 TelSatAppsRetInfo_t app_ret_info;
343 memset(&app_ret_info, 0, sizeof(TelSatAppsRetInfo_t));
345 app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
346 app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
347 app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
348 app_ret_info.appsRet.sendSs.ssCause = TAPI_SS_UNKNOWNERROR;
349 app_ret_info.appsRet.sendSs.meProblem = TAPI_SAT_ME_PROBLEM_INVALID;
350 app_ret_info.appsRet.sendSs.ssString.stringLen = 0;
351 ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
360 int _ciss_on_tapi_sat_ussd_event(void *tapi_data, void *data)
363 retv_if(tapi_data == NULL, -1);
364 retv_if(data == NULL, -1);
368 ciss_appdata_t *ad = (ciss_appdata_t *)data;
369 TelSatSendUssdIndUssdData_t send_ussd_info;
370 memset(&send_ussd_info, 0, sizeof(TelSatSendUssdIndUssdData_t));
371 memcpy(&send_ussd_info, tapi_data, sizeof(TelSatSendUssdIndUssdData_t));
373 DBG("ad->is_sat_request = %d", ad->is_sat_request);
376 evas_object_del(ad->popup);
380 if (send_ussd_info.ussdStringLen > 0) {
381 ad->is_sat_request = EINA_TRUE;
382 ad->sat_terminal_response.sat_command_id = send_ussd_info.commandId;
384 TelSsUssdMsgInfo_t ussd_info;
385 ussd_info.Type = TAPI_SS_USSD_TYPE_USER_INIT;
386 ussd_info.Length = (int)(send_ussd_info.ussdStringLen);
387 if (ussd_info.Length >0)
388 memcpy(&ussd_info.szString, send_ussd_info.ussdString, ussd_info.Length);
390 ret = tel_send_ss_ussd_request(ad->tapi_handle, &ussd_info,
391 __ciss_ss_ussd_resp_cb, ad);
393 TelSatAppsRetInfo_t app_ret_info;
394 memset(&app_ret_info, 0, sizeof(TelSatAppsRetInfo_t));
396 app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD;
397 app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
399 app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
400 app_ret_info.appsRet.sendUssd.ssCause = TAPI_SS_UNKNOWNERROR;
401 app_ret_info.appsRet.sendUssd.meProblem = TAPI_SAT_ME_PROBLEM_INVALID;
402 app_ret_info.appsRet.sendUssd.ussdString.stringLen = 0;
403 ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
406 DBG("Leave, return=%d", ret);
411 static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *noti_id, void *data, void *user_data)
414 ret_if(data == NULL);
415 ret_if(user_data == NULL);
417 char * msg_length_temp;
419 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
420 TelSsRelCompMsgInfo_t rel_comp_info;
422 DBG("event type=%s, is_sat_request=%d", noti_id, ad->is_sat_request);
423 ad->sat_terminal_response.rel_comp_msg_length = 0;
425 if (ad->is_sat_request == EINA_TRUE) {
426 memcpy(&rel_comp_info, data, sizeof(TelSsRelCompMsgInfo_t));
427 msg_length_temp = (char *)(&(rel_comp_info.RelCompMsgLen));
428 ad->sat_terminal_response.rel_comp_msg_length = (unsigned short)(atoi(msg_length_temp));
430 if (ad->sat_terminal_response.rel_comp_msg_length > 0) {
431 memcpy(ad->sat_terminal_response.rel_comp_msg_string, rel_comp_info.szRelCompMsg, rel_comp_info.RelCompMsgLen);
435 DBG("rel_comp_info.RelCompMsgLen = %s", rel_comp_info.RelCompMsgLen);
436 DBG("rel_comp_info.szRelCompMsg = %s", rel_comp_info.szRelCompMsg);
437 DBG("ad->sat_terminal_response.rel_comp_msg_length = %d", ad->sat_terminal_response.rel_comp_msg_length);
438 DBG("ad->sat_terminal_response.rel_comp_msg_string = %s", ad->sat_terminal_response.rel_comp_msg_string);
443 static void __ciss_tapi_ss_resp_handle(int result, void *tapi_data, void *data)
446 ret_if(data == NULL);
449 ciss_appdata_t *ad = (ciss_appdata_t *)data;
451 DBG("result=0x%x ad->is_sat_request=%d", result, ad->is_sat_request);
454 evas_object_del(ad->popup);
458 if (ad->is_sat_request == EINA_TRUE) {
459 TelSatAppsRetInfo_t app_ret_info;
460 app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
461 app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
463 if (result == TAPI_SS_SUCCESS) {
464 app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SUCCESS;
465 app_ret_info.appsRet.sendSs.ssCause = TAPI_SS_SUCCESS;
466 app_ret_info.appsRet.sendSs.meProblem = TAPI_SAT_ME_PROBLEM_NO_SPECIFIC_CAUSE;
467 if (ad->sat_terminal_response.rel_comp_msg_length >0) {
468 app_ret_info.appsRet.sendSs.ssString.stringLen = ad->sat_terminal_response.rel_comp_msg_length;
469 memcpy(app_ret_info.appsRet.sendSs.ssString.string,
470 ad->sat_terminal_response.rel_comp_msg_string, ad->sat_terminal_response.rel_comp_msg_length);
472 app_ret_info.appsRet.sendSs.ssString.stringLen = 0;
475 app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SS_RETURN_ERROR;
476 app_ret_info.appsRet.sendSs.ssCause = result;
478 ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
482 Evas_Object *content;
484 DBG("win=0x%p main=0x%p",ad->win_main, ad->layout_main);
486 if (ad->win_main == NULL) {
488 win = _ciss_create_win(PACKAGE);
490 ret_if(ad->win_main == NULL);
491 ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL);
492 evas_object_show(win);
495 DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
497 if (result == TAPI_SS_SUCCESS) {
498 if (ad->bg == NULL) {
499 ad->bg = _ciss_create_bg(ad->win_main);
500 ret_if(ad->bg == NULL);
503 if (ad->layout_main == NULL) {
504 ad->layout_main = _ciss_create_layout_main(ad->win_main);
505 ret_if(ad->layout_main== NULL);
507 DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
509 content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, tapi_data, ad);
510 ret_if(content == NULL);
511 elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content);
514 _ciss_get_error_from_tapi_error(&ciss_err, result);
515 _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
523 int _ciss_tapi_ussd_resp_handle(int result, void *tapi_data, void *data)
526 retv_if(data == NULL, -1);
528 ciss_appdata_t *ad = (ciss_appdata_t *)data;
533 evas_object_del(ad->popup);
537 DBG("result=0x%x ad->is_sat_request=%d", result, ad->is_sat_request);
538 if (ad->is_sat_request == EINA_TRUE) {
539 TelSatAppsRetInfo_t app_ret_info;
540 TelSsUssdResp_t ussd_info;
541 memset(&ussd_info, 0, sizeof(TelSsUssdResp_t));
542 memcpy(&ussd_info, tapi_data, sizeof(TelSsUssdResp_t));
544 app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD;
545 app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
547 if (result == TAPI_SS_SUCCESS) {
548 app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_SUCCESS;
549 app_ret_info.appsRet.sendUssd.ssCause = TAPI_SS_SUCCESS;
550 app_ret_info.appsRet.sendUssd.meProblem = TAPI_SAT_ME_PROBLEM_NO_SPECIFIC_CAUSE;
551 app_ret_info.appsRet.sendUssd.ussdString.stringLen = ussd_info.Length;
552 if (ad->sat_terminal_response.rel_comp_msg_length >0) {
553 app_ret_info.appsRet.sendUssd.ussdString.stringLen = ad->sat_terminal_response.rel_comp_msg_length;
554 memcpy(app_ret_info.appsRet.sendUssd.ussdString.string,
555 ad->sat_terminal_response.rel_comp_msg_string, ad->sat_terminal_response.rel_comp_msg_length);
557 app_ret_info.appsRet.sendUssd.ussdString.stringLen = 0;
560 app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_USSD_RETURN_ERROR;
561 app_ret_info.appsRet.sendUssd.ssCause = result;
564 ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
565 ad->is_sat_request = EINA_FALSE;
569 Evas_Object *content;
571 if (ad->win_main == NULL) {
573 win = _ciss_create_win(PACKAGE);
574 retv_if(win == NULL, -1);
576 evas_object_show(win);
577 ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL);
580 if (result == TAPI_SS_SUCCESS) {
581 if (ad->bg == NULL) {
582 ad->bg = _ciss_create_bg(ad->win_main);
583 retv_if(ad->bg == NULL, -1);
586 if (ad->layout_main == NULL) {
587 ad->layout_main = _ciss_create_layout_main(ad->win_main);
588 retv_if(ad->layout_main== NULL, -1);
590 DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
592 content = (Evas_Object *)_ciss_create_ussd_view(ad->layout_main, tapi_data, ad);
593 retv_if(data == NULL, -1);
594 elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content);
597 _ciss_get_error_from_tapi_error(&ciss_err, result);
598 _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
606 static void __ciss_ss_forward_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
609 ret_if(data == NULL);
610 ret_if(user_data == NULL);
612 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
614 ad->resp_ss_type = CISS_SERVICE_FORWARDING;
615 __ciss_tapi_ss_resp_handle(result, data, user_data);
619 static void __ciss_ss_barring_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
622 ret_if(data == NULL);
623 ret_if(user_data == NULL);
625 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
627 ad->resp_ss_type = CISS_SERVICE_BARRING;
628 __ciss_tapi_ss_resp_handle(result, data, user_data);
632 static void __ciss_ss_waiting_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
635 ret_if(data == NULL);
636 ret_if(user_data == NULL);
638 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
640 ad->resp_ss_type = CISS_SERVICE_WAITING;
641 __ciss_tapi_ss_resp_handle(result, data, user_data);
645 static void __ciss_ss_cli_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
648 ret_if(data == NULL);
649 ret_if(user_data == NULL);
651 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
653 ad->resp_ss_type = CISS_SERVICE_IDENTIFICATION;
654 __ciss_tapi_ss_resp_handle(result, data, user_data);
658 static void __ciss_change_ss_barring_pw_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
661 ret_if(data == NULL);
662 ret_if(user_data == NULL);
664 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
666 ad->resp_ss_type = CISS_SERVICE_CHANGE_BARRING_PASSWD;
667 __ciss_tapi_ss_resp_handle(result, data, user_data);
671 static void __ciss_ss_ussd_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
674 ret_if(data == NULL);
675 ret_if(user_data == NULL);
677 ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
679 ad->resp_ss_type = CISS_SERVICE_USSD;
680 _ciss_tapi_ussd_resp_handle(result, data, user_data);