comparison src/aci2/bmi/mmiSmsIdle.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
comparison
equal deleted inserted replaced
2:c41a534f33c6 3:93999a60b835
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
14 $Module: SMS
15 $File: MmiSmsIdle.c
16 $Revision: 1.0
17
18 $Author: Condat(UK)
19 $Date: 25/10/00
20
21 ********************************************************************************
22
23 Description: Implementation for MMI smsidle unsolicited event handling
24
25
26
27 ********************************************************************************
28
29 $History: MmiSmsIdle.c
30
31 25/10/00 Original Condat(UK) BMI version.
32
33 Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh
34 Description: Mp3 Ringer Implementation
35 Solution: The Midi Ringer application has been enhanced to support mp3 as ringer.
36 The interface function names have been modified.
37
38 May 27, 2005 MMI-FIX-29869 x0018858
39 Description: There is a limitation on the number of messages that can be downloaded from
40 server even though there is space on the sim.
41 Solution: The limitation has been removed and the number of messages that can be dowloaded
42 has been modified to the maximum number that can be stored.
43
44 Jun 14, 2005 REF: MMI-FIX-30439 x0018858
45 Description: The homezone/cityzone tags were not being displayed properly.
46 Solution: Modified to save the tags properly in caches and also made the
47 appropriate modifications to update the same properly during mobility.
48
49 Apr 05, 2005 REF: ENH 29994 xdeepadh
50 Description: Implementation of Generic Midi Ringer and Modification of existing Midi Test Application
51 Solution: Generic Midi Ringer and Midi Test Application were implemented.
52
53 x0018858 24 Mar, 2005 MMI-FIX-11321
54 Issue Description :- If the inbox is full and a new message is receivd, no indication is received.
55 Fix: Added support for handling indication when message box is full and
56 there is a pending message.
57
58 Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar
59 Issue description: BMI: using the tool nowSMS the voicemail indication via sms does not work
60 Solution: Instead of identifying voice using addr[0] and pid, we use dcs. Also, messages belonging
61 to group "1100" are deleted when voicemail icon is displayed.
62
63 Apr 27, 2004 REF: CRR 21336 Deepa M.D
64 Bug:SMSMT UCS2 Class0 message content not displayed.
65 Fix:The alphabet bits(UCS2) of DCS were not decoded properly.
66
67 $End
68
69 *******************************************************************************/
70
71 #define ENTITY_MFW
72
73 /* includes */
74 #include <string.h>
75 #include <stdio.h>
76 #include <stdlib.h>
77
78 #if defined (NEW_FRAME)
79
80 #include "typedefs.h"
81 #include "vsi.h"
82 #include "pei.h"
83 #include "custom.h"
84 #include "gsm.h"
85
86 #else
87
88 #include "STDDEFS.H"
89 #include "custom.h"
90 #include "gsm.h"
91 #include "vsi.h"
92
93 #endif
94 #include "prim.h"
95
96
97 #include "mfw_sys.h"
98
99 #include "mfw_mfw.h"
100 #include "mfw_win.h"
101 #include "mfw_kbd.h"
102 /* SPR#1428 - SH - New Editor changes */
103 #ifndef NEW_EDITOR
104 #include "mfw_edt.h"
105 #endif
106 #include "mfw_lng.h"
107 #include "mfw_icn.h"
108 #include "mfw_phb.h"
109 #include "mfw_sim.h"
110 #include "mfw_nm.h"
111
112 #include "ksd.h"
113 #include "psa.h"
114 #include "mfw_sms.h"
115 #include "mfw_smsi.h"
116 #include "mfw_mnu.h"
117 #include "mfw_sat.h"
118 #include "mfw_tim.h"
119 #include "mfw_mme.h"
120
121 #include "dspl.h"
122
123 #include "MmiMmi.h"
124 #include "MmiDummy.h"
125 #include "MmiDialogs.h"
126 #include "MmiLists.h"
127
128 #include "MmiMain.h"
129 #include "MmiStart.h"
130 #include "MmiPins.h"
131 #include "MmiMenu.h"
132 #include "MmiSoftKeys.h"
133 #include "MmiSounds.h"
134 #include "mmiCall.h"
135
136 #include "MmiBookController.h"
137
138
139 #include "MmiIdle.h"
140 #include "Mmiicons.h"
141 #include "mmiSmsIdle.h"
142 #include "mmiSmsBroadcast.h"
143
144 /* SPR759 - SH */
145 #ifdef MMI_HOMEZONE_ENABLED
146 #include "MmiHomezone.h"
147 #endif
148 #include "mmiSmsRead.h" /*SPR 2512*/
149 #include "cus_aci.h"
150
151 #include "prim.h"
152 #ifndef PCM_2_FFS
153 #include "pcm.h"
154 #endif
155
156 #include "gdi.h"
157 #include "audio.h"
158
159 // Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar
160 extern BOOL invalidVm;
161 //Apr 05, 2005 REF: ENH 29994 xdeepadh
162 #ifdef FF_MIDI_RINGER
163 #include "mfw_midi.h"
164 #endif
165
166 /*********************************************************************
167 **********************************************************************
168
169 STATIC MENU WINDOW. DECLARATION
170
171 *********************************************************************
172 **********************************************************************/
173
174 typedef struct
175 {
176 /* administrative data */
177
178 T_MMI_CONTROL mmi_control;
179 T_MFW_HND win;
180 SHORT id;
181 T_MFW_HND parent;
182
183 /* associated handlers */
184
185 T_MFW_HND sms;
186
187 /* internal data */
188
189 BOOL sms_initialised;
190 BOOL sms_store_free;
191 } T_smsidle;
192 //Apr 05, 2005 REF: ENH 29994 xdeepadh
193 #ifdef FF_MIDI_RINGER
194 extern T_call call_data;
195 #endif
196 /*********************************************************************
197
198 External Function Prototypes
199
200 **********************************************************************/
201 extern UBYTE getcurrentSMSTone(void);
202 extern UBYTE getcurrentVoiceTone(void);
203 extern UBYTE Delete_1_2_1_vm_icon;
204 extern UBYTE Display_1_2_1_vm_icon;
205 /* cq15633 Access function returning incoming call alert window status. 23-03-04. MZ */
206 extern BOOL call_IsAlertScreenActive( void );
207 // May 27, 2005 MMI-FIX-29869 x0018858 - Extern function
208 #ifdef FF_MMI_SMS_DYNAMIC
209 extern Check_max_sms_allowed(void);
210 #endif
211 /*********************************************************************
212
213 Function Prototypes
214
215 **********************************************************************/
216 // ADDED BY RAVI - 28-11-2005
217 EXTERN UBYTE getCurrentRingerSettings(void);
218 extern UBYTE sms_check_message_pending(void);
219 // END RAVI - 28-11-2005
220
221 static SHORT smsidle_get_new_cb_messages_count(void);
222 static T_smsidle smsidle_data;
223 static int smsidle_sr_status_to_text_id(UBYTE status); /* Marcus: Issue 1170: 07/10/2002 */
224
225
226 // Used to count the number of deleted messages in delete all
227 SHORT g_ListLength2;
228 static char status_report[160]; /* Marcus: Issue 1170: 07/10/2002 */
229
230 static T_MFW_HND smsidle_create (T_MFW_HND parent);
231 static void smsidle_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
232 int smsidle_sms_cb (MfwEvt e, MfwWin *w);
233
234 /*******************************************************************************
235
236 $Function: smsidle_start
237
238 $Description: This function will be call once.It is create a static sms handle
239
240 $Returns: mfw window handler
241
242 $Arguments: parent_window - Parent window handler
243 param - optional data
244
245 *******************************************************************************/
246
247 T_MFW_HND smsidle_start(T_MFW_HND parent_window, void *param)
248 {
249 T_MFW_HND win;
250
251 TRACE_FUNCTION ("smsidle_start()");
252
253 win = smsidle_create (parent_window);
254
255 if (win NEQ NULL)
256 {
257 SEND_EVENT (win, E_INIT, 0, NULL);
258 }
259 return win;
260 }
261
262 /*******************************************************************************
263
264 $Function: smsidle_create
265
266 $Description: Create sms Idle window
267
268 $Returns: mfw window handler
269
270 $Arguments: parent_window - Parent window handler
271
272 *******************************************************************************/
273 static T_MFW_HND smsidle_create(MfwHnd parent_window)
274 {
275 T_smsidle * data = &smsidle_data;
276 T_MFW_WIN * win;
277
278 TRACE_FUNCTION ("smsidle_create()");
279
280 /*
281 * Create window handler
282 */
283
284 if (data->win EQ NULL)
285 {
286 data->win =
287 win_create (parent_window, 0, 0, NULL);
288 if (data->win EQ NULL)
289 {
290 return NULL;
291 }
292 }
293 else
294 {
295 TRACE_EVENT ("smsidle_create() called twice");
296 return NULL;
297 }
298
299 /*
300 * connect the dialog data to the MFW-window
301 */
302
303 data->mmi_control.dialog = (T_DIALOG_FUNC)smsidle_exec_cb;
304 data->mmi_control.data = data;
305 win = (T_MFW_WIN *)((T_MFW_HDR *)data->win)->data;
306 win->user = (void *)data;
307 data->parent = parent_window;
308
309 /*
310 * return window handle
311 */
312
313 win_show(data->win);
314 return data->win;
315 }
316
317 /*******************************************************************************
318
319 $Function: smsidle_destroy
320
321 $Description: Destroy the sms Idle window.
322
323 $Returns: none
324
325 $Arguments: none
326
327 *******************************************************************************/
328 void smsidle_destroy(void)
329 {
330 T_MFW_WIN * win_data;
331 MfwHnd own_window;
332 T_smsidle * data;
333
334 own_window = smsidle_data.win;
335
336 TRACE_FUNCTION ("smsidle_destroy()");
337
338 if (own_window)
339 {
340 win_data = (T_MFW_WIN *)((T_MFW_HDR *)own_window)->data;
341 data = (T_smsidle *)win_data->user;
342
343 if (data)
344 {
345 /*
346 * Delete WIN handler
347 */
348 win_delete (data->win);
349
350 /*
351 * Free Memory
352 */
353 /* Memory is static! */
354 }
355 else
356 {
357 TRACE_EVENT ("smsidle_destroy() called twice");
358 return;
359 }
360 }
361 }
362
363
364
365 /*******************************************************************************
366
367 $Function: smsidle_exec_cb
368
369 $Description: Call back function for the sms Idle window.
370
371 $Returns: none
372
373 $Arguments: win - current window
374 event - window event
375 value - unique id
376 parameter - pointer to optional data.
377
378 *******************************************************************************/
379
380 void smsidle_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
381 /* callback handler for events sent to to trigger execution */
382 {
383 T_MFW_WIN * win_data = (T_MFW_WIN *)((T_MFW_HDR *) win)->data;
384 T_smsidle * data = (T_smsidle *)win_data->user;
385 T_MFW_EVENT smsEvents;
386
387 TRACE_FUNCTION ("smsidle_exec_cb()");
388
389 switch (event)
390 {
391 case E_INIT:
392 /* initialization of administrative data */
393 data->id = value;
394
395 /* initialization of the dialog data */
396
397 sms_init(); /* startup sms in MFW */
398
399 smsEvents =
400 E_SMS_MO_AVAIL | E_SMS_CMD_AVAIL | E_SMS_SAVE_AVAIL
401 | E_SMS_MT | E_SMS_MO | E_SMS_MT_RECEIVED | E_SMS_STATUS
402 | E_SMS_MEM | E_SMS_OK | E_SMS_ERR | E_SMS_BUSY
403 | E_SMS_MEM_FULL | E_SMS_MEM_FREE | E_SMS_RECEIVED | E_SMS_CB
404 | E_SMS_READY | E_SMS_CB_RECEIVED;
405
406
407 data->sms = sms_create(win, smsEvents, (T_MFW_CB) smsidle_sms_cb);
408
409 /* "sms_initialised" indicates that the SMS is ready or not */
410 /*api - 10-05-02 - Set To True so the SMS can be recieved (Event not Generated) */
411 data->sms_initialised = FALSE; /* SMS not ready yet */
412
413 /* "sms_store_free" indicates that the SMS Memory is full or not */
414 /* Set default to True !*/
415 data->sms_store_free = TRUE; // ???
416
417 break;
418 case E_BACK:
419 case E_ABORT:
420 case E_EXIT:
421 smsidle_destroy(); /* there's no default reaction */
422 sms_delete(data->sms);
423 sms_exit(); /* ??? implementation of routine is actually empty */
424 break;
425 default:
426 TRACE_EVENT("unhandled event in smsidle_exec_cb()");
427 return;
428 }
429 }
430 /*******************************************************************************
431
432 $Function: smsidle_message_to_text
433
434 $Description: function to format message information into a text string. SPR2363
435
436 $Returns: none
437
438 $Arguments: message data structure, text buffer(should be at least MAX_EDITOR_LEN
439 chars long)
440
441 *******************************************************************************/
442
443 void smsidle_message_to_text(T_MFW_SMS_MT* SmsMt, char* text_buffer)
444 {
445 T_MFW_PHB_ENTRY pb_entry;
446 // UBYTE input_type, output_type; // RAVI
447 char sms_text_buffer[STANDARD_EDITOR_SIZE];
448 UBYTE index=0;
449 // UBYTE msg_len; // RAVI
450 T_ATB_TEXT main_text, temp_text;
451
452
453
454 /*clear buffers*/
455 memset(sms_text_buffer, 0, STANDARD_EDITOR_SIZE);
456 memset(text_buffer, 0, MAX_EDITOR_LEN);
457
458
459
460
461
462 /*, if new editor use nice string-handling functions*/
463
464 main_text.data = (UBYTE*)text_buffer;
465 /*set up text data stucture for main display string*/
466 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
467 main_text.dcs = ATB_DCS_UNICODE;
468 else
469 main_text.dcs = ATB_DCS_ASCII;
470 ATB_string_Length(&main_text);
471
472
473 /*SPR 2539, if new editor use nice string-handling functions*/
474 /*see if the sender is in the phonebook*/
475 if (bookFindNameInPhonebook((const char*)SmsMt->orig_addr.number, &pb_entry) !=0)
476 { char temp_string[PHB_MAX_LEN];
477
478 memset(temp_string, 0, PHB_MAX_LEN);
479 /*copy name into a text data structure*/
480 if ((pb_entry.name.dcs&0xC0) == MFW_DCS_UCS2 ||pb_entry.name.data[0] == 0x80 )
481 temp_text.dcs = ATB_DCS_UNICODE;
482 else
483 temp_text.dcs = ATB_DCS_ASCII;
484 if (temp_text.dcs != ATB_DCS_UNICODE)
485 {
486 temp_text.data = (UBYTE*)pb_entry.name.data;
487 }
488
489 else
490 { pb_entry.name.len-=2;
491 memcpy(temp_string, &pb_entry.name.data[2], pb_entry.name.len);
492 temp_text.data = (UBYTE*)temp_string;
493 }
494 ATB_string_Length(&temp_text);
495 /*add name text into main display string*/
496 ATB_string_Concat(&main_text, &temp_text);
497 }
498
499
500
501 sms_text_buffer[index++]='\n';
502
503 sms_text_buffer[index++]='0'+SmsMt->sctp.day[0];
504 sms_text_buffer[index++]='0'+SmsMt->sctp.day[1];
505 sms_text_buffer[index++]='/';
506 sms_text_buffer[index++]='0'+SmsMt->sctp.month[0];
507 sms_text_buffer[index++]='0'+SmsMt->sctp.month[1];
508 sms_text_buffer[index++]='/';
509 sms_text_buffer[index++]='0'+SmsMt->sctp.year[0];
510 sms_text_buffer[index++]='0'+SmsMt->sctp.year[1];
511 sms_text_buffer[index++]=',';
512 sms_text_buffer[index++]='\n';
513
514 sms_text_buffer[index++] ='0'+SmsMt->sctp.hour[0];
515 sms_text_buffer[index++]='0'+SmsMt->sctp.hour[1];
516 sms_text_buffer[index++]=':';
517 sms_text_buffer[index++]='0'+SmsMt->sctp.minute[0];
518 sms_text_buffer[index++]='0'+SmsMt->sctp.minute[1];
519 sms_text_buffer[index++]='\n';
520
521 /* if new editor use nice string-handling functions*/
522
523 temp_text.dcs = ATB_DCS_ASCII;
524 temp_text.data = (UBYTE*)sms_text_buffer;
525 ATB_string_Length(&temp_text);
526 ATB_string_Concat(&main_text, &temp_text);
527 // Apr 27, 2004 REF: CRR 21336 Deepa M.D
528 //Check for the Alphabet bits(2nd and 3rd bits) in the DCS.(GSM 03.38 version 5.6.1,Section 4)
529 //Bit 3 and 2 are equal to 1 &0 indicates UCS2 coding
530 if ((SmsMt->dcs&0x0C) == MFW_DCS_UCS2)
531 temp_text.dcs = ATB_DCS_UNICODE;
532 else
533 temp_text.dcs = ATB_DCS_ASCII;
534 temp_text.data = (UBYTE*)SmsMt->sms_msg;
535 ATB_string_Length(&temp_text);
536 /*Add date and time to main display string*/
537 ATB_string_Concat(&main_text, &temp_text);
538
539
540
541 }
542
543
544 /*******************************************************************************
545
546 $Function: smsidle_sms_cb
547
548 $Description: Call back function for the sms Idle window.
549
550 $Returns: none
551
552 $Arguments: event - window event
553 w - current window
554 *******************************************************************************/
555 int smsidle_sms_cb (MfwEvt event, MfwWin *w)
556 /* smsidle's sms event handler */
557 {
558 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header());
559 T_MFW_WIN * win_data = (T_MFW_WIN *)((T_MFW_HDR *)win)->data;
560 T_smsidle * data = (T_smsidle *)win_data->user;
561 UBYTE currentSMSTone;
562 UBYTE currentVoiceTone; /*CQ 10586 - API - 19/06/03 */
563
564 /*cq 15633 get current ringer settings */
565 UBYTE currentRinger = getCurrentRingerSettings();
566
567 /*JVJ SPR1298 Converted to dynamic variable */
568 //May 27, 2005 MMI-FIX-29869 x0018858
569 #ifdef FF_MMI_SMS_DYNAMIC
570 T_MFW_SMS_IDX* msg_list;
571 T_MFW_SMS_IDX* urd_msg_list;
572 #else
573 T_MFW_SMS_IDX* msg_list= (T_MFW_SMS_IDX*)ALLOC_MEMORY(MAX_MESSAGES*sizeof(T_MFW_SMS_IDX));
574 T_MFW_SMS_IDX* urd_msg_list= (T_MFW_SMS_IDX*)ALLOC_MEMORY(MAX_MESSAGES*sizeof(T_MFW_SMS_IDX));
575 #endif
576 SHORT urd_count;
577 // UBYTE alphabet; // RAVI
578 /*JVJ SPR1298 Converted to dynamic variable */
579 char* temp_buffer = NULL;
580 int result = MFW_EVENT_CONSUMED;
581
582 //May 27, 2005 MMI-FIX-29869 x0018858
583 #ifdef FF_MMI_SMS_DYNAMIC
584 Check_max_sms_allowed();
585
586 msg_list = (T_MFW_SMS_IDX*)ALLOC_MEMORY(g_max_messages*sizeof(T_MFW_SMS_IDX));
587 urd_msg_list = (T_MFW_SMS_IDX*)ALLOC_MEMORY(g_max_messages*sizeof(T_MFW_SMS_IDX));
588 #endif
589
590 TRACE_EVENT ("smsidle_sms_cb()");
591
592 switch (event)
593 {
594 case E_SMS_READY:
595 TRACE_EVENT ("E_SMS_READY");
596 /* now sms is now ready for using */
597 data->sms_initialised = TRUE;
598 sms_set_mt_ind(MT_IND_IDX); /* MMI-FIX-17223. Needed for class 0 messages not to be stored in SIM */
599 sms_cb_init(); /*SPR 2470 initialise cell broadcast now SMS has initialised*/
600 smscb_getCBsettings(); /* Get CB info from SIM or phone */
601 #ifdef MMI_HOMEZONE_ENABLED
602 //Jun 14, 2005 REF: MMI-FIX-30439 x0018858
603 //Commented the function call,
604 //homezoneActivateCB(); /* SPR759 - SH - Activate Cell Broadcast channel for homezone */
605 #endif
606
607 break;
608 case E_SMS_MT_RECEIVED: /* new SMS received, automatically saved */
609 case E_SMS_MT: /* new SMS received, NOT automatically saved */
610 {
611
612 /*SPR#1408 - DS - Take the SMS data from MFW. Port of 1669 */
613 T_MFW_SMS_MT *Message = (T_MFW_SMS_MT *) w;
614
615 // check for SMS indicating voice mail.
616 //May 27, 2005 MMI-FIX-29869 x0018858
617 #ifdef FF_MMI_SMS_DYNAMIC
618 urd_count = sms_index_list(MFW_SMS_UNREAD,urd_msg_list,g_max_messages);
619
620 sms_index_list(MFW_SMS_VOICE,msg_list,g_max_messages);
621 #else
622 urd_count=sms_index_list(MFW_SMS_UNREAD,urd_msg_list,MAX_MESSAGES);
623
624 sms_index_list(MFW_SMS_VOICE,msg_list,MAX_MESSAGES);
625 #endif
626 TRACE_EVENT_P4("urd_count %d urd_msg_list-> index %d stat %d msg_type %d",
627 urd_count,urd_msg_list[0].index,urd_msg_list[0].stat,urd_msg_list[0].msg_type);
628
629 TRACE_EVENT_P2("msg_type: %d, Message->voicemail: %d", msg_list[0].msg_type, Message->voicemail);
630
631 //Check SMS indicating voice mail is the received SMS, by checking index is the same.
632 /*SPR#1408 - DS - Added check for voicemail flag.
633 *For E_SMS_MT_RECEIVED messages the MFW flags the message as a voicemail by setting the
634 *msg_type to MFW_SMS_VOICE. For E_SMS_MT messages the MFW flags as a voicemail by
635 *setting a boolean in the SMS MT structure. Port of 1669 (then modified).
636 */
637 if ( ( (event == E_SMS_MT_RECEIVED) && (msg_list[0].msg_type == MFW_SMS_VOICE) ) ||
638 ( (event == E_SMS_MT) && (Message->voicemail == TRUE) ) )
639 {
640 if(iconsGetState(iconIdVoice) == ICON_VISIBLE || (Delete_1_2_1_vm_icon == TRUE))
641 {
642 if (iconsGetState(iconIdVoice) == ICON_VISIBLE && Display_1_2_1_vm_icon == TRUE)
643 {
644 // one-2-one only functionality, do nothing as icon is already being displayed.
645 break;
646 }
647 else
648 {
649 Delete_1_2_1_vm_icon = FALSE;
650 Display_1_2_1_vm_icon = FALSE;
651 iconsDeleteState(iconIdVoice);
652 }
653 }
654 else
655 {
656 iconsSetState(iconIdVoice); /* display voice mail icon.*/
657 //Apr 05, 2005 REF: ENH 29994 xdeepadh
658 //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh
659 //Play the SMS tone alert
660 #ifdef FF_MIDI_RINGER
661 mfw_ringer_start(AS_RINGER_MODE_SMS,false,sounds_midi_ringer_start_cb);
662 #else
663 /*CQ 10586 - API - 19/06/03 - Play Adio buzzer when new voice mail received*/
664 currentVoiceTone = getcurrentVoiceTone();
665 #ifdef FF_MMI_RINGTONE /* MSL SMS Tone Play */
666 audio_PlaySoundID( AUDIO_BUZZER, SMSTONE_SELECT, 200, AUDIO_PLAY_ONCE );
667 #else
668 /* RAVI - 20-1-2006 */
669 #ifdef NEPTUNE_BOARD
670 audio_PlaySoundID( AUDIO_BUZZER, currentVoiceTone, 200,
671 AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
672 #else
673 audio_PlaySoundID( AUDIO_BUZZER, currentVoiceTone, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
674 #endif
675
676 #endif
677 #endif
678 mme_backlightEvent(BL_INCOMING_SMS);
679 }
680 idleEvent(IdleUpdate); /* update the idle screen.*/
681
682 // Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar
683 // Check if this voice mail sms is marked for deletion (belonging to group "1100")
684 if(msg_list[0].stat == MFW_SMS_VOICEMSG_DELETE)
685 {
686 //Delete this voice mail sms and set 'invalidVm' flag to FALSE
687 sms_msg_delete(msg_list[0].index);
688 invalidVm = FALSE;
689 }
690 }
691 else if(urd_count > 0 && urd_msg_list[0].stat == MFW_SMS_UNREAD && (event != E_SMS_MT))
692 {
693 /* set the status: The sms icon and the string*/
694 /* "message(s) received" will be displayed */
695 iconsSetState(iconIdSMS); /* Indicate SMS delivery to MS-User. */
696 idleEvent(IdleNewSmsMessage);
697 //Apr 05, 2005 REF: ENH 29994 xdeepadh
698 //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh
699 //Play the SMS tone alert
700 //If SMS is recieved , while in call screen,dont play the tone.
701 #ifdef FF_MIDI_RINGER
702
703 if((!(call_data.calls.numCalls)))
704 {
705 mfw_ringer_start(AS_RINGER_MODE_SMS,false,sounds_midi_ringer_start_cb);
706 }
707 #else
708 currentSMSTone = getcurrentSMSTone();
709 #ifdef FF_MMI_RINGTONE /* MSL SMS Tone Play */
710 audio_PlaySoundID( AUDIO_BUZZER, SMSTONE_SELECT, 200, AUDIO_PLAY_ONCE );
711 #else
712 /* RAVI - 20-1-2006 */
713 #ifdef NEPTUNE_BOARD
714 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone,
715 getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
716 #else
717 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
718 #endif
719
720 #endif
721 #endif
722 /* cq15633 If the Incoming call alert screen is active continue with the incoming call ringer after playing the
723 the SMS received tone. 23-03-04 MZ. */
724 //Apr 05, 2005 REF: ENH 29994 xdeepadh
725 #ifndef FF_MIDI_RINGER
726 if(TRUE == call_IsAlertScreenActive())
727 {
728 #ifdef FF_MMI_RINGTONE /* MSL SMS Tone Play */
729 audio_PlaySoundID(AUDIO_BUZZER, SMSTONE_SELECT, 0 , AUDIO_PLAY_INFINITE);
730 #else
731 /* RAVI - 20-1-2006 */
732 /* Silent Implementation */
733 #ifdef NEPTUNE_BOARD
734 audio_PlaySoundID(AUDIO_BUZZER, currentRinger,
735 getCurrentVoulmeSettings(), AUDIO_PLAY_INFINITE);
736 #else
737 audio_PlaySoundID(AUDIO_BUZZER, currentRinger, 0 , AUDIO_PLAY_INFINITE);
738 #endif
739 /* END RAVI */
740
741 #endif
742 }
743 #endif
744
745 mme_backlightEvent(BL_INCOMING_SMS);
746 }
747 /*NM p029*/
748 /* API - Implemented NM changes from 3.3.3 mainline to show class 0 SMS on idle screen */
749 else if(event == E_SMS_MT) /* this sms identifier "E_SMS_MT" is not saved on the SIM */
750 {
751 /* take the SMS data from MFW */
752 T_MFW_SMS_MT *Message = (T_MFW_SMS_MT *) w;
753 char* temp_buffer_sms = (char*)ALLOC_MEMORY(MAX_EDITOR_LEN);
754 /* Marcus: Issue 1650: 28/01/2003: Start */
755 TRACE_EVENT ("E_SMS_MT");
756 /* check for the class 0 message */
757 TRACE_EVENT_P1("dcs: 0x%02X", Message->dcs);
758 /*if memory allocation successful*/
759
760 if (temp_buffer_sms != NULL)
761 {
762 if ((Message->dcs & TEXT_CLASS_GIVEN) &&
763 ((Message->dcs & TEXT_CLASS_MASK) == TEXT_CLASS_0))
764 {
765 TRACE_EVENT ("Class 0 message");
766
767 /*
768 ** SPR#1745 NDH Text from ACI may be compressed. if so
769 ** the text will need to be converted to ASCII before it can
770 ** be displayed properly
771 */
772 if (Message->dcs & TEXT_COMPRESSED)
773 {
774
775 TRACE_EVENT ("text_compressed");
776
777 /*
778 ACI already (in case of 7bit-dcs!) extract the 7 bit to 8 bit,
779 so this is what we get and we have just only to decode from
780 7Bit-Default to ASCII
781 */
782
783 /*SPR 2512, convert message into a text string and then send to idle for display*/
784 smsidle_message_to_text(Message, temp_buffer_sms);
785 addCBCH(temp_buffer_sms, IdleNewSmsMessage);
786
787
788
789
790 }
791 else
792 {
793 TRACE_EVENT ("text_uncompressed");
794
795
796 /*SPR 2512, convert message into a text string and then send to idle for display*/
797 smsidle_message_to_text(Message, temp_buffer_sms);
798 addCBCH(temp_buffer_sms, IdleNewSmsMessage);
799
800
801 }
802 /*
803 ** SPR#1745 - End
804 */
805 /*CQ10826 - API - 27/06/03 - Add audio indication for class 0 SMS*/
806 //Apr 05, 2005 REF: ENH 29994 xdeepadh
807 //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh
808 #ifdef FF_MIDI_RINGER
809 mfw_ringer_start(AS_RINGER_MODE_SMS,false,sounds_midi_ringer_start_cb);
810 #else
811 currentSMSTone = getcurrentSMSTone();
812 #ifdef FF_MMI_RINGTONE /* MSL SMS Tone Play */
813 audio_PlaySoundID( AUDIO_BUZZER, SMSTONE_SELECT, 200, AUDIO_PLAY_ONCE );
814 #else
815 /* RAVI - 20-1-2006 */
816 #ifdef NEPTUNE_BOARD
817 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone,
818 getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
819 #else
820 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
821 #endif
822 /* END RAVI */
823
824 #endif
825 #endif
826 mme_backlightEvent(BL_INCOMING_SMS);
827 /*CQ10826 - END*/
828
829 }
830
831
832 /*temp_buffer_sms will be freed in editor callback*/
833
834 }
835 }
836 /*NM p029 end*/
837 }
838 break;
839 case E_SMS_CB: /* new CBCH received */
840 {
841 // USHORT i; // RAVI
842 SHORT geograhical_scope = (SHORT)0xC000;
843
844 T_MFW_SMS_CB *Message = (T_MFW_SMS_CB *)w;
845
846 TRACE_EVENT ("E_SMS_CB");
847
848 temp_buffer = (char*)ALLOC_MEMORY(MAX_CBMSG_LEN);
849 memset(temp_buffer, '\0', MAX_CBMSG_LEN);
850
851 //check: does the incoming CB indicates a immediate scope
852 if (! (Message->sn & geograhical_scope) )
853 {
854 //Immediate scope
855 // API - 859 - German characters were not visable in the CB message
856 TRACE_EVENT("Immediate Scope");
857
858 // API - 859 - Convert the the incoming GSM Text to ASCII
859 /*SPR2175, use new function for conversion*/
860 ATB_convert_String(Message->cb_msg, MFW_DCS_8bits, Message->msg_len,
861 temp_buffer, MFW_ASCII, MAX_CBMSG_LEN, FALSE);
862
863 /* SPR 2429, removed search for terminating character*/
864
865 #ifdef MMI_HOMEZONE_ENABLED // SH 11/12/01
866 /* SPR759 - SH - Homezone: check to see if CB gives us the coordinates of the centre of the current cell */
867
868 if (Message->msg_id==HZ_IDENTIFIER)
869 {
870 homezoneCBData(Message->cb_msg);
871 }
872 else
873 {
874 #endif // HOMEZONE
875
876 //display now on the idle screen
877
878 addCBCH(temp_buffer, IdleNewCBImmediateMessage);
879 statusCBCH(TRUE);
880 #ifdef MMI_HOMEZONE_ENABLED
881 } /* SPR759 - SH */
882 #endif
883 }
884 else //Normal scope
885 {
886 TRACE_EVENT("Normal Scope");
887 //only for single- and the last page of mulitpages
888 //other pages have not the termination "0x00D"
889
890 // API - 859 - Convert the the incoming GSM Text to ASCII
891 /*SPR2175, use new function for conversion*/
892 ATB_convert_String(Message->cb_msg, MFW_DCS_8bits, Message->msg_len,
893 temp_buffer, MFW_ASCII, MAX_MSG_LEN, FALSE);
894
895 memcpy(Message->cb_msg, temp_buffer, MAX_CBMSG_LEN);
896
897 /* SPR 2429, removed search for terminating character*/
898 {
899 Message->cb_msg[MAX_CBMSG_LEN - 1 ]='\0'; // RAVI - Changed as MAX_CBMSG_LEN - 1.
900 }
901
902 //indicate on the idle screen the new incoming cb
903 addCBCH( NULL, IdleNewCBNormalMessage );
904 statusCBCH(TRUE);
905
906 //save the incoming cb messages in the fifo
907 sms_new_incoming_cb (Message);
908
909 }
910 FREE_MEMORY((void*)temp_buffer,MAX_CBMSG_LEN);
911 }
912 break;
913
914 case E_SMS_MEM_FULL:
915 /* the memory of SMS is FULL !!*/
916 data->sms_store_free = FALSE;
917
918 /* sendevent IDLE_UPDATE; */
919 SEND_EVENT(idle_get_window(),IDLE_UPDATE,0,0);
920 break;
921 case E_SMS_MEM_FREE:
922 /* the memory of SMS is FREE */
923 data->sms_store_free = TRUE;
924
925 /* sendevent IDLE_UPDATE; */
926 SEND_EVENT(idle_get_window(),IDLE_UPDATE,0,0);
927 /* ??? */
928
929 break;
930 case E_SMS_STATUS: /* status report from service center */
931 /* Marcus: Issue 1170: 07/10/2002: Start */
932 {
933 T_MFW_SMS_STATUS *sms_status = (T_MFW_SMS_STATUS *)w;
934 TRACE_EVENT("E_SMS_STATUS");
935 //Apr 05, 2005 REF: ENH 29994 xdeepadh
936 //Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh
937 //Play the SMS tone alert for status report indication
938 #ifdef FF_MIDI_RINGER
939 mfw_ringer_start(AS_RINGER_MODE_SMS,false,sounds_midi_ringer_start_cb);
940 #else
941 currentSMSTone = getcurrentSMSTone();
942 #ifdef FF_MMI_RINGTONE /* MSL SMS Tone Play */
943 audio_PlaySoundID( AUDIO_BUZZER, SMSTONE_SELECT, 200, AUDIO_PLAY_ONCE );
944 #else
945 /* RAVI - 20-1-2006 */
946 #ifdef NEPTUNE_BOARD
947 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone,
948 getCurrentVoulmeSettings(), AUDIO_PLAY_ONCE );
949 #else
950 audio_PlaySoundID( AUDIO_BUZZER, currentSMSTone, 200, AUDIO_PLAY_ONCE );
951 #endif
952 /* END RAVI */
953
954 #endif
955 #endif
956
957 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
958 {
959 /*
960 * There is no support for Chinese in the addCBCH function,
961 * so will be problems with class 0 SMS messages and with cell
962 * broadcast messages that need to be addressed anyway.
963 * A new issue will be raised to handle this problem.
964 */
965 }
966 else
967 {
968 memset(status_report, '\0', sizeof(status_report));
969 strcpy(status_report, MmiRsrcGetText(TxtSRR));
970 strcat(status_report, ": ");
971 strcat(status_report, MmiRsrcGetText(TxtStatus));
972 strcat(status_report, ": ");
973 strcat(status_report, MmiRsrcGetText(smsidle_sr_status_to_text_id(sms_status->status)));
974 sprintf(&status_report[strlen(status_report)], " (%u): ", sms_status->status);
975 #ifdef NO_ASCIIZ
976 if (sms_status->addr.len)
977 {
978 memcpy(&status_report[strlen(status_report)], sms_status->addr.tag, sms_status->addr.len);
979 strcat(status_report, " ");
980 }
981 #else
982 if (strlen(sms_status->addr.tag))
983 {
984 strcat(status_report, sms_status->addr.tag);
985 strcat(status_report, " ");
986 }
987 #endif
988 if (sms_status->addr.ton == MFW_TON_INTERNATIONAL)
989 strcat(status_report, "+");
990
991 strcat(status_report, sms_status->addr.number);
992 sprintf(&status_report[strlen(status_report)],
993 ": %0u%0u/%0u%0u/%0u%0u %0u%0u:%0u%0u:%0u%0u (%s %u)",
994 sms_status->rctp.day[0],
995 sms_status->rctp.day[1],
996 sms_status->rctp.month[0],
997 sms_status->rctp.month[1],
998 sms_status->rctp.year[0],
999 sms_status->rctp.year[1],
1000 sms_status->rctp.hour[0],
1001 sms_status->rctp.hour[1],
1002 sms_status->rctp.minute[0],
1003 sms_status->rctp.minute[1],
1004 sms_status->rctp.second[0],
1005 sms_status->rctp.second[1],
1006 MmiRsrcGetText(TxtMessage),
1007 sms_status->msg_ref);
1008
1009 addCBCH(status_report, IdleNewSmsMessage);
1010
1011 //display now on the idle screen
1012 statusCBCH(TRUE);
1013 }
1014 }
1015 /* Marcus: Issue 1170: 07/10/2002: End */
1016
1017 break;
1018 case E_SMS_MEM: /* indicates status of memory */
1019 /* not used */
1020 break;
1021 case E_SMS_MO: /* SMS sending has started */
1022 /* not used */
1023 case E_SMS_OK:
1024 /* Only happens when an SMS message is deleted. */
1025
1026 break;
1027 case E_SMS_BUSY:
1028 TRACE_EVENT ("E_SMS_BUSY");
1029 break;
1030 case E_SMS_SAVE_AVAIL:
1031 break;
1032 case E_SMS_CMD_AVAIL:
1033 break;
1034 case E_SMS_ERR:
1035 TRACE_EVENT ("E_SMS_ERR");
1036 break;
1037 default:
1038 TRACE_EVENT("unhandled event in smsidle_sms_cb()");
1039 result = MFW_EVENT_PASSED;
1040 break;
1041 }
1042 //May 27, 2005 MMI-FIX-29869 x0018858
1043 #ifdef FF_MMI_SMS_DYNAMIC
1044 FREE_MEMORY((void*)msg_list,g_max_messages*sizeof(T_MFW_SMS_IDX));
1045 FREE_MEMORY((void*)urd_msg_list,g_max_messages*sizeof(T_MFW_SMS_IDX));
1046 #else
1047 FREE_MEMORY((void*)msg_list,MAX_MESSAGES*sizeof(T_MFW_SMS_IDX));
1048 FREE_MEMORY((void*)urd_msg_list,MAX_MESSAGES*sizeof(T_MFW_SMS_IDX));
1049 #endif
1050
1051 return result;
1052 }
1053
1054 /*******************************************************************************
1055
1056 $Function: smsidle_get_memory_full
1057
1058 $Description: Call back function for the sms Idle window.
1059
1060 $Returns: sms memory status.
1061
1062 $Arguments: none
1063
1064 *******************************************************************************/
1065
1066 BOOL smsidle_get_memory_full(void)
1067 {
1068 return (!smsidle_data.sms_store_free);
1069 }
1070
1071 /*******************************************************************************
1072
1073 $Function: smsidle_get_new_cb_messages_count
1074
1075 $Description: Call back function for the sms Idle window.
1076
1077 $Returns: sms count.
1078
1079 $Arguments: none
1080 *******************************************************************************/
1081
1082 SHORT smsidle_get_new_cb_messages_count(void)
1083 {
1084 if (smsidle_get_ready_state())
1085 {
1086 return smscb_get_new_cb_messages_count();
1087 }
1088 else
1089 {
1090 return 0;
1091 }
1092 }
1093
1094
1095 /*******************************************************************************
1096
1097 $Function: smsidle_get_ready_state
1098
1099 $Description: This function can be call from anywhere to get the information
1100 about the "sms_initialised"
1101
1102 $Returns: sms status
1103
1104 $Arguments: none
1105
1106 *******************************************************************************/
1107 BOOL smsidle_get_ready_state(void)
1108 {
1109 return (smsidle_data.sms_initialised);
1110 }
1111
1112 //GW SPR#1035 - Added SAT changes
1113 /*******************************************************************************
1114
1115 $Function: smsidle_unset_ready_state
1116
1117 $Description: this unset the flat "sms_initialised"
1118
1119 $Returns: sms status
1120
1121 $Arguments: none
1122
1123 *******************************************************************************/
1124 void smsidle_unset_ready_state(void)
1125 {
1126 smsidle_data.sms_initialised = FALSE;
1127 }
1128
1129 /*******************************************************************************
1130
1131 $Function: smsidle_get_unread_sms_available
1132
1133 $Description: This function allows an external process to determine the
1134 received and unread SMS PP message status.
1135
1136 $Returns: sms status.
1137
1138 $Arguments: none
1139
1140 *******************************************************************************/
1141 BOOL smsidle_get_unread_sms_available(void)
1142 { SHORT unread_sms_count;
1143
1144 //May 27, 2005 MMI-FIX-29869 x0018858
1145 #ifdef FF_MMI_SMS_DYNAMIC
1146 //begin
1147 qAT_PlusCPMS(CMD_SRC_LCL);
1148 Check_max_sms_allowed();
1149 //End
1150 #endif
1151 TRACE_FUNCTION("smsidle_get_unread_sms_available() ");
1152 if (smsidle_get_ready_state())
1153 {
1154 //API - 14-01-03 - 1403 - Remove the call to iconsSetState(iconIdSMS) to indicate new SMS incall
1155 unread_sms_count = sms_message_count(MFW_SMS_UNREAD);
1156
1157 return (unread_sms_count > 0 && (unread_sms_count > sms_message_count(MFW_SMS_VOICE)));
1158 }
1159 else
1160 {
1161
1162 iconsDeleteState(iconIdSMS);
1163 return FALSE;
1164 }
1165 }
1166
1167 /*******************************************************************************
1168
1169 $Function: smsidle_display_sms_status
1170
1171 $Description: Interogates the SMS unread message count and displays
1172 the result using the SMS icon and an information text.
1173
1174 $Returns: id of text string to be displayed
1175
1176 $Arguments: noOfMsgs - returns number of unread messages (or 0 if there are no
1177 messages or the memory is full).
1178
1179 GW 02/10/01 - Modified code to work with chinese unicode text.
1180 *******************************************************************************/
1181 int smsidle_display_sms_status(int* noOfMsgs)
1182 {
1183 SHORT SmsMsgCount;
1184 SHORT SmsVmailCount;
1185 int txtMsg;
1186
1187 TRACE_FUNCTION("smsidle_display_sms_status() ");
1188 *noOfMsgs = 0;
1189 txtMsg = TxtNull;
1190
1191 if (smsidle_get_ready_state())
1192 {
1193 SmsVmailCount = sms_message_count(MFW_SMS_VOICE);
1194
1195
1196 SmsMsgCount = sms_message_count (MFW_SMS_UNREAD);
1197
1198 /* Envelope icon and text only appear if a non-Voicemail SMS exists. */
1199
1200 if (smsidle_get_memory_full())
1201 {
1202 /* x0018858 24 Mar, 2005 MMI-FIX-11321
1203 Added a condition to check for any pending message.
1204 */
1205 //begin -x0018858 24 Mar, 2005 MMI-FIX-11321
1206 if( TRUE == sms_check_message_pending())
1207 {
1208 txtMsg = TxtSmsWaiting;
1209 }//end. x0018858 24 Mar, 2005 MMI-FIX-11321
1210 else
1211 {
1212 txtMsg = TxtSmsListFull;
1213 }
1214 }
1215 else if ((SmsMsgCount > 0) && (SmsMsgCount > SmsVmailCount))
1216 {
1217 txtMsg = TxtNewMessage;
1218 *noOfMsgs = SmsMsgCount;
1219
1220 }
1221 else
1222 {
1223 iconsDeleteState(iconIdSMS); /* Turn off SMS icon. */
1224 txtMsg = TxtNull;
1225 }
1226
1227 iconsShow();
1228 }
1229 return (txtMsg);
1230 }
1231
1232 /*******************************************************************************
1233
1234 $Function: smsidle_get_unread_smscb_available
1235
1236 $Description: This function allows an external process to determine the
1237 received SMS CB message status.
1238
1239 $Returns: execution status
1240
1241 $Arguments: none
1242
1243 *******************************************************************************/
1244 BOOL smsidle_get_unread_smscb_available(void)
1245 {
1246 if (smsidle_get_ready_state())
1247 return (smsidle_get_new_cb_messages_count() > 0);
1248 else
1249 return FALSE;
1250 }
1251
1252 /*******************************************************************************
1253
1254 $Function: smsidle_display_smscb_status
1255
1256 $Description: Interogates the SMS CB message received status and
1257 returns the resulting string to the caller.
1258
1259 $Returns: none
1260
1261 $Arguments: TextString - Text String
1262 *******************************************************************************/
1263 void smsidle_display_smscb_status(char *TextString)
1264 {
1265 SHORT count;
1266
1267 /* count the unread cb messagesc */
1268 count = smsidle_get_new_cb_messages_count();
1269
1270
1271 /* the unread CB should have a high priority than */
1272 /* the class 0 CB */
1273 if (count > 0)
1274 {
1275 sprintf(TextString, "%d %s\0",count, GET_TEXT(TxtNewCbMessage));
1276 iconsSetState(iconIdSMS); /* Indicate SMS delivery to MS-User. */
1277
1278 }
1279 }
1280 /* Marcus: Issue 1170: 07/10/2002: Start */
1281 /*******************************************************************************
1282
1283 $Function: smsidle_sr_status_to_text_id
1284
1285 $Description: Returns the text ID for the given status report status
1286
1287 $Returns: int : text ID
1288
1289 $Arguments: UBYTE: SMS-STATUS-REPORT status
1290 *******************************************************************************/
1291 static int smsidle_sr_status_to_text_id(UBYTE status)
1292 {
1293 int ret = TxtError;
1294 UBYTE group = ((status & 0x60) >> 5);
1295 UBYTE value = (status & 0x1F);
1296 switch (group)
1297 {
1298 case 0: // Short message transaction completed
1299 if ((value >= 3) && (value <= 0x0F))
1300 ret = TxtError;
1301 else
1302 ret = TxtDelivered;
1303 break;
1304
1305 case 1: // Temporary error, SC still trying to transfer SM
1306 if ((value >= 6) && (value <= 0x0F))
1307 ret = TxtError;
1308 else
1309 ret = TxtTempError;
1310 break;
1311
1312 case 2: // Permanent error, SC is not making any more transfer attempts
1313 case 3: // Temporary error, SC is not making any more transfer attempts
1314 ret = TxtError;
1315 break;
1316 }
1317 return ret;
1318 }
1319 /* Marcus: Issue 1170: 07/10/2002: End */
1320
1321
1322
1323
1324
1325