comparison src/aci2/bmi/mmiSimToolkit.c @ 120:3c2acfa1a72f

src/aci2/bmi: file renames to make filename case consistent
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 07 Oct 2016 03:46:05 +0000
parents src/aci2/bmi/MmiSimToolkit.c@93999a60b835
children
comparison
equal deleted inserted replaced
119:b92a33c204b6 120:3c2acfa1a72f
1 /*******************************************************************************
2
3 CONDAT (UK)
4
5 ********************************************************************************
6
7 This software product is the property of Condat (UK) Ltd and may not be
8 disclosed to any third party without the express permission of the owner.
9
10 ********************************************************************************
11
12 $Project name: Basic MMI
13 $Project code: BMI (6349)
14 $Module: MMI
15 $File: MmiSimToolkit.c
16 $Revision: 1.0
17
18 $Author: Condat(UK)
19 $Date: 22/02/01
20
21 ********************************************************************************
22
23 Description:
24
25
26
27 ********************************************************************************
28
29 $History: MmiSimToolkit.c
30
31 xrashmic 16 Feb, 2006 OMAPS00064413
32 When a SIM RESET occurs, while recreating the simtoolkit list view, the list win is also recreated.
33
34
35 Mar 11, 2006 REF:DR:OMAPS00061467 x0035544
36 Description: 27.22.4.13.3 SET UP CALL (display of icons) fails.
37 Solution: In the function sim_toolkit_exec() for the event SAT_SETUP_CALL copied the icon data which is
38 got through the sat command on to the structures data->call_setup_parameter.iconInfo and to the data->call_setup_parameter.iconInfo2
39 appropriately.And For the event SAT_CALL_END freed the memory allocated for the icon data.
40 on to the
41
42 Feb 02, 2006 DR: OMAPS00061468 - x0035544.
43 Description: SAT 27.22.4.22.2 SET UP IDLE MODE TEXT (Icon support) fails
44 Solution : SAT SET UP IDLE MODE TEXT (Icon) support added.
45
46 Jan 16, 2006 DR: OMAPS00061460 - Shashi Shekar B.S.
47 Description: SAT Icon support
48 Solution : SAT icon support added.
49
50 Dec 23, 2005 REF: OMAPS00062166 x0039928
51 Bug: CT-TIB-GCF[27.22.4.24.1]-sequence 1.2 crashes
52 Fix: Initialize the editor buffer. Initialization is taken care for DTMF and also for SS.
53
54
55 xreddymn Sep-06-2005 MMI-SPR-33876:
56 Initialize editor buffer when displaying message box
57 in case of SAT_SEND_SMS
58
59 Aug 16, 2004 REF: CRR 24323 Deepa M.D
60 Bug:Clenup of sprintf used for tracing
61 Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX
62
63 25/10/00 Original Condat(UK) BMI version.
64 21/02/03 removed all calls to function sat_add_unicode_tag_if_needed() and the
65 function itself
66 26-05-04 CRR 19656 Sandip and Deepa M.D
67 Fix for The Dsample doesn't display lines ( <CR> or <LF> ) in the SETUP IDLE
68 TEXT command.
69 Fix for The idle screen is empty when a SETUP IDLE TEXT command is sent with
70 a long text ( 239 characters ).
71
72
73 $End
74
75 *******************************************************************************/
76
77 #define ENTITY_MFW
78
79 /* includes */
80 #include <string.h>
81 #include <stdio.h>
82 #include <stdlib.h>
83
84 #if defined (NEW_FRAME)
85
86 #include "typedefs.h"
87 #include "vsi.h"
88 #include "pei.h"
89 #include "custom.h"
90 #include "gsm.h"
91
92 #else
93
94 #include "STDDEFS.H"
95 #include "custom.h"
96 #include "gsm.h"
97 #include "vsi.h"
98
99 #endif
100
101 #include "pconst.cdg"
102 #include "mconst.cdg"
103 #include "message.h"
104 #include "ccdapi.h"
105 #include "prim.h"
106 #include "cus_aci.h"
107 #include "cnf_aci.h"
108 #include "mon_aci.h"
109
110 #include "tok.h"
111
112 #include "prim.h"
113 #ifndef PCM_2_FFS
114 #include "pcm.h"
115 #endif
116
117
118 #include "mfw_mfw.h"
119 #include "mfw_kbd.h"
120 #include "mfw_tim.h"
121 #include "mfw_lng.h"
122 #include "mfw_win.h"
123 #include "mfw_icn.h"
124 #include "mfw_sim.h"
125 #include "mfw_nm.h"
126 #include "mfw_sat.h" // x0021334 : To test SAT session end - CQ33597
127 /* SPR#1428 - SH - New Editor changes */
128 #ifndef NEW_EDITOR
129 #include "mfw_edt.h"
130 #endif
131 #include "mfw_mnu.h"
132 #include "mfw_phb.h"
133 #include "mfw_sms.h"
134
135 #include "dspl.h"
136
137
138 #include "p_mmi.h"
139 #include "message.h"
140 #include "prim.h"
141 #include "aci_cmh.h"
142 #include "mfw_mme.h"
143
144 #include "MmiMmi.h"
145
146 #include "Mmiicons.h"
147 #include "MmiPins.h"
148 #include "MmiMain.h"
149 #include "MmiDialogs.h"
150 #include "MmiIdle.h"
151 #include "MmiStart.h"
152 #include "mmiCall.h"
153 #include "MmiSimToolkit.h"
154 #include "gdi.h"
155 #include "audio.h"
156 #include "MmiLists.h"
157 #include "MmiSounds.h"
158 #include "MmiResources.h"
159 #include "MmiTimeDate.h"
160 #include "mmiSat_i.h"
161 /* SPR#1428 - SH - New Editor changes */
162 #ifdef NEW_EDITOR
163 #include "ATBCommon.h"
164 #include "ATBDisplay.h"
165 #include "ATBEditor.h"
166 #include "AUIEditor.h"
167 #else
168 #include "MmiEditor.h"
169 #endif
170 #include "MmiMenu.h" // SH - 20/11/01 - included to provide symbol SimMenuFunc
171 #include "mmiSmsRead.h" /*MC SPR 940/2*/
172
173 #include "cus_aci.h"
174 #include "prim.h"
175
176 #ifndef PCM_2_FFS
177 #include "pcm.h"
178 #endif
179
180 #include "mmiSatClassE.h"
181
182 #include "mmiColours.h" /* SPR#2321 - DS */
183 #include "MmiDialogs.h" /* SPR#2321 - DS */
184
185
186 #ifdef MMI_HOMEZONE_ENABLED
187 #include "MmiHomezone.h"
188 #endif
189
190 #ifdef FF_WAP
191 #include "AUIWapext.h"
192 #endif
193
194 #if defined(FF_WAP)
195 #define MMI_TEST_SAT_LAUNCH_BROWSER
196 #endif
197
198 #ifdef MMI_TEST_SAT_LAUNCH_BROWSER
199 void mmiOpenDummyBrowser(T_MFW_HND win,char* information);
200 #define INFORMATION_SIZE 100
201 char information[INFORMATION_SIZE];
202 #endif
203 /*
204 * Local definitions
205 */
206 typedef struct
207 {
208 T_MMI_CONTROL mmi_control;
209 T_MFW_HND win;
210 T_MFW_HND sat_handle;
211 T_SAT_CMD * sat_command; /* mfw storage of actual command */
212 T_SAT_CMD * sat_setup_menu_command; /* dynamic storage of setup menu */
213 T_MFW_HND sat_setup_menu_win; /* c030 rsa window associated with the setup menu command */
214 T_MFW_HND sat_setup_menu_listmnu_win; /* NDH : Window associated with the SAT ListMenu */
215 T_MFW_HND info_win; /* window used for simple info screens */
216 T_MFW_HND sat_call_setup_win; /* window associated with the call setup command */
217 T_SAT_call_setup_parameter * call_setup_parameter; /* parameter psace of call setup to be passed to call() */
218 T_SAT_EVENTS active_sat_session; /* event which caused the currently active session */
219 #ifdef NEW_EDITOR
220 T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */
221 #else
222 T_EDITOR_DATA editor_data;
223 #endif
224 UBYTE satCallWithRedial; /* SPR#1784 - DS - Flag for SAT call 'with redial' */
225 UBYTE sat_available_on_SIM;
226 } T_sim_toolkit;
227
228 static T_sim_toolkit * g_sim_toolkit_data;
229
230 /*MC SPR 1257, merged in from b-sample version of this file*/
231 char * sat_mainmenu_label = NULL;
232 UBYTE header_len;
233 /*MC end*/
234
235 BOOL sat_call_active = FALSE; // Marcus: Issue 1812: 13/03/2003
236
237 /* PROTOTYPES */
238 static T_MFW_HND sim_toolkit_create (T_MFW_HND parent_window);
239 static void sim_toolkit_destroy (T_MFW_HND own_window);
240 //sandip 16292 . added this new function
241 unsigned char DecodeGSM7ToASCII(U8 * encoded, U8 * plain, U8 Length);
242 /*
243 * Marcus: Issue 1057: 21/01/2003: Removed "static" from the following two
244 * function prototypes for their use in MmiCall.c
245 */
246 T_MFW_HND sat_get_setup_menu_win (void);
247 T_MFW_HND sat_get_call_setup_win (void);
248
249 static void sat_setup_menu_proc (T_SAT_CMD * sat_command);
250 static void sat_info_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason);
251
252 extern UBYTE call_SATCall; // Marcus: Issue 1057: 21/01/2003
253
254
255
256 /*******************************************************************************
257
258 $Function: sim_toolkit_check
259
260 $Description: If there is no support for SAT on SIM card
261 the item SIM TOOLKIT will not appear in the menulist
262
263 $Returns:
264
265 $Arguments:
266
267 *******************************************************************************/
268 USHORT sim_toolkit_check (struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
269 {
270
271 T_sim_toolkit * data = g_sim_toolkit_data;
272
273 TRACE_FUNCTION("sim_toolkit_check");
274
275 if (data->sat_available_on_SIM EQ TRUE)
276 {
277 //show the SAT item in the menulist
278 return 0;
279 }
280 else
281 {
282 return 1;
283 }
284
285 }
286
287
288
289
290 /*******************************************************************************
291
292 $Function: simToolkitInit
293
294 $Description: This is the start-up time initialisation routine.
295 For compatibility reasons the functions is still there.
296
297
298 $Returns: none.
299
300 $Arguments:
301
302 *******************************************************************************/
303 void simToolkitInit (T_MFW_HND parent_window)
304 {
305 TRACE_FUNCTION("simToolkitInit");
306
307 g_sim_toolkit_data = (T_sim_toolkit *)ALLOC_MEMORY (sizeof (T_sim_toolkit));
308
309 winAutoFocus (TRUE);
310 sat_set_setup_menu_win(NULL);
311 sat_set_call_setup_win(NULL);
312 sim_toolkit_create (parent_window);
313 }
314 /*******************************************************************************
315
316 $Function: simToolkitExit
317
318 $Description: This is the shutdown time clean-up routine.
319
320 $Returns: none.
321
322 $Arguments:
323
324 *******************************************************************************/
325 void simToolkitExit(void)
326 {
327 TRACE_FUNCTION("simTookitExit");
328 sim_toolkit_destroy (g_sim_toolkit_data->win);
329 // FREE_MEMORY ((U8 *)g_sim_toolkit_data, sizeof (T_sim_toolkit));
330 if (sat_mainmenu_label != NULL)
331 {
332 sat_destroy_TEXT_ASCIIZ (sat_mainmenu_label);
333 sat_mainmenu_label = NULL;
334 }
335 }
336
337
338 /********************************************************************
339 *
340 * SIM Toolkit Dialog
341 *
342 * Window - Structure
343 *
344 * sim_toolkit ----> sat_play_tone
345 * ----> sat_display_text
346 * ----> sat_get_key
347 * ----> sat_setup_call
348 * ----> sat_get_string
349 * ----> sat_setup_menu
350 * ----> sat_select_item
351 * ----> sat_send_sms
352 * ----> sat_send_ss
353 *
354 ********************************************************************/
355 static const UBYTE sat_terminal_profile [13] =
356 {
357 #ifdef SAT_TP1_PRF_DNL
358 (SAT_TP1_PRF_DNL | SAT_TP1_MENU_SEL),
359
360 (SAT_TP2_CMD_RES|SAT_TP2_CC|SAT_TP2_ALPHA_ID|
361 SAT_TP2_UCS2_ENTRY|SAT_TP2_UCS2_DSPL),
362
363 (SAT_TP3_DSPL_TXT|SAT_TP3_GET_INKEY|SAT_TP3_GET_INPUT|
364 SAT_TP3_PLAY_TONE),
365
366 (SAT_TP4_SEL_ITEM|SAT_TP4_SEND_SMS|SAT_TP4_SEND_SS|
367 SAT_TP4_SEND_USSD|SAT_TP4_SETUP_CALL|SAT_TP4_SETUP_MENU),
368
369 (SAT_TP5_EVENT_LIST | SAT_TP5_USER_ACT | SAT_TP5_SCR_AVAIL),
370 0x0, 0x0,
371 (SAT_TP8_BIN_GET_INKEY | SAT_TP8_IDLE_TXT | SAT_TP8_AI2_SETUP_CALL),
372
373 #if defined(FF_WAP)
374 (SAT_TP9_SUST_DSPL_TXT|SAT_TP9_LAUNCH_BROWSER),
375 #else
376 SAT_TP9_SUST_DSPL_TXT,
377 #endif
378 0x0, 0x0,
379 (SAT_TP12_OPEN_CHANNEL | SAT_TP12_CLOSE_CHANNEL | SAT_TP12_RECEIVE_DATA |
380 SAT_TP12_SEND_DATA),
381
382 (SAT_TP13_CSD_SUPP_BY_ME | SAT_TP13_GPRS_SUPP_BY_ME)
383 #else
384 0x09, 0x73, 0x17, 0x37,0x00 // c032 rsa
385 #endif
386 };
387
388 static void sim_toolkit_destroy (T_MFW_HND own_window);
389 static void sim_toolkit_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command);
390 static int sim_toolkit_sat_cb (T_MFW_EVENT event, T_MFW_SAT * sat_bits);
391 /*******************************************************************************
392
393 $Function: sim_toolkit_create
394
395 $Description: Creation of an instance for the SIM Toolkit dialog.
396 Type of dialog : SINGLE_STATIC
397 Top Window must be available at any time, only one instance.
398
399
400 $Returns: none.
401
402 $Arguments:
403
404 *******************************************************************************/
405 static T_MFW_HND sim_toolkit_create (T_MFW_HND parent_window)
406 {
407 T_sim_toolkit * data = g_sim_toolkit_data;
408 T_MFW_WIN * win;
409
410 TRACE_FUNCTION("sim_toolkit_create");
411
412 data->win = win_create (parent_window, 0, 0, NULL); // c013 rsa
413
414 if (data->win EQ NULL)
415 return NULL;
416
417 /*
418 * Create window handler
419 */
420 data->mmi_control.dialog = (T_DIALOG_FUNC)sim_toolkit_exec;
421 data->mmi_control.data = data;
422 win = ((T_MFW_HDR *)data->win)->data;
423 win->user = (MfwUserDataPtr)data;
424
425 data->sat_command = (T_SAT_CMD *)ALLOC_MEMORY (sizeof (T_SAT_CMD)); // c022 rsa
426
427 /*
428 * Create any other handler
429 */
430 data->sat_handle = sat_create (
431 data->win, // parent window
432 /* possible SAT events */
433 MfwSatSessionEnd | /* end of session */
434 MfwSatRefresh | /* refresh SIM fields */
435 MfwSatDataRefreshed | /*data Refreshed */
436 MfwSatTextOut| /* display string */
437 MfwSatGetKey| /* get user keystroke */
438 MfwSatGetString| /* get user input */
439 MfwSatPlayTone| /* play audio tone */
440 MfwSatSetupMenu| /* setup toolkit menu */
441 MfwSatSelectItem| /* select menu item */
442 MfwSatSendSMS| /* send short message */
443 MfwSatSendSS| /* send service command */
444 MfwSatSendUSSD| /* send USSD command */
445 MfwSatSendDTMF| /* send dtmf command */
446 MfwSatCall| /* setup a call */
447 MfwSatSetEvents| /* setup event lists */
448 MfwSatIdleText| /* set idle text */
449 MfwSatCcRes| /* call control result */
450 MfwSatCcAlert /* call control alerting */
451 #if defined(FF_WAP)
452 |MfwSatLaunchBrowser
453 #else
454 #endif
455 |MfwSatOpenChannel|
456 MfwSatCloseChannel|
457 MfwSatSendData|
458 MfwSatReceiveData|
459 MfwSatErrBusy /* SAT error handling */
460 ,
461 (T_MFW_CB)sim_toolkit_sat_cb, // event callback
462 data->sat_command); // control block for MFW
463
464 /*
465 * initialize global variables
466 */
467 data->sat_setup_menu_command = NULL;
468 data->sat_command = NULL;
469 data->info_win = NULL;
470 data->call_setup_parameter = NULL;
471 data->active_sat_session = SAT_SESSION_END;
472 data->sat_available_on_SIM = FALSE;
473 data->satCallWithRedial = 0; /* SPR#1784 - DS - Initialise 'with redial' flag */
474 sat_mainmenu_label = NULL;
475
476 /*
477 * Initialise MFW
478 */
479 sat_init ((UBYTE *)sat_terminal_profile, (UBYTE)sizeof (sat_terminal_profile));
480
481 /*
482 * return window handle
483 */
484 win_show(data->win);
485 return data->win;
486 }
487 /*******************************************************************************
488
489 $Function: sim_toolkit_destroy
490
491 $Description: Destroy the sim toolkit dialog.
492
493 $Returns: none.
494
495 $Arguments:
496
497 *******************************************************************************/
498 static void sim_toolkit_destroy (T_MFW_HND own_window)
499 {
500 T_MFW_WIN * win;
501 T_sim_toolkit * data;
502
503 if (own_window)
504 {
505 win = ((T_MFW_HDR *)own_window)->data;
506 data = (T_sim_toolkit *)win->user;
507
508 if (data)
509 {
510 /*
511 * Exit SAT and Delete SAT Handler
512 */
513 sat_exit ();
514 sat_delete (data->sat_handle);
515
516 /*
517 * Delete WIN Handler
518 */
519 win_delete (data->win);
520 /*
521 * Free Memory
522 */
523 if (data->sat_setup_menu_command NEQ NULL)
524 {
525 FREE_MEMORY ((U8 *)data->sat_setup_menu_command, sizeof (T_SAT_CMD));
526 data->sat_setup_menu_command = NULL;
527 }
528 if (data->sat_command != NULL)
529 {
530 FREE_MEMORY ((U8 *)data->sat_command, sizeof (T_SAT_CMD)); // c022 rsa
531 data->sat_command = NULL;
532 }
533 FREE_MEMORY ((U8 *)data, sizeof (T_sim_toolkit));
534 }
535 }
536 }
537
538 /*******************************************************************************
539
540 $Function: sim_toolkit_exec
541
542 $Description: Dialog function for sim toolkit top window.
543 Handle the SAT commands delivered by MFW<-ACI<-SIM
544
545 $Returns: none.
546
547 $Arguments:
548
549 *******************************************************************************/
550 static void sim_toolkit_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command)
551 {
552 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
553 T_sim_toolkit * data = (T_sim_toolkit *)win_data->user;
554 T_MFW_HND sat_win;
555 T_SAT_RES sat_res;
556
557 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
558 #ifdef FF_MMI_SAT_ICON
559 USHORT icon_length;
560 #endif
561
562 TRACE_FUNCTION ("sim_toolkit_exec()");
563
564 if (event NEQ SAT_SESSION_END)
565 data->active_sat_session = (T_SAT_EVENTS) event;
566
567 if (data->info_win != NULL)
568 {
569 SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
570 data->info_win = NULL;
571 }
572
573
574 switch (event)
575 {
576 case SAT_DISPLAY_TEXT:
577 TRACE_EVENT("SAT_DISPLAY_TEXT");
578 /*
579 * Text with normal priority will be displayed
580 * only in idle screen and in SAT Menu Item
581 */
582 if ((sat_command->qual & SAT_M_TEXT_HIGH_PRIO) EQ 0)
583 {
584 TRACE_EVENT("NOT SAT_M_TEXT_HIGH_PRIO");
585 /* Check if Idle AND Sat Session are inactiv */
586 if ((!g_SATsession_is_active)&&(!idleIsFocussed()))
587 {
588 TRACE_EVENT("BUSY SCREEN");
589 /* idle is not in focus and not currently in a SAT session: we are busy elsewhere */
590 sat_res[SAT_ERR_INDEX] = SAT_RES_BUSY_ME;
591 sat_res[SAT_AI_INDEX] = SatResAiBusyScreen;
592 sat_done (sat_command, sat_res);
593 return;
594 }
595 }
596
597 sat_win = sat_display_text_create (data->win);
598 if (sat_win)
599 {
600 data->sat_command = sat_command;
601 SEND_EVENT (sat_win, event, 0, data->sat_command);
602 }
603 else
604 {
605 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
606 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
607 sat_done (sat_command, sat_res);
608 }
609 break;
610
611 case SAT_PLAY_TONE:
612 TRACE_EVENT("SAT_PLAY_TONE");
613 /*
614 * Create and initiate Play Tone Window
615 */
616 sat_win = sat_play_tone_create (data->win);
617 if (sat_win)
618 {
619 data->sat_command = sat_command;
620 SEND_EVENT (sat_win, event, 0, data->sat_command);
621 }
622 else
623 {
624 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
625 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
626 sat_done (sat_command, sat_res);
627 }
628 break;
629
630 case SAT_GET_KEY:
631 TRACE_EVENT("SAT_GET_KEY");
632 /*
633 * Create and initiate Get Key Window
634 */
635 sat_win = sat_get_key_create (data->win);
636 if (sat_win)
637 {
638 data->sat_command = sat_command;
639 SEND_EVENT (sat_win, event, 0, data->sat_command);
640 }
641 else
642 {
643 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
644 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
645 sat_done (sat_command, sat_res);
646 }
647 break;
648 case SAT_GET_STRING:
649 TRACE_EVENT("SAT_GET_STRING");
650 /*
651 * Create and initiate Get String Window
652 */
653 sat_win = sat_get_string_create (data->win);
654 if (sat_win)
655 {
656 data->sat_command = sat_command;
657 SEND_EVENT (sat_win, event, 0, data->sat_command);
658 }
659 else
660 {
661 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
662 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
663 sat_done (sat_command, sat_res);
664 }
665 break;
666
667 // c016 rsa
668 case SAT_SETUP_MENU:
669 TRACE_EVENT("SAT_SETUP_MENU");
670
671 sat_call_active = FALSE; // Marcus: Issue 1812: 13/03/2003
672 //SAT is on the SIM available
673 data->sat_available_on_SIM = TRUE;
674
675 /*
676 * initiate Setup Menu
677 */
678 sat_setup_menu_proc(sat_command);
679 sat_res[SAT_ERR_INDEX] = SatResSuccess;
680 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
681 sat_done (sat_command, sat_res);
682 break;
683
684 case SAT_SELECT_ITEM:
685 TRACE_EVENT("SAT_SELECT_ITEM");
686 /*
687 * Create and initiate select item Window
688 */
689 sat_win = sat_select_item_create (data->win);
690 if (sat_win)
691 {
692 data->sat_command = sat_command;
693 SEND_EVENT (sat_win, event, 0, data->sat_command);
694 }
695 else
696 {
697 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
698 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
699 sat_done (sat_command, sat_res);
700 }
701 break;
702 // end c016 rsa
703
704 // c001 xas
705 case SAT_SEND_SMS:
706 TRACE_EVENT("SAT_SEND_SMS");
707 /*
708 * --> display alpha identifier if available
709 */
710 if ((sat_command->c.sms.info.len NEQ 0) &&
711 (sat_command->c.sms.info.len NEQ (U8)-1))
712 {
713 char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.sms.info);
714 /*
715 * Setup an editor to display a string
716 */
717
718
719
720 /* SPR#1428 - SH - New Editor changes */
721 #ifdef NEW_EDITOR
722 AUI_edit_SetDefault(&data->editor_data);
723 AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
724 AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
725 AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
726 // xreddymn Sep-06-2005 MMI-SPR-33876: Initialize editor buffer
727 AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
728 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
729 #ifdef FF_MMI_SAT_ICON
730 /*Check if the SAT command has icon*/
731 if(sat_command->c.sms.info.icon.qual != 0xFF)
732 {
733 /* Copy the icon data to the editor attributes*/
734 data->editor_data.editor_attr.TitleIcon.width = sat_command->c.sms.info.iconInfo.width;
735 data->editor_data.editor_attr.TitleIcon.height = sat_command->c.sms.info.iconInfo.height;
736
737 icon_length = sat_command->c.sms.info.iconInfo.width * sat_command->c.sms.info.iconInfo.height;
738
739 data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
740
741 memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.sms.info.iconInfo.dst, icon_length);
742 data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
743
744 /* Icon is self-explanatory. No need to display text for this case.*/
745 if(sat_command->c.sms.info.icon.qual == 0x00)
746 {
747 /* Icon is self-explanatory. Do not display the text*/
748 data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
749 }
750
751 /* Free the memory of icon data that we got through the SATK command*/
752 mfwFree((U8 *)sat_command->c.sms.info.iconInfo.dst, icon_length);
753 sat_command->c.sms.info.iconInfo.dst = NULL;
754
755 }
756 #endif
757
758 data->info_win = AUI_edit_Start(win, &data->editor_data);
759 #else /* NEW_EDITOR */
760 data->editor_data.LeftSoftKey = TxtNull;
761 data->editor_data.AlternateLeftSoftKey = TxtNull;
762 data->editor_data.RightSoftKey = TxtNull;
763 data->editor_data.hide = FALSE;
764 data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
765 data->editor_data.timeout = FOREVER;
766 data->editor_data.Identifier = event;
767 data->editor_data.destroyEditor = TRUE;
768 data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
769 data->editor_data.TextString = (char *)TextString;
770 data->editor_data.min_enter = 0;
771 data->info_win = editor_start(win, &data->editor_data);
772 #endif /* NEW_EDITOR */
773 }
774 break;
775
776 case SAT_SEND_SS:
777 TRACE_EVENT("SAT_SEND_SS");
778 /*
779 * --> display alpha identifier if available
780 */
781 if ((sat_command->c.ss.info.len NEQ 0) &&
782 (sat_command->c.ss.info.len NEQ (U8)-1))
783 {
784 char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.ss.info);
785
786
787 /*
788 * Setup an editor to display a string
789 */
790 /* SPR#1428 - SH - New Editor changes */
791 #ifdef NEW_EDITOR
792 AUI_edit_SetDefault(&data->editor_data);
793 AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
794 AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
795 AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
796 // Dec 23, 2005 REF: OMAPS00062166 x0039928
797 // Fix: Initialize the editor buffer
798 AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
799
800 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
801 #ifdef FF_MMI_SAT_ICON
802 /*Check if the SAT command has icon*/
803 if(sat_command->c.ss.info.icon.qual != 0xFF)
804 {
805 /* Copy the icon data to the editor attributes*/
806 data->editor_data.editor_attr.TitleIcon.width = sat_command->c.ss.info.iconInfo.width;
807 data->editor_data.editor_attr.TitleIcon.height = sat_command->c.ss.info.iconInfo.height;
808
809 icon_length = sat_command->c.ss.info.iconInfo.width * sat_command->c.ss.info.iconInfo.height;
810
811 data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
812
813 memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.ss.info.iconInfo.dst, icon_length);
814 data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
815
816 /* Icon is self-explanatory. No need to display text for this case.*/
817 if(sat_command->c.ss.info.icon.qual == 0x00)
818 {
819 /* Icon is self-explanatory. Do not display the text*/
820 data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
821 }
822
823 /* Free the memory of icon data that we got through the SATK command*/
824 mfwFree((U8 *)sat_command->c.ss.info.iconInfo.dst, icon_length);
825 sat_command->c.ss.info.iconInfo.dst = NULL;
826
827 }
828 #endif
829
830 data->info_win = AUI_edit_Start(win, &data->editor_data);
831
832 #else /* NEW_EDITOR */
833 data->editor_data.LeftSoftKey = TxtNull;
834 data->editor_data.AlternateLeftSoftKey = TxtNull;
835 data->editor_data.RightSoftKey = TxtNull;
836 data->editor_data.hide = FALSE;
837 data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
838 data->editor_data.timeout = FOREVER;
839 data->editor_data.Identifier = event;
840 data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
841 data->editor_data.destroyEditor = TRUE;
842 data->editor_data.TextString = TextString;
843
844 data->editor_data.min_enter = 0;
845 data->info_win = editor_start(win, &data->editor_data);
846 #endif /* NEW_EDITOR */
847 }
848 break;
849 // end c001 xas
850
851
852 case SAT_SEND_DTMF:
853 TRACE_EVENT("SAT_SEND_DTMF");
854 /*
855 * --> display alpha identifier if available
856 */
857 if ((sat_command->c.cmd.info.len NEQ 0) &&
858 (sat_command->c.cmd.info.len NEQ (U8)-1))
859 {
860 char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.cmd.info);
861
862
863 /*
864 * Setup an editor to display a string
865 */
866 /* SPR#1428 - SH - New Editor changes */
867 #ifdef NEW_EDITOR
868 AUI_edit_SetDefault(&data->editor_data);
869 AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
870 AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
871 AUI_edit_SetEvents(&data->editor_data, event, TRUE, THREE_SECS, (T_AUI_EDIT_CB)sat_info_cb);
872 // Dec 23, 2005 REF: OMAPS00062166 x0039928
873 // Fix: Initialize the editor buffer
874 AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
875
876 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
877 #ifdef FF_MMI_SAT_ICON
878 /*Check if the SAT command has icon*/
879 if(sat_command->c.cmd.info.icon.qual != 0xFF)
880 {
881 /* Copy the icon data to the editor attributes*/
882 data->editor_data.editor_attr.TitleIcon.width = sat_command->c.cmd.info.iconInfo.width;
883 data->editor_data.editor_attr.TitleIcon.height = sat_command->c.cmd.info.iconInfo.height;
884
885 icon_length = sat_command->c.cmd.info.iconInfo.width * sat_command->c.cmd.info.iconInfo.height;
886
887 data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
888
889 memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.cmd.info.iconInfo.dst, icon_length);
890 data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
891
892 /* Icon is self-explanatory. No need to display text for this case.*/
893 if(sat_command->c.cmd.info.icon.qual == 0x00)
894 {
895 /* Icon is self-explanatory. Do not display the text*/
896 data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
897 }
898
899 /* Free the memory of icon data that we got through the SATK command*/
900 mfwFree((U8 *)sat_command->c.cmd.info.iconInfo.dst, icon_length);
901 sat_command->c.cmd.info.iconInfo.dst = NULL;
902
903 }
904 #endif
905
906 data->info_win = AUI_edit_Start(win, &data->editor_data);
907
908 #else /* NEW_EDITOR */
909 data->editor_data.LeftSoftKey = TxtNull;
910 data->editor_data.AlternateLeftSoftKey = TxtNull;
911 data->editor_data.RightSoftKey = TxtNull;
912 data->editor_data.hide = FALSE;
913 data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
914 data->editor_data.timeout = THREE_SECS;
915 data->editor_data.Identifier = event;
916 data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
917 data->editor_data.destroyEditor = TRUE;
918 data->editor_data.TextString = TextString;
919
920 data->editor_data.min_enter = 0;
921 data->info_win = editor_start(win, &data->editor_data);
922 #endif /* NEW_EDITOR */
923 }
924 break;
925 case SAT_SETUP_CALL:
926 TRACE_EVENT("SAT_SETUP_CALL");
927
928 TRACE_EVENT_P2("Redial durUnit %d durValue %d",
929 sat_command->c.call.durUnit,sat_command->c.call.durValue);
930 data->sat_command = sat_command;
931
932 /* create parameter space for call, or reuse old */
933 if (data->call_setup_parameter EQ NULL)
934 {
935 data->call_setup_parameter =
936 (T_SAT_call_setup_parameter *)ALLOC_MEMORY (sizeof(T_SAT_call_setup_parameter));
937 }
938
939 /* SPR#1784 - DS - If command qualifier is set to 'with redial' (01, 03 or 05) set a global redial flag */
940 if ( (sat_command->qual & 0x01) == TRUE )
941 {
942 if (sat_command->qual > 0x05)
943 {
944 TRACE_EVENT("Invalid call command qualifier!");
945 }
946 else
947 {
948 set_sat_redial_flag(1);
949 }
950 }
951
952
953 /* gather the name of the called party (if any) */
954 if ((sat_command->c.call.info.len NEQ 0) &&
955 (sat_command->c.call.info.len NEQ (U8)-1))
956 {
957 TRACE_EVENT("call.info contains data.");
958 data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
959 //x0035544 Feb 07, 2006 DR:OMAPS00061467
960 //copy the icon data for the first alpha identifier
961 #ifdef FF_MMI_SAT_ICON
962 if (sat_command->c.call.info.icon.qual != 0xFF)
963 {
964 data->call_setup_parameter->IconInfo.width = sat_command->c.call.info.iconInfo.width;
965 data->call_setup_parameter->IconInfo.height= sat_command->c.call.info.iconInfo.height;
966 icon_length = sat_command->c.call.info.iconInfo.width * sat_command->c.call.info.iconInfo.height;
967 if(sat_command->c.call.info.iconInfo.dst != NULL)
968 {
969 data->call_setup_parameter->IconInfo.dst = (char *)ALLOC_MEMORY (icon_length);
970 memcpy(data->call_setup_parameter->IconInfo.dst, sat_command->c.call.info.iconInfo.dst, icon_length);
971 }
972 if(sat_command->c.call.info.icon.qual == 0x00)
973 {
974 /* Icon is self-explanatory. Do not display the text*/
975 data->call_setup_parameter->IconInfo.selfExplanatory = TRUE;
976
977 }
978 else
979 data->call_setup_parameter->IconInfo.selfExplanatory = FALSE;
980
981 /* Free the memory of icon data that we got through the SATK command*/
982 if(sat_command->c.call.info.iconInfo.dst != NULL)
983 {
984 mfwFree((U8 *)sat_command->c.call.info.iconInfo.dst, icon_length);
985 sat_command->c.call.info.iconInfo.dst = NULL;
986 }
987 }
988 else
989 {
990 data->call_setup_parameter->IconInfo.dst = NULL;
991 data->call_setup_parameter->IconInfo.width = 0;
992 data->call_setup_parameter->IconInfo.height = 0;
993 data->call_setup_parameter->IconInfo.selfExplanatory = FALSE;
994 }
995
996 #endif
997 }
998 else
999 {
1000 /* provide an empty string; NULL would crash in info_dialog() */
1001 TRACE_EVENT("call.info contains no data!");
1002 sat_command->c.call.info.len = 0;
1003
1004 /* SPR#1700 - DS - Set string to NULL */
1005 data->call_setup_parameter->TextString = NULL;
1006
1007 /* SPR#1700 - DS - Commented out code below. Checks in call() in mmiCall.c ensure
1008 * a NULL string is not sent to info_dialog
1009 */
1010 #if 0
1011 data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
1012 #endif /* 0 */
1013 }
1014
1015 /* SPR#1700 - DS - Save info2 (if available). This should be used for the "calling" dialog.
1016 * If not available, info (above) can be used.
1017 */
1018
1019 /* gather the name of the called party (if any) */
1020 if ((sat_command->c.call.info2.len NEQ 0) &&
1021 (sat_command->c.call.info2.len NEQ (U8)-1))
1022 {
1023 TRACE_EVENT("call.info2 contains data.");
1024 data->call_setup_parameter->TextString2 = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info2);
1025 //x0035544 Feb 07, 2006 DR:OMAPS00061467
1026 //copy the icon data for the second alpha identifier
1027 #ifdef FF_MMI_SAT_ICON
1028 if (sat_command->c.call.info2.icon.qual != 0xFF)
1029 {
1030 data->call_setup_parameter->IconInfo2.width= sat_command->c.call.info2.iconInfo.width;
1031 data->call_setup_parameter->IconInfo2.height = sat_command->c.call.info2.iconInfo.height;
1032 data->call_setup_parameter->IconInfo2.dst = data->call_setup_parameter->IconInfo.dst;
1033 if(sat_command->c.call.info2.icon.qual == 0x00)
1034 {
1035 // Icon is self-explanatory. Do not display the text
1036 data->call_setup_parameter->IconInfo2.selfExplanatory = TRUE;
1037 }
1038 else
1039 data->call_setup_parameter->IconInfo2.selfExplanatory = FALSE;
1040 }
1041 else
1042 {
1043 data->call_setup_parameter->IconInfo2.dst = NULL;
1044 data->call_setup_parameter->IconInfo2.width = 0;
1045 data->call_setup_parameter->IconInfo2.height = 0;
1046 data->call_setup_parameter->IconInfo2.selfExplanatory = FALSE;
1047 }
1048
1049 #endif
1050 #ifdef NO_ASCIIZ/*MC SPR 940/2 Add tag to Unicode strings so info dialogue displays them correctly*/
1051 sat_add_unicode_tag_if_needed(data->call_setup_parameter->TextString2);
1052 #endif
1053 }
1054 else
1055 {
1056 /* provide an empty string; NULL would crash in info_dialog() */
1057 TRACE_EVENT("call.info2 contains no data!");
1058 sat_command->c.call.info2.len = 0;
1059
1060 /* SPR#1700 - DS - Set string to NULL */
1061 data->call_setup_parameter->TextString2 = NULL;
1062
1063 /* SPR#1700 - DS - Commented out code below. Checks in call() in mmiCall.c ensure
1064 * a NULL string is not sent to info_dialog
1065 */
1066 #if 0
1067 data->call_setup_parameter->TextString2 = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info2);
1068 #ifdef NO_ASCIIZ/*MC SPR 940/2 Add tag to Unicode strings so info dialogue displays them correctly*/
1069 sat_add_unicode_tag_if_needed(data->call_setup_parameter->TextString2);
1070 #endif
1071 #endif /* 0 */
1072 }
1073 break;
1074
1075 case SAT_CALL_RESULT:
1076 if (data->call_setup_parameter EQ NULL)
1077 {
1078 /* we are NOT in a SETUP CALL session;this is a "normal" Call Result */
1079 TRACE_EVENT("SAT_CALL_RESULT a");
1080 /*
1081 * --> display alpha identifier if available
1082 */
1083
1084 TRACE_EVENT_P1("Redial Time %d",sat_command->c.ccres.redialTime);
1085
1086 if ((sat_command->c.ccres.info.len NEQ 0) &&
1087 (sat_command->c.ccres.info.len NEQ (U8)-1))
1088 {
1089 char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.ccres.info);
1090
1091
1092 /*
1093 * Setup an editor to display a string
1094 */
1095 /* SPR#1428 - SH - New Editor changes */
1096 #ifdef NEW_EDITOR
1097 AUI_edit_SetDefault(&data->editor_data);
1098 AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
1099 AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
1100 AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
1101
1102 data->info_win = AUI_edit_Start(win, &data->editor_data);
1103 #else /* NEW_EDITOR */
1104 SmsSend_loadEditDefault(&data->editor_data);
1105 data->editor_data.LeftSoftKey = TxtNull;
1106 data->editor_data.AlternateLeftSoftKey = TxtNull;
1107 data->editor_data.RightSoftKey = TxtNull;
1108 data->editor_data.hide = FALSE;
1109 data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
1110 data->editor_data.timeout = FOREVER;
1111 data->editor_data.Identifier = event;
1112 data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
1113 data->editor_data.destroyEditor = TRUE;
1114 data->editor_data.TextId = TxtNull;
1115 data->editor_data.TextString = TextString;
1116 data->editor_data.min_enter = 0;
1117 data->info_win = editor_start(win, &data->editor_data);
1118 #endif /* NEW_EDITOR */
1119
1120 }
1121 }
1122 else
1123 {
1124 /* we are in a SETUP CALL session;this is a SATN return */
1125 U8 general_result;
1126 U8 additional_info;
1127
1128 TRACE_EVENT("SAT_CALL_RESULT b");
1129
1130 /* process result of a call setup */
1131 general_result = (U8)(sat_command->c.ccres.result); /*SPR#2042 - DS - Changed from .redialTime */
1132 additional_info = (U8)(sat_command->c.ccres.callId);
1133
1134 if (((general_result & (U8)0xF0) EQ (U8)0x00) ||
1135 ((general_result & (U8)0xF0) EQ (U8)0x10))
1136 {
1137 /* command has been performed */
1138 /*
1139 * destroying the display of SETUP MENU will focus the idle screen (in order to show the incall info)
1140 * furthermore it's necessary to keep track of the used resources
1141 */
1142 #if 0 /* CQ16437 : Do not need to exit menu in order to handle the call correctly */
1143 TRACE_EVENT("destroy SETUP menu");
1144 SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL);
1145 #endif
1146 return;
1147 }
1148 else if ((general_result & (U8)0xF0) EQ (U8)0x20)
1149 {
1150 /* command failed: may be worth to retry */
1151 switch (general_result)
1152 {
1153 case 0x20: /* ME currently unable to process command */
1154 TRACE_EVENT("SAT: ME unable");
1155 break;
1156 case 0x21: /* NW currently unable to process command */
1157 TRACE_EVENT("SAT: NW unable");
1158 #ifdef FF_2TO1_PS
1159 if ((additional_info EQ (U8)CAUSE_NWCC_USER_BUSY) &&
1160 #else
1161 if ((additional_info EQ (U8)CAUSE_USER_BUSY) &&
1162 #endif
1163 (data->call_setup_parameter NEQ NULL))
1164 {
1165 SEND_EVENT (sat_get_call_setup_win(), SAT_CALL_REDIAL, 0, data->call_setup_parameter); /* redial */
1166 return; /* do NOT release the call setup parameter */
1167 }
1168 break;
1169 case 0x22: /* user rejected call setup */
1170 TRACE_EVENT("user rejected call setup");
1171 case 0x23: /* user cleared down call */
1172 TRACE_EVENT("user cleared down call");
1173 default:
1174 TRACE_EVENT("default reason");
1175 break;
1176 }
1177 }
1178 else if ((general_result & (U8)0xF0) EQ (U8)0x30)
1179 {
1180 /* command failed: not worth to retry with identical command */
1181 TRACE_EVENT("SAT_CALL_RESULT permanent problem");
1182 /* await SAT_SESSION_END in order to react */
1183 }
1184 else
1185 {
1186 TRACE_EVENT("SAT_CALL_RESULT unexp. result code");
1187 }
1188 SEND_EVENT (win, SAT_CALL_END, 0, NULL); /* release the call setup parameter */
1189 }
1190 break;
1191
1192 case SAT_CALL_ALERT:
1193 TRACE_EVENT("SAT_CALL_ALERT");
1194 if (data->call_setup_parameter EQ NULL)
1195 {
1196 /* in case we are called withoud previous CALL_SETUP (which shouldn't happen!) */
1197 data->call_setup_parameter =
1198 (T_SAT_call_setup_parameter *)ALLOC_MEMORY (sizeof(T_SAT_call_setup_parameter));
1199
1200 /* provide an empty string; NULL would crash in info_dialog() */
1201 sat_command->c.ccres.info.len = 0;
1202 data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.ccres.info);
1203
1204 }
1205
1206 /* gather callId and redialTime */
1207 data->call_setup_parameter->callId = sat_command->c.ccres.callId;
1208 data->call_setup_parameter->redialTime = sat_command->c.ccres.redialTime;
1209
1210 /* start a dialog to accept or reject the call */
1211 sat_win = sat_call_setup_create(data->win);
1212 if (sat_win)
1213 {
1214 data->sat_command = sat_command;
1215 SEND_EVENT (sat_win, event,0,data->call_setup_parameter);
1216 }
1217 else
1218 {
1219 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1220 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1221 sat_done (sat_command, sat_res);
1222 }
1223 break;
1224
1225 case SAT_SESSION_END:
1226 ETRACE(sprintf(buf, "SAT_SESSION_END %d", data->active_sat_session));
1227 data->active_sat_session = (T_SAT_EVENTS)event;
1228
1229 if (data->info_win NEQ NULL)
1230 {
1231 /* destroy any infoscreen */
1232 /* SPR#1428 - SH - New Editor changes */
1233 #ifdef NEW_EDITOR
1234 SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
1235 #else /* NEW_EDITOR */
1236 SEND_EVENT (data->info_win, E_EDITOR_DEINIT, 0, NULL);
1237 #endif /* NEW_EDITOR */
1238 data->info_win = NULL;
1239 }
1240
1241
1242 /*
1243 * Marcus: Issue 1057: 21/01/2003: Made SEND_EVENT conditional on
1244 * call_SATCall being FALSE.
1245 */
1246 if (call_SATCall == FALSE)
1247 {
1248 /* Marcus: Issue 1812: 13/03/2003: Start */
1249 if (sat_call_active)
1250 {
1251 sat_call_active = FALSE;
1252 SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL);
1253 }
1254 else
1255 {
1256 SEND_EVENT (sat_get_setup_menu_win(), SAT_RETURN, 0, NULL); /* recreate the SETUP MENU */
1257 }
1258 /* Marcus: Issue 1812: 13/03/2003: End */
1259 }
1260 break;
1261
1262 case SAT_CALL_END:
1263 TRACE_EVENT("SAT_CALL_END");
1264 if (data->call_setup_parameter NEQ NULL)
1265 {
1266 /* release the call setup parameters */
1267 sat_destroy_TEXT_ASCIIZ(data->call_setup_parameter->TextString);
1268
1269 //x0035544 Feb 07, 2006 DR:OMAPS00061467 ARUNKS
1270 //Release the icon data.
1271 #ifdef FF_MMI_SAT_ICON
1272 if (data->call_setup_parameter->IconInfo.dst != NULL)
1273 {
1274 FREE_MEMORY((U8 *)data->call_setup_parameter->IconInfo.dst, data->call_setup_parameter->IconInfo.width *
1275 data->call_setup_parameter->IconInfo.height);
1276 data->call_setup_parameter->IconInfo.dst = NULL;
1277 }
1278
1279 #endif
1280 FREE_MEMORY ((U8 *)data->call_setup_parameter, sizeof (T_SAT_call_setup_parameter));
1281 data->call_setup_parameter = NULL;
1282
1283 SEND_EVENT (sat_get_call_setup_win(), event, 0, NULL); /* destroy the window */
1284
1285
1286 }
1287
1288 /* SPR#1784 - DS - Destroy any information screen.
1289 */
1290 if (data->info_win NEQ NULL)
1291 {
1292 TRACE_EVENT("Destroy the info screen");
1293
1294 /* destroy any infoscreen */
1295 #ifdef NEW_EDITOR
1296 SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
1297 #else /* NEW_EDITOR */
1298 SEND_EVENT (data->info_win, E_EDITOR_DEINIT, 0, NULL);
1299 #endif /* NEW_EDITOR */
1300 data->info_win = NULL;
1301 }
1302
1303 break;
1304
1305 case SAT_UNKNOWN:
1306 TRACE_EVENT("SAT_UNKNOWN");
1307 /*
1308 * unknown SAT commands are rejected
1309 */
1310 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1311 sat_res[SAT_AI_INDEX] = SatResAiNoService;
1312 sat_done (sat_command, sat_res);
1313 break;
1314
1315 case SAT_REFRESH:
1316 TRACE_EVENT("SAT_REFRESH");
1317 #ifdef MMI_HOMEZONE_ENABLED
1318 {
1319 int i;
1320 for (i=0;i<sat_command->c.refFiles.files_nr;i++)
1321 {
1322 switch(sat_command->c.refFiles.files[i])
1323 {
1324 case HZ_SIM_PARAMETERS:
1325 case HZ_SIM_CELL_CACHE:
1326 case HZ_SIM_CELL_CACHE+1:
1327 case HZ_SIM_CELL_CACHE+2:
1328 case HZ_SIM_CELL_CACHE+3:
1329 /* Read new sim fields into memory. SPR877 - SH - Parameter specifies that SIM fields
1330 * should be read in, even if they were already read at startup. */
1331 homezoneReadSim(HZ_READ_SIM_AGAIN);
1332 return;
1333 default:
1334 break;
1335 }
1336 }
1337 }
1338 #endif
1339 break;
1340
1341 case SAT_SET_EVENTS:
1342 break;
1343 case SAT_IDLE_TEXT:
1344 {
1345 SatTxt *inText;
1346 char *txtBuf;
1347 UBYTE outDCS;
1348
1349 inText = &sat_command->c.text;
1350
1351 if (inText->len == 0)
1352 {
1353 // 09-Dec-2005, Shashi Shekar B.S., a0876501, START
1354 #ifdef FF_MMI_SAT_ICON
1355 addSatMessage(NULL, 0, 0, NULL, FALSE, SAT_ICON_IDLEMODE_TEXT);
1356 /* Free the memory of icon data that we got through the SATK command*/
1357 if(sat_command->c.text.iconInfo.dst != NULL)
1358 {
1359 mfwFree((U8 *)sat_command->c.text.iconInfo.dst, sat_command->c.text.iconInfo.width *
1360 sat_command->c.text.iconInfo.height);
1361 sat_command->c.text.iconInfo.dst = NULL;
1362 }
1363
1364 #else
1365 addSatMessage(NULL);
1366 #endif
1367
1368
1369 sat_res[SAT_ERR_INDEX] = SatResUnknownData;
1370 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1371 sat_done(sat_command, sat_res);
1372 }
1373 else
1374 {
1375 txtBuf = (char *)ALLOC_MEMORY(MAX_CBMSG_LEN);
1376
1377 if (!txtBuf)
1378 {
1379 sat_res[SAT_ERR_INDEX] = SatResImpossible;
1380 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1381 sat_done(sat_command, sat_res);
1382 }
1383 else
1384 {
1385 memset(txtBuf, 0x00, MAX_CBMSG_LEN);
1386
1387 /*
1388 ** What is the required format for the output text? UCS2 or ASCII?
1389 */
1390 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
1391 outDCS = MFW_DCS_UCS2;
1392 else
1393 outDCS = MFW_ASCII;
1394
1395 TRACE_EVENT_P3("NDH >>> inDcs : %02x, outDCS : %02x, Text Len : %d", inText->code,
1396 outDCS, inText->len);
1397
1398 if ((inText->code == 0x00) || ((inText->code & 0x0c) == 0x00)) // GSM 7-Bit
1399 {
1400 ATB_convert_String((char *)inText + inText->text,
1401 MFW_DCS_7bits, inText->len,
1402 txtBuf,
1403 outDCS, MAX_CBMSG_LEN-1,
1404 TRUE);
1405 }
1406 else if ((inText->code & 0x0c) == 0x04) // ASCII 8-Bit
1407 {
1408 if (outDCS == MFW_ASCII)
1409 {
1410 if (inText->len > MAX_CBMSG_LEN-1)
1411 {
1412 //CQ - 19656 Sandip Start
1413 //For Input DCS 0x00, we are handling long strings , so also for input DCS 0x04 we should handle long strings
1414 #if 0
1415 /*
1416 ** Display Text too long ... Send failure TR to SIM
1417 */
1418 sat_res[SAT_ERR_INDEX] = SatResImpossible;
1419 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1420 sat_done(sat_command, sat_res);
1421
1422 FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
1423 return;
1424 #endif
1425 //CQ - 19656 Sandip
1426 ATB_convert_String((char *)inText + inText->text,
1427 MFW_DCS_8bits, inText->len,
1428 txtBuf,
1429 outDCS, MAX_CBMSG_LEN-1,
1430 TRUE);
1431 //CQ - 19656 Sandip End
1432 }
1433 else
1434 {
1435 //MMI_FIX-19656 Using 8 bit table for dispay start
1436 ATB_convert_String((char *)inText + inText->text,
1437 MFW_DCS_8bits, inText->len,
1438 txtBuf,
1439 outDCS, MAX_CBMSG_LEN-1,
1440 TRUE);
1441 //MMI_FIX-19656 Using 8 bit table for dispay end
1442 //memcpy(txtBuf, (char *)inText + inText->text, inText->len);
1443 }
1444 }
1445 else
1446 {
1447 ATB_convert_String((char *)inText + inText->text,
1448 MFW_DCS_8bits, inText->len,
1449 txtBuf,
1450 outDCS, MAX_CBMSG_LEN-1,
1451 TRUE);
1452 }
1453 }
1454 else // UCS2
1455 {
1456 if (outDCS == MFW_DCS_UCS2)
1457 {
1458 if (inText->len > MAX_CBMSG_LEN-1)
1459 {
1460 /*
1461 ** Display Text too long ... Send failure TR to SIM
1462 */
1463 sat_res[SAT_ERR_INDEX] = SatResImpossible;
1464 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1465 sat_done(sat_command, sat_res);
1466
1467 FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
1468 return;
1469 }
1470 else
1471 {
1472 memcpy(txtBuf, (char *)inText + inText->text, inText->len);
1473 }
1474 }
1475 else
1476 {
1477 ATB_convert_String((char *)inText + inText->text,
1478 MFW_DCS_UCS2, inText->len,
1479 txtBuf,
1480 outDCS, MAX_CBMSG_LEN-1,
1481 TRUE);
1482 }
1483 }
1484
1485 TRACE_EVENT_P1("NDH >>> txtBuf is : %s", txtBuf);
1486
1487 // 09-Dec-2005, Shashi Shekar B.S., a0876501, START
1488 #ifdef FF_MMI_SAT_ICON
1489 /*Check if the SAT command has icon*/
1490 if(sat_command->c.text.icon.qual != 0xFF)
1491 {
1492 /* Icon is self-explanatory. No need to display text for this case.*/
1493 if(sat_command->c.text.icon.qual == 0x00)
1494 {
1495 /* Icon is self-explanatory. Do not display the text.
1496 Send a TRUE to the Idle window. */
1497 addSatMessage(txtBuf, sat_command->c.text.iconInfo.width, sat_command->c.text.iconInfo.height,
1498 (char *)sat_command->c.text.iconInfo.dst, TRUE, SAT_ICON_IDLEMODE_TEXT);
1499 }
1500 else
1501 addSatMessage(txtBuf, sat_command->c.text.iconInfo.width, sat_command->c.text.iconInfo.height,
1502 (char *)sat_command->c.text.iconInfo.dst, FALSE, SAT_ICON_IDLEMODE_TEXT);
1503 }
1504 else
1505 {
1506 addSatMessage(txtBuf, 0, 0, NULL, FALSE, SAT_ICON_NONE);
1507 }
1508
1509 #else
1510 addSatMessage(txtBuf);
1511 #endif
1512
1513 sat_res[SAT_ERR_INDEX] = SatResSuccess;
1514 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1515 sat_done(sat_command, sat_res);
1516 // 09-Dec-2005, Shashi Shekar B.S., a0876501, START
1517 #ifdef FF_MMI_SAT_ICON
1518 /* Free the memory of icon data that we got through the SATK command*/
1519 if(sat_command->c.text.iconInfo.dst != NULL)
1520 {
1521 mfwFree((U8 *)sat_command->c.text.iconInfo.dst, sat_command->c.text.iconInfo.width *
1522 sat_command->c.text.iconInfo.height);
1523 sat_command->c.text.iconInfo.dst = NULL;
1524 }
1525 #endif
1526
1527 FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
1528 }
1529 }
1530 }
1531 break;
1532
1533 #ifdef FF_WAP
1534 case SAT_LAUNCH_BROWSER:
1535
1536 break;
1537 #endif
1538 case SAT_OPEN_CHANNEL:
1539 TRACE_EVENT("SAT_OPEN_CHANNEL");
1540
1541 /*
1542 * Create and initiate Open Channel Window
1543 */
1544 sat_win = sat_class_e_create (data->win);
1545
1546 if (sat_win)
1547 {
1548 data->sat_command = sat_command;
1549 SEND_EVENT (sat_win, event, 0, data->sat_command);
1550 }
1551 else
1552 {
1553 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1554 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1555 sat_done (sat_command, sat_res);
1556 }
1557 break;
1558 case SAT_CLOSE_CHANNEL:
1559 TRACE_EVENT("SAT_CLOSE_CHANNEL");
1560
1561 /*
1562 * Create and initiate Close Channel window
1563 */
1564 sat_win = sat_class_e_create (data->win);
1565
1566 if (sat_win)
1567 {
1568 data->sat_command = sat_command;
1569 SEND_EVENT (sat_win, event, 0, data->sat_command);
1570 }
1571 else
1572 {
1573 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1574 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1575 sat_done (sat_command, sat_res);
1576 }
1577 break;
1578 case SAT_SEND_DATA:
1579 TRACE_EVENT("SAT_SEND_DATA");
1580
1581 /*
1582 * Create and initiate Send Data window
1583 */
1584 sat_win = sat_class_e_create (data->win);
1585
1586 if (sat_win)
1587 {
1588 data->sat_command = sat_command;
1589 SEND_EVENT (sat_win, event, 0, data->sat_command);
1590 }
1591 else
1592 {
1593 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1594 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1595 sat_done (sat_command, sat_res);
1596 }
1597 break;
1598 case SAT_RECEIVE_DATA:
1599
1600 TRACE_EVENT("SAT_RECEIVE_DATA");
1601
1602 /*
1603 * Create and initiate Receive Data window
1604 */
1605 sat_win = sat_class_e_create (data->win);
1606
1607 if (sat_win)
1608 {
1609 data->sat_command = sat_command;
1610 SEND_EVENT (sat_win, event, 0, data->sat_command);
1611 }
1612 else
1613 {
1614 sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
1615 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1616 sat_done (sat_command, sat_res);
1617 }
1618 break;
1619 default:
1620 TRACE_EVENT("sim_toolkit_exec() unexp. event");
1621 break;
1622 }
1623 }
1624 /*******************************************************************************
1625
1626 $Function: sim_toolkit_sat_cb
1627
1628 $Description: Callback function for SAT handler of top window
1629
1630 $Returns: none.
1631
1632 $Arguments:
1633
1634 *******************************************************************************/
1635 static int sim_toolkit_sat_cb ( T_MFW_EVENT event, T_MFW_SAT * sat_bits)
1636 {
1637 USHORT sat_event = 0; // RAVI
1638
1639 TRACE_EVENT("sim_toolkit_sat_cb");
1640 /*
1641 * check whether a decoded message is available
1642 */
1643 if ((sat_bits EQ NULL) || (g_sim_toolkit_data->win EQ NULL))
1644 {
1645 TRACE_EVENT("sim_toolkit_sat_cb() unexp. event");
1646 return MFW_EVENT_CONSUMED;
1647 }
1648
1649 /* convert the flag into an event */
1650 if (event == MfwSatSessionEnd)
1651 {
1652 sat_event = SAT_SESSION_END;
1653 }
1654 else
1655 {
1656 switch (event)
1657 {
1658 case MfwSatTextOut: /* display string */
1659 sat_event = SAT_DISPLAY_TEXT;
1660 break;
1661 case MfwSatGetKey: /* get user keystroke */
1662 sat_event = SAT_GET_KEY;
1663 break;
1664 case MfwSatGetString: /* get user input */
1665 sat_event = SAT_GET_STRING;
1666 break;
1667 case MfwSatPlayTone: /* play audio tone */
1668 sat_event = SAT_PLAY_TONE;
1669 break;
1670 case MfwSatSetupMenu: /* setup toolkit menu */
1671 sat_event = SAT_SETUP_MENU;
1672 break;
1673 case MfwSatSelectItem: /* select menu item */
1674 sat_event = SAT_SELECT_ITEM;
1675 break;
1676 case MfwSatSendSMS: /* send short message */
1677 sat_event = SAT_SEND_SMS;
1678 break;
1679 case MfwSatSendUSSD:
1680 case MfwSatSendSS: /* send service command */
1681 sat_event = SAT_SEND_SS;
1682 break;
1683 case MfwSatSendDTMF: /* send service command */
1684 sat_event = SAT_SEND_DTMF;
1685 break;
1686 case MfwSatCall: /* setup a call */
1687 sat_event = SAT_SETUP_CALL;
1688 break;
1689 case MfwSatCcRes: /* call control result */
1690 sat_event = SAT_CALL_RESULT;
1691 break;
1692 case MfwSatCcAlert: /* call control alerting */
1693 sat_event = SAT_CALL_ALERT;
1694 break;
1695 case MfwSatRefresh: /* refresh SIM fields */
1696 sat_event = SAT_REFRESH;
1697 break;
1698 case MfwSatSetEvents: /* Sat Set Events updated */
1699 sat_event = SAT_SET_EVENTS;
1700 break;
1701 case MfwSatIdleText: /* Sat Set Events updated */
1702 sat_event = SAT_IDLE_TEXT;
1703 break;
1704 case MfwSatDataRefreshed: /* Data refreshed */
1705 TRACE_EVENT("MfwSatDataRefreshed event sent");
1706 break;
1707 case MfwSatOpenChannel: /* Open channel */
1708 sat_event = SAT_OPEN_CHANNEL;
1709 break;
1710 case MfwSatCloseChannel: /* Close channel */
1711 sat_event = SAT_CLOSE_CHANNEL;
1712 break;
1713 case MfwSatSendData: /* Send data */
1714 sat_event = SAT_SEND_DATA;
1715 break;
1716 case MfwSatReceiveData: /* Receive data */
1717 sat_event = SAT_RECEIVE_DATA;
1718 break;
1719 #ifdef FF_WAP /*Disable for testing without WAP*/
1720 case MfwSatLaunchBrowser:
1721 TRACE_EVENT("SAT_LAUNCH_BROWSER got to MMI");
1722 #ifdef MMI_TEST_SAT_LAUNCH_BROWSER
1723 {
1724 #define LENGTH_URL 40
1725 T_SAT_RES sat_res;
1726 SatLaunchBrowser laun_brow;
1727 char prov_url[LENGTH_URL];
1728 short pos = 0;
1729 int i;
1730
1731 sat_res[SAT_ERR_INDEX] = SAT_RES_SUCCESS;
1732 sat_res[SAT_AI_INDEX] = SatResAiNoCause;
1733 sat_done (sat_bits->cmd, sat_res);
1734 sat_event = SAT_LAUNCH_BROWSER;
1735 laun_brow = sat_bits->cmd->c.browser;
1736 memset(information,'\0',INFORMATION_SIZE);
1737 TRACE_EVENT_P1("Browser identity -> %d",laun_brow.identity);
1738 memcpy(&prov_url,laun_brow.url,LENGTH_URL);
1739 prov_url[LENGTH_URL-1] = '\0';
1740 TRACE_EVENT_P1("Browser url -> %s",prov_url);
1741 pos += sprintf(information+pos,
1742 "BROWSER\n-Identity=%d\n-Url=%s\n-Bearers(%d)=",
1743 laun_brow.identity,
1744 prov_url,
1745 laun_brow.n_bearer);
1746 for (i=0;i<5;i++)
1747 pos+=sprintf(information+pos," %d",*laun_brow.bearer++);
1748 mmiOpenDummyBrowser(g_sim_toolkit_data->win,information);
1749 }
1750 break;
1751 #endif /*FF_WAP*/
1752 #endif /* MMI_TEST_SAT_LAUNCH_BROWSER */
1753 case MfwSatErrBusy:
1754 TRACE_EVENT("MfwSatError reached BMI");
1755 {
1756 T_DISPLAY_DATA display_info;
1757
1758 /* SPR#2321 - DS - Display "SAT Busy" dialog */
1759
1760 dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "SAT Busy", "Reset App" , COLOUR_STATUS);
1761 dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_RIGHT | KEY_LEFT );
1762 info_dialog (g_sim_toolkit_data->win, &display_info);
1763 }
1764
1765 /* No SEND_EVENT */
1766
1767 return MFW_EVENT_CONSUMED;
1768 // break; // RAVI
1769 default:
1770 sat_event = SAT_UNKNOWN;
1771 break;
1772 }
1773 }
1774 SEND_EVENT (g_sim_toolkit_data->win, sat_event, 0, sat_bits->cmd);
1775 return MFW_EVENT_CONSUMED;
1776 }
1777
1778 /*******************************************************************************
1779
1780 $Function: sat_setup_menu_proc
1781
1782 $Description: process SAT_SETUP_MENU event
1783
1784 $Returns: none.
1785
1786 $Arguments:
1787
1788 *******************************************************************************/
1789 static void sat_setup_menu_proc(T_SAT_CMD * sat_command)
1790 {
1791 TRACE_FUNCTION("sat_setup_menu_proc");
1792
1793 if (sat_command->c.menu.items[0].len EQ 0)
1794 {
1795 /*
1796 * "Item data object for item 1" is a null data object:
1797 * hide the SIM toolkit menu item in the main menu
1798 */
1799 menuDisableSimMenu();
1800 g_sim_toolkit_data->sat_available_on_SIM = FALSE;
1801 //release the labe of the mainmenu
1802 //GW-SPR#1035 Free memory using sat_destroy_TEXT_ASCIIZ (as it is allocated using corresponding procedure)
1803 if (sat_mainmenu_label NEQ NULL)
1804 {
1805 sat_destroy_TEXT_ASCIIZ (sat_mainmenu_label);
1806 sat_mainmenu_label = NULL;
1807 }
1808
1809 if (sat_get_setup_menu_win() NEQ NULL)
1810 {
1811 /* there's an active SETUP MENU */
1812 SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL); /* SETUP_MENU shall selfdestroy */
1813 }
1814 if (g_sim_toolkit_data->sat_setup_menu_command NEQ NULL)
1815 {
1816 FREE_MEMORY ((U8 *)(g_sim_toolkit_data->sat_setup_menu_command), sizeof (T_SAT_CMD));
1817 g_sim_toolkit_data->sat_setup_menu_command = NULL;
1818 }
1819 }
1820 else
1821 {
1822 /* install new setup menu */
1823 if (sat_get_setup_menu_win() NEQ NULL)
1824 {
1825 /* there's already an active SETUP MENU */
1826 SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL); /* SETUP_MENU shall selfdestroy */
1827 //xrashmic 16 Feb, 2006 OMAPS00064413
1828 //List win should be set to null, when destroying the setup menu.
1829 sat_set_setup_menu_listmnu_win(NULL);
1830 }
1831
1832 /* store command contents for later use in sat_setup_menu_start() */
1833 if (g_sim_toolkit_data->sat_setup_menu_command EQ NULL)
1834 {
1835 /* if not already allocated, get storage for the SETUP MENU command */
1836 g_sim_toolkit_data->sat_setup_menu_command =
1837 (T_SAT_CMD *)ALLOC_MEMORY (sizeof (T_SAT_CMD));
1838 }
1839 *(g_sim_toolkit_data->sat_setup_menu_command) = *sat_command; /* copy contents */
1840
1841 /*#ifdef CHINESE_MMI*/
1842 /*
1843 The label for the main menu
1844
1845 */
1846 TRACE_EVENT("SAT: Creating main menu label");
1847 {
1848 #ifdef NO_ASCIIZ
1849 /*MC, SPR 940/2if we're in chinese, header may be converted from ASCII to Unicode*/
1850 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
1851 header_len = g_sim_toolkit_data->sat_setup_menu_command->c.menu.header.len *2;
1852 else
1853 #endif
1854 /* taking the label from menu command file and convert to ascii */
1855 header_len = g_sim_toolkit_data->sat_setup_menu_command->c.menu.header.len;
1856
1857
1858 sat_mainmenu_label = sat_create_TEXT_ASCIIZ (&g_sim_toolkit_data->sat_setup_menu_command->c.menu.header);
1859 if(sat_mainmenu_label)
1860 {
1861 sat_mainmenu_label[header_len] = '\0';
1862 /*JVJ #1576 The SimToolkit Title string is set here */
1863 res_set_SIMToolkit_title_string(sat_mainmenu_label);
1864 }
1865 }
1866 /* unhide the SIM toolkit menu item in the main menu */
1867 menuEnableSimMenu
1868 (
1869 "", /* label */
1870 (SimMenuFunc)sat_setup_menu_start, /* callback when menu entered */
1871 g_sim_toolkit_data->sat_setup_menu_command /* parameter to callback */
1872 );
1873 }
1874 sat_set_setup_menu_win(NULL); // avoid notifications to a non-existent window
1875 }
1876
1877
1878 /*******************************************************************************
1879
1880 $Function: sat_win_cb
1881
1882 $Description: Default sat window event handler. Avoid intermediate visibility of lower menus
1883
1884
1885 $Returns: none.
1886
1887 $Arguments:
1888
1889 *******************************************************************************/
1890 int sat_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
1891 {
1892 TRACE_FUNCTION("sat_win_cb");
1893
1894 if (win EQ NULL)
1895 return MFW_EVENT_CONSUMED;
1896
1897 switch (event)
1898 {
1899 case E_WIN_VISIBLE: /* window changed visibility */
1900 if (win->flags & E_WIN_VISIBLE)
1901 {
1902 /* window becomes visible */
1903 dspl_ClearAll(); /* overwrite redraw of lower menus with cleared screen */
1904 dspl_TextOut(0,12,/*DSPL_TXTATTR_NORMAL*/DSPL_TXTATTR_CURRENT_MODE/*MC*/,GET_TEXT(TxtPleaseWait)); /* sbh - so we don't get blank screen */
1905 }
1906 break;
1907 default:
1908 return MFW_EVENT_REJECTED;
1909 }
1910 return MFW_EVENT_CONSUMED;
1911 }
1912
1913 /*******************************************************************************
1914
1915 $Function: sat_kbd_cb
1916
1917 $Description: Default sat window keyboard handler
1918
1919
1920 $Returns: none.
1921
1922 $Arguments:
1923
1924 *******************************************************************************/
1925 int sat_kbd_cb (T_MFW_EVENT event, T_MFW_KBD * key)
1926 {
1927 T_MFW_HND win = mfwParent( mfw_header() );
1928
1929 TRACE_FUNCTION("sat_kbd_cb");
1930
1931 /* make sure we handle null keyboards
1932 */
1933 if ( key == NULL )
1934 return MFW_EVENT_CONSUMED;
1935
1936 /* deal with the incoming key code
1937 */
1938 switch( key->code )
1939 {
1940
1941 /* Destroy the window on either right softkey or hangup keypresses */
1942 case KCD_HUP:
1943 case KCD_RIGHT:
1944 {
1945 SEND_EVENT(win, SAT_DESTROY_WINDOW, 0, 0);
1946 break;
1947 }
1948 }
1949
1950 return MFW_EVENT_CONSUMED;
1951 }
1952
1953
1954 /*******************************************************************************
1955
1956 $Function: sat_info_cb
1957
1958 $Description: Callback function information dialog.
1959
1960 $Returns: none.
1961
1962 $Arguments:
1963
1964 *******************************************************************************/
1965 static void sat_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
1966 {
1967 /* INFO DISPLAY */
1968 T_MFW_WIN * info_win_data = ((T_MFW_HDR *)win)->data;
1969 T_sim_toolkit * info_data = (T_sim_toolkit *)info_win_data->user;
1970
1971 TRACE_FUNCTION("sat_info_cb");
1972
1973 if (win EQ NULL)
1974 return;
1975
1976 /*
1977 * Who has initiated the information screen
1978 */
1979 switch (identifier)
1980 {
1981 //x0035544 added fix done by x0021334 for CQ-33597 21-11-2005
1982 case SAT_SEND_DTMF: // x0021334 : To test SAT session end - CQ33597
1983 {
1984 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
1985 #ifdef FF_MMI_SAT_ICON
1986 if (info_data->editor_data.editor_attr.TitleIcon.data != NULL)
1987 {
1988 FREE_MEMORY((U8 *)info_data->editor_data.editor_attr.TitleIcon.data, info_data->editor_data.editor_attr.TitleIcon.width *
1989 info_data->editor_data.editor_attr.TitleIcon.height);
1990 info_data->editor_data.editor_attr.TitleIcon.data = NULL;
1991 }
1992 #endif
1993
1994 switch(reason)
1995 {
1996 case INFO_KCD_RIGHT:
1997 case INFO_KCD_HUP:
1998 // Call mfw function to end the session
1999 Mfw_SAT_DTMF_EndSession();
2000 #ifdef NEW_EDITOR
2001 AUI_edit_Destroy(info_data->info_win);
2002 #else /* NEW_EDITOR */
2003 editor_destroy(info_data->info_win);
2004 #endif /* NEW_EDITOR */
2005 info_data->info_win = NULL;
2006 break;
2007 default:
2008 TRACE_EVENT("sat_info_cb(): unexp. event");
2009 break;
2010 }
2011 }
2012 break;
2013
2014 case SAT_SEND_SMS:
2015 case SAT_SEND_SS:
2016 //case SAT_SEND_DTMF: x0035544 CQ-33597 21-11-2005
2017 case SAT_CALL_RESULT:
2018 if ((info_win_data EQ NULL) || (info_data EQ NULL))
2019 return;
2020
2021 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
2022 #ifdef FF_MMI_SAT_ICON
2023 if (info_data->editor_data.editor_attr.TitleIcon.data != NULL)
2024 {
2025 FREE_MEMORY((U8 *)info_data->editor_data.editor_attr.TitleIcon.data, info_data->editor_data.editor_attr.TitleIcon.width *
2026 info_data->editor_data.editor_attr.TitleIcon.height);
2027 info_data->editor_data.editor_attr.TitleIcon.data = NULL;
2028 }
2029 #endif
2030 /* SPR#1428 - SH - New Editor changes */
2031 #ifdef NEW_EDITOR
2032 sat_destroy_TEXT_ASCIIZ((char*)info_data->editor_data.TitleString); /* displayed text */
2033 #else /* NEW_EDITOR */
2034 sat_destroy_TEXT_ASCIIZ((char*)info_data->editor_data.TextString); /* displayed text */
2035 #endif /* NEW_EDITOR */
2036 break;
2037 default:
2038 TRACE_EVENT("sat_info_cb(): unexp. event");
2039 break;
2040 }
2041 }
2042
2043
2044 /*******************************************************************************
2045
2046 $Function: sat_set_setup_menu_win
2047
2048 $Description: set the window associated with the setup menu command
2049
2050 $Returns: none.
2051
2052 $Arguments:
2053
2054 *******************************************************************************/
2055 void sat_set_setup_menu_win(T_MFW_HND win)
2056 {
2057 TRACE_FUNCTION("sat_set_setup_menu_win");
2058
2059 g_sim_toolkit_data->sat_setup_menu_win = win;
2060 }
2061
2062
2063 /*******************************************************************************
2064
2065 $Function: sat_get_setup_menu_win
2066
2067 $Description: get the window associated with the setup menu command
2068
2069 $Returns: none.
2070
2071 $Arguments:
2072
2073 *******************************************************************************/
2074 T_MFW_HND sat_get_setup_menu_win(void)
2075 {
2076 TRACE_EVENT("sat_get_setup_menu_win");
2077 return g_sim_toolkit_data->sat_setup_menu_win;
2078 }
2079
2080
2081 /*******************************************************************************
2082
2083 $Function: sat_set_setup_menu_listmnu_win
2084
2085 $Description: set the window associated with the sat list menu
2086
2087 $Returns: none.
2088
2089 $Arguments:
2090
2091 *******************************************************************************/
2092 void sat_set_setup_menu_listmnu_win(T_MFW_HND win)
2093 {
2094 TRACE_FUNCTION("sat_set_setup_menu_listmnu_win");
2095
2096 g_sim_toolkit_data->sat_setup_menu_listmnu_win= win;
2097 }
2098
2099
2100 /*******************************************************************************
2101
2102 $Function: sat_get_setup_menu_listmnu_win
2103
2104 $Description: get the window associated with the setup list menu
2105
2106 $Returns: none.
2107
2108 $Arguments:
2109
2110 *******************************************************************************/
2111 T_MFW_HND sat_get_setup_menu_listmnu_win(void)
2112 {
2113 TRACE_EVENT("sat_get_setup_menu_listmnu_win");
2114 return g_sim_toolkit_data->sat_setup_menu_listmnu_win;
2115 }
2116
2117
2118 /*******************************************************************************
2119
2120 $Function: sat_set_call_setup_win
2121
2122 $Description: set the window associated with the call setup command
2123
2124 $Returns: none.
2125
2126 $Arguments:
2127
2128 *******************************************************************************/
2129 void sat_set_call_setup_win(T_MFW_HND win)
2130 {
2131 TRACE_FUNCTION("sat_set_call_setup_win");
2132 g_sim_toolkit_data->sat_call_setup_win = win;
2133 }
2134
2135
2136 /*******************************************************************************
2137
2138 $Function: sat_get_call_setup_win
2139
2140 $Description: get the window associated with the call setup command
2141
2142 $Returns: none.
2143
2144 $Arguments:
2145
2146 *******************************************************************************/
2147 /* Marcus: Issue 1057: 21/01/2003: Made public */
2148 T_MFW_HND sat_get_call_setup_win(void)
2149 {
2150 TRACE_FUNCTION("sat_get_call_setup_win");
2151 return g_sim_toolkit_data->sat_call_setup_win;
2152 }
2153
2154 /*******************************************************************************
2155
2156 $Function: g_ascii_gsm_table
2157
2158 $Description: convert a string coded in ASCIIZ into GSM alphabet
2159
2160 $Returns: none.
2161
2162 $Arguments:
2163
2164 *******************************************************************************/
2165 static const char g_ascii_gsm_table[256] = {
2166 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //000-007
2167 0x20,0x20, 10,0x20,0x20, 13,0x20,0x20, //008-015
2168 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //016-023
2169 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //024-031
2170 32, 33, 34, 35, 2, 37, 38, 39, //032-039
2171 40, 41, 42, 43, 44, 45, 46, 47, //040-047
2172 48, 49, 50, 51, 52, 53, 54, 55, //048-055
2173 56, 57, 58, 59, 60, 61, 62, 63, //056-063
2174 0, 65, 66, 67, 68, 69, 70, 71, //064-071
2175 72, 73, 74, 75, 76, 77, 78, 79, //072-079
2176 80, 81, 82, 83, 84, 85, 86, 87, //080-087
2177 88, 89, 90,0x20,0x20,0x20,0x20,0x20, //088-095
2178 0x20, 97, 98, 99, 100, 101, 102, 103, //096-103
2179 104, 105, 106, 107, 108, 109, 110, 111, //104-111
2180 112, 113, 114, 115, 116, 117, 118, 119, //112-119
2181 120, 121, 122,0x20,0x20,0x20,0x20,0x20, //120-127
2182 9, 126, 5,0x20, 123, 127, 15,0x20, //128-135
2183 0x20,0x20, 4,0x20,0x20, 7, 91, 14, //136-143
2184 31, 29, 28,0x20, 124, 8,0x20, 6, //144-151
2185 0x20, 92, 94,0x20, 1, 3,0x20,0x20, //152-159
2186 0x20,0x20,0x20,0x20, 125, 93,0x20,0x20, //160-167
2187 96, 17,0x20,0x20,0x20, 64,0x20,0x20, //168-175
2188 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //176-183
2189 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //184-191
2190 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //192-199
2191 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //200-207
2192 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //208-215
2193 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //216-223
2194 0x20, 30, 19, 22, 24,0x20,0x20,0x20, //224-231
2195 18, 25, 21,0x20,0x20,0x20,0x20, 20, //232-239
2196 26,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //240-247
2197 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //248-255
2198 };
2199
2200 void sat_ascii_to_gsm (char * gsm_string, char * ascii_string, U16 length)
2201 {
2202 U16 i;
2203 TRACE_FUNCTION("sat_ascii_to_gsm");
2204
2205 for (i = 0; i < length; i++)
2206 gsm_string[i] = g_ascii_gsm_table[ascii_string[i]];
2207 }
2208
2209 /*******************************************************************************
2210
2211 $Function: sat_ascii_to_ucode
2212
2213 $Description: convert a string coded in ASCIIZ into UCS2 alphabet
2214
2215 $Returns: none.
2216
2217 $Arguments:
2218
2219 *******************************************************************************/
2220 void sat_ascii_to_ucode (wchar_t * UCS2_chars, char * ascii_string, U16 length)
2221 {
2222 U16 i;
2223 TRACE_FUNCTION("sat_ascii_to_ucode");
2224 for (i = 0; i < length; i++)
2225 UCS2_chars[i] = (wchar_t)ascii_string[i];
2226 }
2227
2228 /*******************************************************************************
2229
2230 $Function: sat_ucode_to_ascii
2231
2232 $Description: convert a string coded in UCS2 into ASCII alphabet
2233
2234 $Returns: none.
2235
2236 $Arguments:
2237
2238 *******************************************************************************/
2239 void sat_ucode_to_ascii (char * ascii_string, wchar_t * UCS2_chars, U16 length)
2240 {
2241 U16 i;
2242 TRACE_FUNCTION("sat_ucode_to_asci");
2243
2244 for (i = 0; i < length; i++)
2245 ascii_string[i] = (char)UCS2_chars[i];
2246 ascii_string[i] = '\0';
2247 }
2248 /*******************************************************************************
2249
2250 $Function: g_gsm_ascii_table
2251
2252 $Description: convert a string coded in GSM alphabet into an ASCIIZ string
2253
2254 $Returns: none.
2255
2256 $Arguments:
2257
2258 *******************************************************************************/
2259
2260 static const char g_gsm_ascii_table[128] = {
2261 64, 156, 36, 157, 138, 130, 151, 141,
2262 149, 128, 10,0x20 , 32, 13, 143, 134,
2263 0x20, 169, 232, 226, 239, 234, 227,0x20,
2264 228, 233, 240,0x20, 146, 145, 225, 144,
2265 32, 33, 34, 35,0x20, 37, 38, 39,
2266 40, 41, 42, 43, 44, 45, 46, 47,
2267 48, 49, 50, 51, 52, 53, 54, 55,
2268 56, 57, 58, 59, 60, 61, 62, 63,
2269 173, 65, 66, 67, 68, 69, 70, 71,
2270 72, 73, 74, 75, 76, 77, 78, 79,
2271 80, 81, 82, 83, 84, 85, 86, 87,
2272 88, 89, 90, 142, 153, 165, 154,0x20,
2273 168, 97, 98, 99, 100, 101, 102, 103,
2274 104, 105, 106, 107, 108, 109, 110, 111,
2275 112, 113, 114, 115, 116, 117, 118, 119,
2276 120, 121, 122, 132, 148, 164, 129, 133
2277 };
2278
2279 void sat_gsm_to_ascii (char * ascii_string, char * gsm_string, U16 length)
2280 {
2281 U16 i;
2282 TRACE_FUNCTION("sat_gsm_to_ascii");
2283 // Jun 02, 2004 REF: CRR 15747 xpradipg-SASKEN
2284 // Fix: The string is terminated if the length is reached or if it encounters '0xFF'
2285 // gsm_string[i]!=0xFF is introduced to check if the string is terminated prior to the specified length
2286 for (i = 0; i < length && gsm_string[i]!=0xFF; i++)
2287 ascii_string[i] = g_gsm_ascii_table[(gsm_string[i] & (U8)0x7F)];
2288 ascii_string[i] = '\0';
2289 }
2290
2291
2292 /*******************************************************************************
2293
2294 $Function: sat_TEXT_to_ASCIIZ
2295
2296 $Description: This routine converts a MFW SAT text descriptor into a
2297 conventional ASCIIZ string
2298 $Returns: none.
2299
2300 $Arguments:
2301
2302 *******************************************************************************/
2303 void sat_TEXT_to_ASCIIZ (char * destination, T_SAT_TXT * txt)
2304 {
2305 UBYTE * temp_buffer;
2306 UBYTE len;
2307 char* txt_start;
2308
2309 TRACE_FUNCTION("sat_TEXT_to_ASCIIZ");
2310
2311 TRACE_EVENT_P1("T_SAT_TXT txt->code=%x", txt->code);
2312
2313 switch (txt->code)
2314 {
2315 case MFW_DCS_7bits:
2316 temp_buffer = (UBYTE *)ALLOC_MEMORY(((txt->len*8)/7)+1);
2317 len = utl_cvt7To8 ((UBYTE *)txt + txt->text, txt->len, temp_buffer);
2318 //Sandip CQ 16292 . commented
2319 /*sat_gsm_to_ascii (destination, (char *)temp_buffer, len);*/
2320 /*Sandip CQ 16292 . added this new function . Problem with current TI GSM 7-bit default function*/
2321 DecodeGSM7ToASCII((unsigned char*)txt+txt->text, (unsigned char*) destination, txt->len);
2322 FREE_MEMORY ((U8 *)temp_buffer, ((txt->len*8)/7)+1);
2323 break;
2324 case MFW_DCS_8bits:
2325 /* SPR#1700 - DS - Modified to handle 0x80 style unicode */
2326 txt_start = (char*)txt + txt->text;
2327 if ((*txt_start == 0x80) && (txt->len & 1))
2328 {
2329 TRACE_EVENT("0x80 style unicode");
2330 memset(destination,0,txt->len+2);
2331 memcpy(destination,txt_start+1,txt->len-1);
2332 txt->code = MFW_DCS_UCS2;
2333 }
2334 else
2335 {
2336 sat_gsm_to_ascii (destination, (char *)txt + txt->text, (UBYTE)txt->len);
2337 }
2338 break;
2339 case MFW_DCS_UCS2:
2340 sat_ucode_to_ascii (destination, (wchar_t *)((char *)txt + txt->text), txt->len);
2341 break;
2342 default:
2343 sat_gsm_to_ascii (destination, (char *)txt + txt->text, (UBYTE)txt->len); /* SH - got txt->code=244, so need generic response to this*/
2344 TRACE_EVENT("sat_TEXT_to_ASCIIZ() unexp. DCS");
2345 }
2346 }
2347
2348 //sandip 16292
2349 // Converts a given 8-bit encoded string into original 7-bit GSM data string according to TS 31.102
2350 /*******************************************************************************
2351
2352 $Function: DecodeGSM7ToASCII
2353
2354 $Description: This function decodes a GSM 7-bit string into ASCII equivalent
2355
2356 $Returns: length of decoded string
2357
2358 $Arguments: encoded - GSM string pointer
2359 plain - Buffer to hold the decoded ASCII string
2360 Length - Length of the encoded GSM string
2361
2362
2363 *******************************************************************************/
2364 unsigned char DecodeGSM7ToASCII(U8 * encoded, U8 * plain, U8 Length)
2365 {
2366 U8 bits, i, j;
2367 U8 c;
2368
2369 /* Extract the ascii characters from the bytes,
2370 */
2371
2372 for (i = j = bits = 0; j < Length; i++, j++)
2373 {
2374 if (bits > 0)
2375 c = encoded[i-1] >> (8-bits);
2376 else
2377 c=0;
2378
2379 if (bits < 7)
2380 c |= encoded[i] << bits;
2381
2382 *plain++ = c & 0x7f;
2383 bits = (++bits)%8;
2384 if (bits == 0)
2385 {
2386 i -= 1;
2387 Length++;
2388 }
2389 }
2390
2391 *plain = '\0';
2392 return (Length);
2393 }
2394 /*******************************************************************************
2395
2396 $Function: sat_create_TEXT_ASCIIZ
2397
2398 $Description: This routine creates out of an MFW SAT text descriptor an
2399 dynamically allocated ASCIIZ string pointer
2400
2401 $Returns: none.
2402
2403 $Arguments:
2404
2405 MC, Note: text returned by this function has no Unicode tag at beginning
2406 $Returns: none.
2407
2408 $Arguments:
2409
2410 *******************************************************************************/
2411 /*MC, SPR 940/2 uncommented function back in, and then rewrote it :)*/
2412 void sat_TEXT_to_UCODE (char* destination, int size, T_SAT_TXT * txt)
2413 {
2414
2415 UBYTE * temp_buffer;
2416 UBYTE len;
2417 char debug[50];
2418
2419
2420 TRACE_EVENT("sat_TEXT_to_UCODE()");
2421
2422 switch (txt->code) /*DCS of Text*/
2423 {
2424 case MFW_DCS_7bits:
2425 temp_buffer = (UBYTE *)ALLOC_MEMORY(((txt->len*8)/7)+1);
2426 /*convert from 7 to 8 bit*/
2427 len = utl_cvt7To8 ((UBYTE *)txt + txt->text, txt->len, temp_buffer, 0);
2428
2429 /*MC, convert from 8 bit to UCS2*/
2430 /*SPR2175, use new function for conversion*/
2431 ATB_convert_String((char*)temp_buffer, MFW_DCS_8bits, (((txt->len*8)/7)+1), (char*)destination, MFW_DCS_UCS2, /*txt->len*2*/size, FALSE);
2432 FREE_MEMORY ((U8 *)temp_buffer, ((txt->len*8)/7)+1);
2433 break;
2434 case MFW_DCS_8bits:/*DCS tends to come out as 8 bit whatever it is*/
2435 if (*((UBYTE*)txt+txt->text) !=0x80)/*MC, if ASCII, convert to Unicode*/
2436 {
2437 #ifdef SAT_TEXT_TRACING
2438 //string_GSM_to_UCS2((UBYTE)txt->len, (UBYTE *)txt + txt->text, (USHORT)(txt->len), destination);
2439 sprintf(debug, "Length of MENU HEADER:%d", txt->len);
2440 TRACE_EVENT(debug);
2441 #endif
2442 /*MC, convert from 8 bit to UCS2*/
2443 /*SPR2175, use new function for conversion*/
2444 ATB_convert_String((char *)txt +txt->text, MFW_DCS_8bits, txt->len, (char*)destination, MFW_DCS_UCS2, /*txt->len*2*/size, FALSE);
2445 }
2446 else
2447 {
2448 /*MC, unicode string, convert to our display format*/
2449 destination[0] =0x80;/*SPR 1728, add unicode tag*/
2450 destination[1] = 0x7f;
2451
2452 memcpy(&destination[2], (UBYTE*)txt+txt->text+1, txt->len-1);
2453
2454 }
2455 break;
2456 case MFW_DCS_UCS2:/*MC, unicode string, convert to our display format*/
2457 { destination[0] =0x80;/*SPR 1728, add unicode tag*/
2458 destination[1] = 0x7f;
2459
2460 //memcpy(&destination[2], (UBYTE*)txt+txt->text+1, txt->len-1);
2461 memcpy(&destination[2], (UBYTE*)txt+txt->text, txt->len); /* SPR#2340 - DS - Corrected len */
2462
2463 }
2464
2465 break;
2466 default:
2467 TRACE_EVENT("sat_TEXT_to_UCODE() unexp. DCS");
2468 }
2469 /*MC, SPR 1086 Commented out traces here, as long buffers cause a crash*/
2470 {int i;
2471
2472 for (i=0; i <size && i<20; i++)
2473 { if (destination[i] == 0)
2474 debug[i] ='0';
2475 else
2476 debug[i] = destination[i];
2477 }
2478 debug[i+1] = 0x00; /* SPR#2321 - DS - Terminate debug buffer after UCS2 string */
2479 TRACE_EVENT(debug);
2480 }
2481 }
2482 /*JVJE*/
2483
2484 /*******************************************************************************
2485
2486 $Function: sat_create_TEXT_ASCIIZ
2487
2488 $Description: This routine creates out of an MFW SAT text descriptor an
2489 dynamically allocated ASCIIZ string pointer
2490
2491 $Returns: none.
2492
2493 $Arguments:
2494
2495 *******************************************************************************/
2496 #define SAT_LEN_SIZE (U16)sizeof(U16) /* used to hold the allocation size */
2497 #define SAT_TERMINATOR_SIZE (U16)sizeof(U16) /* used to hold terminating '\0' in U8 and U16 */
2498
2499 char * sat_create_TEXT_ASCIIZ (T_SAT_TXT * txt)
2500 {
2501
2502 char * res;
2503 U16 size;
2504 UBYTE first_char= *((UBYTE*)txt+txt->text);/*SPR 1728*/
2505 TRACE_EVENT("sat_create_TEXT_ASCIIZ ()");
2506 #ifdef NO_ASCIIZ
2507 TRACE_EVENT_P3("DCS:%d first_char:%d len: %d", txt->code, first_char, txt->len);
2508 /*SPR 1728, if unicode string format it for display*/
2509 if ( first_char==0x80 ||txt->code==MFW_DCS_UCS2)
2510 { return (char*)sat_create_TEXT_UCODE (txt);}
2511 #endif
2512
2513 /* SPR#2321 - DS - Format not Unicode therefore return NULL if string length is zero */
2514 if (txt->len == 0)
2515 return NULL;
2516
2517 /* SPR#2321 - DS - SAT has sent a NULL string. Set first char to ASCII code for <space> */
2518 if (txt->len == 1 && first_char == 0x00)
2519 {
2520 *((UBYTE*)txt+txt->text) = 0x20;
2521 }
2522
2523 /* SPR#2321 - DS - Check if SAT has supplied a NULL string (first_char 0x00, dcs not UCS2) */
2524 if (first_char == 0x00 && txt->code != MFW_DCS_UCS2)
2525 return NULL;
2526
2527 /* allocate sufficient space for the converted string */
2528 if (txt->code == MFW_DCS_7bits)
2529 size = SAT_LEN_SIZE + ((txt->len*8)/7)*sizeof(char) + SAT_TERMINATOR_SIZE;
2530 else
2531 size = SAT_LEN_SIZE + txt->len*sizeof(char) + SAT_TERMINATOR_SIZE;
2532 res = (char *)ALLOC_MEMORY (size);
2533 *(U16 *) res = size; /* store allocated size in first 2 bytes (for deallocation purposes) */
2534 res += SAT_LEN_SIZE, /* set the pointer to the string, not to the alloc size */
2535
2536 /* convert the string */
2537 sat_TEXT_to_ASCIIZ (res, txt);
2538
2539
2540 return res;
2541 }
2542
2543 /*******************************************************************************
2544
2545 $Function: sat_create_TEXT_UCODE
2546
2547 $Description: This routine creates out of an MFW SAT text descriptor an
2548 dynamically allocated UCS2 string pointer
2549
2550 $Returns: none.
2551
2552 $Arguments:
2553
2554 *******************************************************************************/
2555 /*JVJE*/
2556 /*MC, SPR 940/2 uncommneted and then re-written function, pointers to wide chars now are pointers to chars*/
2557 char* sat_create_TEXT_UCODE (T_SAT_TXT * txt)
2558 {
2559 char * res;
2560 U16 size;
2561
2562 TRACE_EVENT("sat_create_TEXT_UCODE()");
2563
2564 if (txt->code == MFW_DCS_7bits) /*MC SPR 1086, add 2 extra chars in case UCS2 tag is to be added later*/
2565 size = SAT_LEN_SIZE + sizeof(char) + ((txt->len*8)/7) * /*sizeof(wchar_t)*/2+SAT_TERMINATOR_SIZE*2;
2566 else /*MC SPR 1086, add 2 extra chars in case UCS2 tag is to be added later*/
2567 //size = SAT_LEN_SIZE + sizeof(char) + txt->len * /*sizeof(wchar_t)*/2+SAT_TERMINATOR_SIZE*2;
2568 size = SAT_LEN_SIZE + (sizeof(U16) * txt->len) + SAT_TERMINATOR_SIZE*2; /* SPR#2321 - DS - Improve clarity of mem alloc */
2569 res = (char *)ALLOC_MEMORY (size);
2570 *(U16 *)res = size;
2571 res = ((char *)res + SAT_LEN_SIZE);
2572
2573 TRACE_EVENT_P1("size: %d", size);
2574
2575 sat_TEXT_to_UCODE (res,size, txt);
2576
2577 return res;
2578 }
2579
2580
2581 /*******************************************************************************
2582
2583 $Function: sat_create_ITEM_ASCIIZ
2584
2585 $Description: This routine converts a MFW SAT Item descriptor into a
2586 conventional String pointer
2587 MC, note: this function will add a Unicode tag to the beginning of Unicode
2588 strings returned
2589
2590 $Returns: none.
2591
2592 $Arguments:
2593
2594 *******************************************************************************/
2595 /*MC, SPR 940/2 changed this func to output Unicode string when appropriate*/
2596 extern char * sat_create_ITEM_ASCIIZ (SatItem * item)
2597 {
2598 char * res;
2599 U16 size;
2600 UBYTE first_char= *((UBYTE*)item+item->text);
2601
2602 TRACE_FUNCTION("sat_create_ITEM_ASCIIZ()");
2603
2604 TRACE_EVENT_P2("first_char:%d len: %d", first_char, item->len);
2605
2606 /* SPR#2321 - DS - Return NULL if string length is zero */
2607 if (item->len == 0)
2608 {
2609 //return NULL;//sandip-CQ 16306
2610 *((UBYTE*)item+item->text) = 0x20;
2611 }
2612
2613 /* SPR#2321 - DS - SAT has sent a NULL string. Set first char to ASCII code for <space> */
2614 if ((item->len == 1) && (first_char == 0x00))
2615 {
2616 *((UBYTE*)item+item->text) = 0x20;
2617 }
2618
2619 /* allocate sufficient space for the converted string */
2620 size = SAT_LEN_SIZE + item->len/**sizeof(wchar_t)*/*2 + 3*SAT_TERMINATOR_SIZE;
2621 res = (char *)ALLOC_MEMORY (size);
2622 *(U16 *) res = size; /* store allocated size in first 2 bytes (for deallocation purposes) */
2623 res += SAT_LEN_SIZE; /* set the pointer to the string, not to the alloc size */
2624
2625 /*
2626 * item->text is offset of string from start of item
2627 */
2628 #ifdef NO_ASCIIZ /*MC SPR 940/2 check if we're in Chinese or string is unicode and deal with it*/
2629
2630 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)/*if chinese*/
2631 {
2632 #ifdef SAT_TEXT_TRACING
2633 /***************************Go-lite Optimization changes Start***********************/
2634 //Aug 16, 2004 REF: CRR 24323 Deepa M.D
2635 TRACE_EVENT_P1("Length of menu item:%d", item->len);
2636 /***************************Go-lite Optimization changes end***********************/
2637 #endif
2638 if (*((char*)item+item->text) != 0x80)/*MC, if item ASCII*/
2639 { // int i; // RAVI
2640 /*convert to unicode*/
2641 TRACE_EVENT("Adding menu item in ASCII->UCS2");
2642 // SmsRead_convertSMSmsg((char *)item + item->text, MFW_DCS_8bits, item->len, &res[2], MFW_DCS_UCS2, size-4, FALSE);
2643 // res[0] = 0x80;/*add tag to beginning of string*/
2644 // res[1] =0x7F;
2645 /*MC, SPR 1086 8 bit to UCS2 conversion causes menu update problems*/
2646 /*Thought it might be due to memory leaks/overwrites, but can't find any*/
2647 /*Easy solution is to convert to ASCII rather than UCS2*/
2648 sat_gsm_to_ascii (res, (char *)item + item->text, item->len);
2649 }
2650 else /*if Unicode tag*/
2651 { TRACE_EVENT("Adding menu item in UCS2");
2652 /*Shift string up one byte*/
2653 memcpy(res+2, (char *)item + item->text+1, item->len-1);
2654 res[0] = 0x80;/*add tag at beginning of string*/
2655 res[1] = 0x7f;
2656 }
2657 }
2658 else /*if not chinese BUT unicode tag, convert to display Unicode format*/
2659 { if (*((char*)item+item->text) == 0x80)
2660 { memcpy(res+2, (char *)item + item->text+1, item->len-1);
2661 res[0] = 0x80;
2662 res[1] = 0x7f;
2663 }
2664
2665 else /*if not chinese and ascii string, convert from GSM to ASCII*/
2666 #endif
2667 sat_gsm_to_ascii (res, (char *)item + item->text, item->len);
2668 #ifdef NO_ASCIIZ
2669 }
2670 #endif
2671
2672
2673 return res;
2674 }
2675
2676 /*******************************************************************************
2677
2678 $Function: sat_destroy_TEXT_ASCIIZ
2679
2680 $Description: destroy an ASCIIZ string previously created with
2681 sat_create_TEXT_ASCIIZ() or sat_create_ITEM_ASCIIZ()
2682
2683 $Returns: none.
2684
2685 $Arguments:
2686
2687 *******************************************************************************/
2688 void sat_destroy_TEXT_ASCIIZ (char * str)
2689 {
2690 /*MC, SPR 940/2 if we're in chinese, use Unicode string destuctor*/
2691 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
2692 { sat_destroy_TEXT_UCODE(str);
2693 return;
2694 }
2695
2696 TRACE_FUNCTION("sat_destroy_TEXT_ASCIIZ");
2697
2698 if (str NEQ NULL)
2699 {
2700 /* the two bytes before the string are holding the alloc size info */
2701 FREE_MEMORY ((U8 *)(str-SAT_LEN_SIZE), *(U16 *) (str-SAT_LEN_SIZE));
2702 str = NULL;
2703 }
2704 }
2705
2706 #ifdef MMI_TEST_SAT_LAUNCH_BROWSER
2707 void mmiOpenDummyBrowser(T_MFW_HND win,char* information)
2708 {
2709 #ifdef NEW_EDITOR
2710 T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */
2711 #else
2712 T_EDITOR_DATA editor_data;
2713 #endif
2714
2715 TRACE_FUNCTION("mmiOpenDummyBrowser");
2716
2717 /* SPR#1428 - SH - New Editor changes */
2718
2719 #ifdef NEW_EDITOR
2720 AUI_edit_SetDefault(&editor_data);
2721 AUI_edit_SetTextStr(&editor_data, TxtNull, TxtNull, TxtNull, NULL);
2722 AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)information, INFORMATION_SIZE);
2723 AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
2724
2725 AUI_edit_Start(win, &editor_data);
2726 #else /* NEW_EDITOR */
2727
2728 #ifdef DBG1
2729 editor_data_init();
2730 #endif
2731 editor_data.TextString = "WAP";
2732 editor_data.LeftSoftKey = TxtSoftOK;
2733 editor_data.RightSoftKey = NULL;
2734 editor_data.AlternateLeftSoftKey = NULL;
2735 editor_data.Callback = NULL;
2736 editor_data.Identifier = 0;
2737 editor_data.hide = FALSE;
2738 editor_data.mode = READ_ONLY_MODE;
2739 editor_data.timeout = FOREVER;
2740 editor_data.min_enter = 0;
2741 editor_data.destroyEditor = TRUE;
2742 editor_data.editor_attr.win.px = 0;
2743 editor_data.editor_attr.win.py = 8;
2744 editor_data.editor_attr.win.sx = 84;
2745 editor_data.editor_attr.win.sy = 24;
2746 editor_data.editor_attr.font = 0;
2747 editor_data.editor_attr.mode = edtCurNone;
2748 editor_data.editor_attr.controls = 0;
2749 editor_data.editor_attr.size = INFORMATION_SIZE;
2750
2751 editor_data.editor_attr.text = information;
2752
2753 /* create the dialog handler */
2754 editor_start(win, &editor_data); /* start the editor */
2755 #endif
2756
2757 return;
2758 }
2759
2760 #endif
2761 //GW SPR#1035 - Added SAT changes
2762 /*******************************************************************************
2763
2764 $Function: sat_release_the_editor
2765
2766 $Description: The SAT-application initiate a setup call and
2767 the MMI opens for this call status a new editor.
2768 Normally the event "SAT_SESSION_END" release the editor
2769 but for some reason this event doesnt come up !
2770 This function allows from the MMICall.c in the case of "disconnect"
2771 to release the editor as well.
2772
2773 $Returns: none.
2774
2775 $Arguments:
2776
2777 *******************************************************************************/
2778 void sat_release_the_editor (void)
2779 {
2780 TRACE_FUNCTION("sat_release_the_editor()");
2781
2782 if (g_sim_toolkit_data->info_win NEQ NULL)
2783 {
2784 /* destroy any infoscreen if exist */
2785 /* SPR#1428 - SH - New Editor changes */
2786 #ifdef NEW_EDITOR
2787 SEND_EVENT (g_sim_toolkit_data->info_win, E_ED_DEINIT, 0, NULL);
2788 #else /* NEW_EDITOR */
2789 SEND_EVENT (g_sim_toolkit_data->info_win, E_EDITOR_DEINIT, 0, NULL);
2790 #endif /* NEW_EDITOR */
2791 g_sim_toolkit_data->info_win = NULL;
2792 }
2793 }
2794
2795 /*MC, SPR 940/2 uncommented function and changed param to char* */
2796 void sat_destroy_TEXT_UCODE (/*cp_wstring_t*/char* str)
2797 {
2798 if (str NEQ NULL)
2799 {
2800 FREE_MEMORY ((U8 *)((char *)str-SAT_LEN_SIZE), *(U16 *) ((char *)str-SAT_LEN_SIZE));
2801 str = NULL;
2802 }
2803 }
2804 /*******************************************************************************
2805
2806 $Function: sat_add_unicode_tag_if_needed
2807
2808 $Description: Checks if string ought to be pre-pended with a unicode tag and if it ought to,
2809 adds the tag (note, the string has to already have 2 "extra" chars allocated
2810 to it; this normally happens in the create_TEXT_UCODE function)
2811
2812 $Returns: none.
2813
2814 $Arguments: string
2815
2816 *******************************************************************************/
2817 /*SPR1257, new function*/
2818 void sat_add_unicode_tag_if_needed(char* string)
2819 {/*Add tag to Unicode strings so info dialogue displays them correctly*/
2820 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE&& string[0]!=0x80 )
2821 {
2822 char TempString[MAX_MSG_LEN_SGL];/*MC, SPR 1292, more sensible length*/
2823 #ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */
2824 memcpy(&TempString[2], GET_TEXT(TxtSoftCall), ATB_string_UCLength((USHORT*)string)*sizeof(USHORT));
2825 #else /* NEW_EDITOR */
2826 memcpy(&TempString[2], string, strlenUnicode((U16*) string));
2827 #endif /* NEW_EDITOR */
2828
2829 TempString[0] = 0x80;
2830 TempString[1] = 0x7f;
2831 #ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */
2832 memcpy(string, TempString, (ATB_string_UCLength((USHORT*)TempString)+1)*sizeof(USHORT));
2833 #else /* NEW_EDITOR */
2834 memcpy( string, TempString, strlenUnicode((U16*)TempString));
2835 #endif /* NEW_EDITOR */
2836
2837 }
2838 }
2839
2840 /*******************************************************************************
2841
2842 $Function: set_sat_redial_flag
2843
2844 $Description: Sets the SAT call 'with redial' flag.
2845
2846 $Returns: none.
2847
2848 $Arguments: Value to set flag to.
2849
2850 $History: SPR#1784 - DS - Created function.
2851
2852 *******************************************************************************/
2853 void set_sat_redial_flag(UBYTE flag)
2854 {
2855 TRACE_FUNCTION("set_sat_redial_flag()");
2856
2857 TRACE_EVENT_P1("flag %d", flag);
2858
2859 g_sim_toolkit_data->satCallWithRedial = flag;
2860 }
2861
2862 /*******************************************************************************
2863
2864 $Function: get_sat_redial_flag
2865
2866 $Description: Gets the value of the SAT call 'with redial' flag.
2867
2868 $Returns: current value of redial flag.
2869
2870 $Arguments: none.
2871
2872 $History: SPR#1784 - DS - Created function.
2873
2874 *******************************************************************************/
2875 UBYTE get_sat_redial_flag(void)
2876 {
2877 TRACE_FUNCTION("get_sat_redial_flag");
2878
2879 return (g_sim_toolkit_data->satCallWithRedial);
2880 }
2881