FreeCalypso > hg > tcs211-l1-reconst
comparison g23m/condat/ms/src/bmi/mmiSmsBroadcast.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:509db1a7b7b8 |
---|---|
1 | |
2 /******************************************************************************* | |
3 | |
4 CONDAT (UK) | |
5 | |
6 ******************************************************************************** | |
7 | |
8 This software product is the property of Condat (UK) Ltd and may not be | |
9 disclosed to any third party without the express permission of the owner. | |
10 | |
11 ******************************************************************************** | |
12 | |
13 $Project name: Basic MMI | |
14 $Project code: BMI (6349) | |
15 $Module: SMS Cell Broadcast | |
16 $File: MmiSmsBroadcast.c | |
17 $Revision: 1.0 | |
18 | |
19 $Author: Condat(UK) | |
20 $Date: 22/02/01 | |
21 | |
22 ******************************************************************************** | |
23 | |
24 Description: | |
25 | |
26 Implementation of MMI SMS Cell Broadcast dynamic menu handling | |
27 | |
28 ******************************************************************************** | |
29 | |
30 $History: MmiSmsBroadcast.c | |
31 | |
32 Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar | |
33 Description: MFW memory size variable changed from U16 -> U32 | |
34 Solution: In function 'smscb_setCBsettings' variable 'd' is checked for limit and | |
35 duplication is removed. This was the reason for crash. | |
36 | |
37 Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
38 Bug:Clenup of sprintf used for tracing | |
39 Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX | |
40 | |
41 25/10/00 Original Condat(UK) BMI version. | |
42 Issue Number : SPR#12722 on 29/03/04 by Deepa M.D | |
43 Apr 29, 2004 REF: CRR 11630 Deepa M.D | |
44 Fix:When a new entry channelId is added ,the whole list of channelIds are refreshed, | |
45 and the corresponding names are displayed in the list. | |
46 | |
47 $End | |
48 *******************************************************************************/ | |
49 | |
50 | |
51 /******************************************************************************* | |
52 | |
53 Include Files | |
54 | |
55 *******************************************************************************/ | |
56 | |
57 #define ENTITY_MFW | |
58 | |
59 /* includes */ | |
60 #include <string.h> | |
61 #include <stdio.h> | |
62 #include <stdlib.h> | |
63 | |
64 #include "typedefs.h" | |
65 #include "vsi.h" | |
66 #include "pei.h" | |
67 #include "custom.h" | |
68 #include "gsm.h" | |
69 | |
70 #include "custom.h" | |
71 #include "gsm.h" | |
72 #include "vsi.h" | |
73 #include "prim.h" | |
74 #include "mfw_sys.h" | |
75 #include "mfw_mfw.h" | |
76 #include "mfw_win.h" | |
77 #include "mfw_kbd.h" | |
78 /* SPR#1428 - SH - New Editor changes */ | |
79 #ifndef NEW_EDITOR | |
80 #include "mfw_edt.h" | |
81 #endif | |
82 #include "mfw_lng.h" | |
83 #include "mfw_icn.h" | |
84 #include "mfw_phb.h" | |
85 #include "mfw_sim.h" | |
86 #include "mfw_nm.h" | |
87 #include "ksd.h" | |
88 #include "psa.h" | |
89 #include "mfw_sms.h" | |
90 #include "mfw_mnu.h" | |
91 #include "mfw_sat.h" | |
92 #include "mfw_tim.h" | |
93 | |
94 #include "MmiMmi.h" | |
95 #include "MmiDummy.h" | |
96 #include "MmiDialogs.h" | |
97 #include "MmiLists.h" | |
98 | |
99 #include "MmiMain.h" | |
100 #include "MmiStart.h" | |
101 #include "MmiPins.h" | |
102 #include "MmiMenu.h" | |
103 #include "MmiSoftKeys.h" | |
104 | |
105 #include "MmiBookController.h" | |
106 | |
107 #include "mmiSmsBroadcast.h" | |
108 #include "mmiSmsIdle.h" | |
109 /* SPR#1428 - SH - New Editor changes */ | |
110 #ifdef NEW_EDITOR | |
111 #include "ATBCommon.h" | |
112 #include "ATBDisplay.h" | |
113 #include "ATBEditor.h" | |
114 #include "AUIEditor.h" | |
115 #else | |
116 #include "MmiEditor.h" | |
117 #endif | |
118 #include "MmiIdle.h" | |
119 | |
120 #include "cus_aci.h" | |
121 | |
122 #include "mmiColours.h" | |
123 | |
124 /* BEGIN ADD: Sumit : Req ID: : 31-Mar-2005*/ | |
125 #ifndef NEPTUNE_BOARD | |
126 /* END ADD: Sumit : Req ID: : 31-Mar-2005*/ | |
127 #include "ffs/ffs.h" /*SPR 1920*/ | |
128 /* BEGIN ADD: Sumit : Req ID: : 31-Mar-2005*/ | |
129 #else | |
130 #include "ffs.h" | |
131 #endif | |
132 /* END ADD: Sumit : Req ID: : 31-Mar-2005*/ | |
133 | |
134 #ifdef DEBUG_SMS_CB | |
135 #include "MmiHomezone.h" | |
136 #endif | |
137 #include "MmiSettings.h" | |
138 | |
139 | |
140 | |
141 #define MENU_TEXT_LENGTH 16 /* count of chars to be displayed in one list entry */ | |
142 | |
143 /* SH - moved to .h file */ | |
144 | |
145 /*MC SPR 1920,FFS CB Topic name data structure*/ | |
146 typedef struct | |
147 { | |
148 uint8 name[CB_TAG_LENGTH]; | |
149 | |
150 } T_SMSCB_TOPIC_TAG; | |
151 | |
152 /* storage for Cell Broadcast lists */ | |
153 typedef struct | |
154 { | |
155 T_SMSCB_ATT cb_attributes[MAX_MIDS]; /* list of attributes of messages stored in fifo */ | |
156 /*SPR 1920, replaced cb_buffer with an array of dynically allocated strings */ | |
157 char* messages[MAX_STORED_PAGES]; | |
158 ListMenuData *cb_list_attributes; //atttributes for the menu list | |
159 | |
160 T_SMSCB_STATUS current_status; /*read status for all messages */ | |
161 | |
162 UBYTE found_mid; //indicate the already existing cb in the fifo | |
163 UBYTE clear_mid; //indicate the deleting process | |
164 UBYTE result_used; //to update the used-pointer, after deleting the cb message | |
165 UBYTE total_number; //this include the total number of messages in the fifo; need for Menu-list | |
166 | |
167 UBYTE multipage_number; //this include the total page of a particular multipage; need for showing msg. | |
168 UBYTE *multipage; //pointer to the first page of multipage | |
169 UBYTE start_used; //indicate the start point of the multipage, used for the searching | |
170 UBYTE end_used; //indicate the end point of the multipage, used for the searching | |
171 | |
172 UBYTE used_pointer; //start point of the free space link list | |
173 UBYTE free_pointer; //start point of the data link list | |
174 | |
175 | |
176 } T_SMSCB_DATA; | |
177 | |
178 | |
179 | |
180 T_SMSCB_DATASTORE g_smscb_data; /* storage for Cell Broadcast Info lists */ | |
181 T_SMSCB_DATA smscb_data; /* storage for Cell Broadcast Message lists */ | |
182 | |
183 | |
184 | |
185 //Attributes of the list menu | |
186 static const MfwMnuAttr sms_cb_menuAttrib = | |
187 { | |
188 &smscb_M_CBArea, | |
189 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
190 -1, /* use default font */ | |
191 NULL, /* with these items */ | |
192 0, /* number of items */ | |
193 COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE | |
194 | |
195 }; | |
196 | |
197 | |
198 #define OFFSET(index) (index*CB_PAGE_LENGTH) | |
199 | |
200 //this shows traces of some variable | |
201 //#define DEBUG_SMS_CB | |
202 | |
203 #ifdef DEBUG_SMS_CB | |
204 UBYTE DEBUG; | |
205 #endif | |
206 | |
207 char* ffs_cb_tag_name(int channel_num, char* name);/*SPR1920, new function header*/ | |
208 //these prototypes belongs to saving cb_messages in the fifo | |
209 UBYTE sms_cb_count_messages ( void ); | |
210 UBYTE sms_cb_count_unread_messages ( void ); | |
211 UBYTE sms_cb_delete_message (USHORT mid); | |
212 UBYTE sms_cb_find_termination (UBYTE *used); | |
213 UBYTE sms_cb_update_free_pointer (UBYTE temp); | |
214 UBYTE sms_cb_search_mid (USHORT mid, SHORT sn); | |
215 UBYTE sms_cb_store_message (T_MFW_SMS_CB *Message); | |
216 UBYTE sms_cb_find_endpoint (USHORT mid, UBYTE end_used); | |
217 UBYTE sms_cb_find_startpoint (USHORT mid, UBYTE end_used); | |
218 UBYTE sms_cb_give_position_of_msg (UBYTE used, UBYTE positon); | |
219 UBYTE sms_cb_overwrite_old_message (T_MFW_SMS_CB *Message); | |
220 | |
221 | |
222 void sms_cb_show_cb_message(UBYTE link_list_position); | |
223 static ListMenuData * sms_cb_create_list (UBYTE number); | |
224 /*SPR 1920, removed header for function sms_cb_select_read*/ | |
225 static void sms_cb_list_cb(T_MFW_HND win, ListMenuData * ListData); | |
226 void sms_cb_store_attributes (UBYTE position, T_MFW_SMS_CB *Message); | |
227 static void sms_cb_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); | |
228 | |
229 /* SPR#1428 - SH - New Editor changes */ | |
230 #ifdef NEW_EDITOR | |
231 void sms_cb_loadEditDefault (T_AUI_EDITOR_DATA *editor_data); | |
232 #else /* NEW_EDITOR */ | |
233 void sms_cb_loadEditDefault (T_EDITOR_DATA *editor_data); | |
234 #endif /* NEW_EDITOR */ | |
235 | |
236 | |
237 /********************************************************************* | |
238 ********************************************************************** | |
239 | |
240 cell broadcast declaration | |
241 | |
242 ********************************************************************* | |
243 **********************************************************************/ | |
244 | |
245 typedef struct | |
246 { | |
247 int index; /* index of selected item in list */ | |
248 } T_CB_index_param; | |
249 | |
250 typedef struct | |
251 { | |
252 int index; /* index of selected item in list */ | |
253 char name[CB_TAG_LENGTH]; /* buffer for name to be associated with topic */ | |
254 char number[CB_MID_LENGTH]; /* buffer for channel number of topic */ | |
255 } T_CB_EDT_MIDEDT_param; | |
256 | |
257 typedef struct | |
258 { | |
259 int index; /* index of selected item in list */ | |
260 char text[CB_TAG_LENGTH]; /* buffer for name to be associated with topic ??? size is dummy */ | |
261 char number[CB_MID_LENGTH]; /* buffer for channel number of topic ??? size is dummy */ | |
262 } T_S_param; /* ??? T_S_param not to be defined here, but in "mmiSmsSend.h"! */ | |
263 | |
264 | |
265 /* IDs used for identification of sources of events */ | |
266 enum { | |
267 smscb_M_CB_ID, | |
268 smscb_M_CB_ACT_ID, | |
269 smscb_M_CB_TOP_ID, | |
270 smscb_M_CB_TOP_CONS_ID, | |
271 smscb_M_CB_TOP_CONS_SEL_ID, | |
272 smscb_CB_ID, | |
273 smscb_CB_TEXTEDT_ID, | |
274 smscb_CB_OPT_ID, | |
275 smscb_CB_OPT_DEL_NOACK_ID, | |
276 smscb_CB_EDT_TEXTEDT_ID, | |
277 smscb_CB_EDT_MIDEDT_ID | |
278 } smscb_ID; | |
279 | |
280 | |
281 | |
282 void msgsExtractPhoneNumber(UBYTE *InputString, UBYTE *Buffer); | |
283 /* forward declaration of local start routines */ | |
284 /*SPR 1920 removed header for smscb_M_CB_ACT_start()*/ | |
285 static T_MFW_HND smscb_M_CB_TOP_start(T_MFW_HND parent_window, void *dummy); | |
286 static T_MFW_HND smscb_M_CB_TOP_CONS_start(T_MFW_HND parent_window, void *dummy); | |
287 static T_MFW_HND smscb_M_CB_TOP_CONS_SEL_start(T_MFW_HND parent_window, T_CB_index_param * parameter); | |
288 static T_MFW_HND smscb_CB_start(T_MFW_HND parent_window, void *dummy); | |
289 static T_MFW_HND smscb_CB_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter); | |
290 static T_MFW_HND smscb_CB_OPT_start(T_MFW_HND parent_window, T_CB_index_param * parameter); | |
291 static T_MFW_HND smscb_CB_OPT_DEL_NOACK_start(T_MFW_HND parent_window, T_CB_index_param * parameter); | |
292 static T_MFW_HND smscb_CB_EDT_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter); | |
293 static T_MFW_HND smscb_CB_EDT_MIDEDT_start(T_MFW_HND parent_window, T_CB_EDT_MIDEDT_param * parameter); | |
294 | |
295 | |
296 void info_screen (T_MFW_HND win, USHORT TextId, USHORT TextId2, T_VOID_FUNC Callback) | |
297 /* present info <TextId> for 3 seconds in a simple infoscreen */ | |
298 { | |
299 | |
300 T_DISPLAY_DATA display_info; | |
301 | |
302 TRACE_FUNCTION ("info_screen()"); | |
303 | |
304 dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TextId, TextId2 , COLOUR_STATUS); | |
305 dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)Callback, THREE_SECS, 0 ); | |
306 display_info.Identifier = 0; | |
307 | |
308 info_dialog (win, &display_info); | |
309 } | |
310 | |
311 /********************************************************************* | |
312 ********************************************************************** | |
313 | |
314 cell broadcast routines DECLARATION | |
315 | |
316 ********************************************************************* | |
317 **********************************************************************/ | |
318 static T_MFW smscb_delete_topic(UBYTE MidOffset); | |
319 /*SPR 1920, removed function temp_smscb_M_CB_ExeRead()*/ | |
320 /* SH moved prototype to header file */ | |
321 | |
322 static void listCreate(MfwHnd Parent, MfwMnuAttr *a , MfwEvt e, ListCbFunc cbFunc) | |
323 { | |
324 | |
325 ListMenuData list_menu_data; | |
326 | |
327 /* initialization of the dialog data */ | |
328 list_menu_data.Attr = a; | |
329 list_menu_data.List = a->items; | |
330 list_menu_data.ListLength = a->nItems;/* Number of entries in list menu. */ | |
331 list_menu_data.ListPosition = 1;/* True cursor position in list menu. */ | |
332 list_menu_data.CursorPosition = 1;/* Cursor position in list snapshot. */ | |
333 list_menu_data.SnapshotSize = 4;/* Number of list entries to view. */ | |
334 list_menu_data.Font = 0; | |
335 list_menu_data.LeftSoftKey = TxtSoftSelect; | |
336 list_menu_data.RightSoftKey = TxtSoftBack; | |
337 /* SPR1428 - SH - Accept menu select key */ | |
338 list_menu_data.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN | KEY_MNUSELECT; | |
339 list_menu_data.Reason = 0; | |
340 list_menu_data.Strings = FALSE; | |
341 list_menu_data.autoDestroy = TRUE; | |
342 | |
343 listDisplayListMenu(Parent, &list_menu_data, cbFunc,0); | |
344 | |
345 } | |
346 // end c020 rsa | |
347 /*SPR1920, removed declarations and functions for menu-handling*/ | |
348 | |
349 | |
350 | |
351 | |
352 /********************************************************************* | |
353 ********************************************************************** | |
354 | |
355 M_CB_ACT DYNAMIC MENU WINDOW. CONTENTS BEHAVIOUR | |
356 | |
357 ********************************************************************* | |
358 **********************************************************************/ | |
359 /******************************************************************************* | |
360 | |
361 $Function: smscb_M_CB_ACT_ExeNo | |
362 | |
363 $Description: | |
364 | |
365 $Returns: none. | |
366 | |
367 $Arguments: | |
368 | |
369 *******************************************************************************/ | |
370 int smscb_M_CB_ACT_ExeNo(MfwMnu* m, MfwMnuItem* i) | |
371 { | |
372 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
373 /*SPR 1920, removed unneccessary variables*/ | |
374 /*GW SPR#2470 Call 'smscb_setCBsettings' so that sAT_PlusCSCB is also called.*/ | |
375 | |
376 settingsSetStatus(SettingsCBDisable, SET_SETTING );/*Remember settings in FFS*/ | |
377 // sms_set_mt_ind(MT_CB_NO_IDX); | |
378 smscb_setCBsettings(SMSCB_SWITCH_OFF); | |
379 | |
380 info_screen(win, TxtDeActivated,TxtNull, NULL); | |
381 | |
382 | |
383 statusCBCH(FALSE); | |
384 | |
385 /* SPR 1920, removed window destruction code*/ | |
386 return MFW_EVENT_CONSUMED; | |
387 } | |
388 | |
389 #ifdef DEBUG_SMS_CB | |
390 T_MFW_HND timer; | |
391 | |
392 int test_tim_cb(MfwEvt event, MfwTim *timer_info) | |
393 { | |
394 int i; | |
395 | |
396 test_function_to_send_cb (); | |
397 tim_delete(timer); | |
398 /***************************Go-lite Optimization changes Start***********************/ | |
399 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
400 for (i=0; i<MAX_STORED_PAGES ; i++) | |
401 { | |
402 TRACE_EVENT_P2("free_index: %d, i:%d", smscb_data.cb_attributes[i].next_link,i); | |
403 } | |
404 /***************************Go-lite Optimization changes end***********************/ | |
405 TRACE_EVENT_P1("count of messages:%d", sms_cb_count_messages ()); | |
406 | |
407 for (i=0; i<MAX_STORED_PAGES ; i++) | |
408 { | |
409 | |
410 TRACE_EVENT_P2("start_page: %d, i:%d", smscb_data.cb_attributes[i].start_page,i); | |
411 } | |
412 | |
413 | |
414 TRACE_EVENT_P1("smscb_data.used_pointer%d", smscb_data.used_pointer); | |
415 TRACE_EVENT_P1("smscb_data.free_pointer%d", smscb_data.free_pointer); | |
416 | |
417 return MFW_EVENT_CONSUMED; | |
418 } | |
419 | |
420 #endif | |
421 /******************************************************************************* | |
422 | |
423 $Function: smscb_M_CB_ACT_ExeYes | |
424 | |
425 $Description: | |
426 | |
427 $Returns: none. | |
428 | |
429 $Arguments: | |
430 | |
431 *******************************************************************************/ | |
432 int smscb_M_CB_ACT_ExeYes(MfwMnu* m, MfwMnuItem* i) | |
433 { | |
434 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
435 /*SPR 1920, removed unneccessary variables*/ | |
436 /*GW SPR#2470 Call 'smscb_setCBsettings' so that sAT_PlusCSCB is also called.*/ | |
437 | |
438 settingsSetStatus(SettingsCBDisable, CLEAR_SETTING );/*Remember settings in FFS*/ | |
439 //sms_set_mt_ind(MT_CB_MSG); | |
440 smscb_setCBsettings(SMSCB_SWITCH_ON); | |
441 | |
442 info_screen(win, TxtActivated,TxtNull, NULL); | |
443 | |
444 | |
445 /*SPR1959, removed declarations and functions for menu-handling*/ | |
446 #ifdef DEBUG_SMS_CB | |
447 timer = tim_create(NULL, 5000, (MfwCb)test_tim_cb); | |
448 tim_start(timer); | |
449 | |
450 | |
451 | |
452 | |
453 | |
454 #endif //DEBUG_SMS_CB | |
455 return MFW_EVENT_CONSUMED; | |
456 } | |
457 | |
458 | |
459 | |
460 | |
461 | |
462 /********************************************************************* | |
463 ********************************************************************** | |
464 | |
465 M_CB_TOP DYNAMIC MENU WINDOW. CONTENTS BEHAVIOUR | |
466 | |
467 ********************************************************************* | |
468 **********************************************************************/ | |
469 /******************************************************************************* | |
470 | |
471 $Function: smscb_M_CB_TOP_ExeConsult | |
472 | |
473 $Description: | |
474 | |
475 $Returns: none. | |
476 | |
477 $Arguments: | |
478 | |
479 *******************************************************************************/ | |
480 int smscb_M_CB_TOP_ExeConsult(MfwMnu* m, MfwMnuItem* i) | |
481 { | |
482 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
483 /*SPR 1920, removed unneccessary variables*/ | |
484 | |
485 | |
486 #ifdef DEBUG_SMS_CB | |
487 UBYTE ii; | |
488 for (ii = 0; ii < MAX_MIDS; ii++) | |
489 { | |
490 /***************************Go-lite Optimization changes Start***********************/ | |
491 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
492 TRACE_EVENT_P2 ("g_smscb_data.CBTopics.entry[0].msg_id:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii); | |
493 /***************************Go-lite Optimization changes end***********************/ | |
494 } | |
495 #endif | |
496 | |
497 | |
498 if (!smsidle_get_ready_state()) | |
499 { | |
500 info_screen(0, TxtSimNot, TxtReady, NULL); | |
501 TRACE_EVENT ("SIM is not ready !!"); | |
502 return; | |
503 } | |
504 | |
505 if (g_smscb_data.CBTopics.length EQ 0) | |
506 { | |
507 info_screen(0, TxtEmptyList,TxtNull, NULL); | |
508 | |
509 TRACE_EVENT ("CellBroadcast Topic-list is empty !!"); | |
510 return; | |
511 } | |
512 | |
513 // selection "Consult": menucreate M_CB_TOP_CONS | |
514 return (int)smscb_M_CB_TOP_CONS_start (win, NULL); | |
515 } | |
516 T_CB_index_param CB_index_param;/*MC SPR1920 added global variable*/ | |
517 /******************************************************************************* | |
518 | |
519 $Function: smscb_M_CB_TOP_ExeAddNew | |
520 | |
521 $Description: | |
522 | |
523 $Returns: | |
524 | |
525 $Arguments: | |
526 | |
527 *******************************************************************************/ | |
528 int smscb_M_CB_TOP_ExeAddNew(MfwMnu* m, MfwMnuItem* i) | |
529 { | |
530 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
531 /*SPR 1920, removed unneccessary variables*/ | |
532 int index; | |
533 | |
534 // selection "Add": call sms_cb_edit_topic(List=CBTopics, Index=ADD) | |
535 index = g_smscb_data.CBTopics.length;/* get the index of the next free entry in list CBTopics */ | |
536 | |
537 if (index > MAX_MIDS) | |
538 { | |
539 /* all entries are already used */ | |
540 info_screen (win, TxtFull /* ??? */,TxtNull, NULL); | |
541 return MFW_EVENT_CONSUMED; | |
542 } | |
543 else | |
544 { | |
545 | |
546 | |
547 CB_index_param.index = index; | |
548 return (int)smscb_CB_EDT_TEXTEDT_start(win, &CB_index_param); | |
549 } | |
550 } | |
551 | |
552 | |
553 /********************************************************************* | |
554 ********************************************************************** | |
555 | |
556 M_CB_TOP_CONS DYNAMIC MENU WINDOW. DECLARATION | |
557 | |
558 ********************************************************************* | |
559 **********************************************************************/ | |
560 typedef struct | |
561 { | |
562 /* administrative data */ | |
563 | |
564 T_MMI_CONTROL mmi_control; | |
565 T_MFW_HND win; | |
566 SHORT id; | |
567 T_MFW_HND parent; | |
568 | |
569 /* associated handlers */ | |
570 | |
571 /* internal data */ | |
572 T_CB_index_param CB_index_param; /* parameter for called submenus (index in list) */ | |
573 MfwMnuItem menuItems[MAX_MIDS]; /* List=CBTopics */ | |
574 ListMenuData list_menu_data; | |
575 } T_M_CB_TOP_CONS; | |
576 | |
577 static T_MFW_HND smscb_M_CB_TOP_CONS_create (T_MFW_HND parent); | |
578 static void smscb_M_CB_TOP_CONS_destroy (T_MFW_HND window); | |
579 static void smscb_M_CB_TOP_CONS_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * dummy); | |
580 static void smscb_M_CB_TOP_CONS_listmnu_cb (T_MFW_HND * win, ListMenuData * ListData); | |
581 | |
582 | |
583 static const MfwMnuAttr smscb_M_CB_TOP_CONSAttrib = | |
584 { | |
585 &smscb_M_CB_TOP_CONSArea, | |
586 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
587 -1, /* use default font */ | |
588 NULL, /* with these items */ | |
589 0, /* number of items */ | |
590 COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE | |
591 | |
592 }; | |
593 | |
594 /********************************************************************* | |
595 ********************************************************************** | |
596 | |
597 M_CB_TOP_CONS DYNAMIC MENU WINDOW. IMPLEMENTATION | |
598 | |
599 ********************************************************************* | |
600 **********************************************************************/ | |
601 | |
602 /******************************************************************************* | |
603 | |
604 $Function: smscb_M_CB_TOP_CONS_start | |
605 | |
606 $Description: | |
607 | |
608 $Returns: | |
609 | |
610 $Arguments: | |
611 | |
612 *******************************************************************************/ | |
613 T_MFW_HND smscb_M_CB_TOP_CONS_start(T_MFW_HND parent_window, void *dummy) | |
614 { | |
615 T_MFW_HND win; | |
616 | |
617 TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_start()"); | |
618 | |
619 win = smscb_M_CB_TOP_CONS_create (parent_window); | |
620 | |
621 if (win NEQ NULL) | |
622 { | |
623 SEND_EVENT (win, E_INIT, smscb_M_CB_TOP_CONS_ID, NULL); | |
624 } | |
625 return win; | |
626 } | |
627 | |
628 | |
629 /******************************************************************************* | |
630 | |
631 $Function: smscb_M_CB_TOP_CONS_create | |
632 | |
633 $Description: | |
634 | |
635 $Returns: | |
636 | |
637 $Arguments: | |
638 | |
639 *******************************************************************************/ | |
640 static T_MFW_HND smscb_M_CB_TOP_CONS_create(MfwHnd parent_window) | |
641 { | |
642 T_M_CB_TOP_CONS * data = (T_M_CB_TOP_CONS *)ALLOC_MEMORY (sizeof (T_M_CB_TOP_CONS)); | |
643 T_MFW_WIN * win; | |
644 | |
645 TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_create()"); | |
646 | |
647 /* | |
648 * Create window handler | |
649 */ | |
650 | |
651 data->win = | |
652 win_create (parent_window, 0, 0, NULL); | |
653 if (data->win EQ NULL) | |
654 { | |
655 return NULL; | |
656 } | |
657 | |
658 /* | |
659 * connect the dialog data to the MFW-window | |
660 */ | |
661 | |
662 data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_M_CB_TOP_CONS_exec_cb; | |
663 data->mmi_control.data = data; | |
664 win = ((T_MFW_HDR *)data->win)->data; | |
665 win->user = (void *)data; | |
666 data->parent = parent_window; | |
667 | |
668 /* | |
669 * return window handle | |
670 */ | |
671 | |
672 winShow(data->win); | |
673 return data->win; | |
674 } | |
675 | |
676 static void smscb_M_CB_TOP_CONS_destroy(MfwHnd own_window) | |
677 { | |
678 T_MFW_WIN * win_data; | |
679 T_M_CB_TOP_CONS * data; | |
680 | |
681 TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_destroy()"); | |
682 | |
683 if (own_window) | |
684 { | |
685 win_data = ((T_MFW_HDR *)own_window)->data; | |
686 data = (T_M_CB_TOP_CONS *)win_data->user; | |
687 | |
688 if (data) | |
689 { | |
690 /* | |
691 * Delete WIN handler | |
692 */ | |
693 win_delete (data->win); | |
694 | |
695 /* | |
696 * Free Memory | |
697 */ | |
698 FREE_MEMORY ((void *)data->list_menu_data.List, MAX_MIDS * sizeof (MfwMnuItem)); // c017 rsa | |
699 FREE_MEMORY ((void *)data, sizeof (T_M_CB_TOP_CONS)); | |
700 } | |
701 else | |
702 { | |
703 TRACE_EVENT ("smscb_M_CB_TOP_CONS_destroy() called twice"); | |
704 } | |
705 } | |
706 } | |
707 | |
708 /******************************************************************************* | |
709 | |
710 $Function: smscb_M_CB_TOP_CONS_recreate | |
711 | |
712 $Description: | |
713 | |
714 $Returns: | |
715 | |
716 $Arguments: | |
717 | |
718 *******************************************************************************/ | |
719 static void smscb_M_CB_TOP_CONS_recreate(T_M_CB_TOP_CONS *data) | |
720 { | |
721 int i; | |
722 // int len; // RAVI | |
723 | |
724 #ifdef DEBUG_SMS_CB | |
725 UBYTE ii; | |
726 TRACE_EVENT ("before create a list !"); | |
727 for (ii = 0; ii < MAX_MIDS; ii++) | |
728 { | |
729 TRACE_EVENT_P2 (" 01 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii); | |
730 } | |
731 /***************************Go-lite Optimization changes Start***********************/ | |
732 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
733 TRACE_EVENT_P2 (" 01 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii); | |
734 /***************************Go-lite Optimization changes end***********************/ | |
735 #endif | |
736 | |
737 //on RECREATE|INIT: menucreate dynamiclist (List=CBTopics, SoftLeft=SELECT, SoftRight=BACK) /* show: 1. Name 2. MID */ | |
738 | |
739 // c017 rsa | |
740 /* allocate sufficient memory to hold the maximum list of menu items */ | |
741 data->list_menu_data.List = (MfwMnuItem *)ALLOC_MEMORY (MAX_MIDS * sizeof (MfwMnuItem)); | |
742 // end c017 rsa | |
743 | |
744 for (i=0; i < g_smscb_data.CBTopics.length; i++) /* Fill Menu List */ | |
745 { | |
746 mnuInitDataItem(&data->list_menu_data.List[i]); | |
747 | |
748 | |
749 /* get the correct entry in list of CBTopics */ | |
750 data->list_menu_data.List[i].str = g_smscb_data.CBTopics.entry[i].name; | |
751 data->list_menu_data.List[i].flagFunc = item_flag_none; | |
752 | |
753 | |
754 } | |
755 | |
756 //actual number of entries in list menu | |
757 data->list_menu_data.ListLength = g_smscb_data.CBTopics.length; | |
758 | |
759 data->list_menu_data.autoDestroy = TRUE; | |
760 | |
761 listDisplayListMenu(data->win, &data->list_menu_data, (ListCbFunc)smscb_M_CB_TOP_CONS_listmnu_cb,0); | |
762 } | |
763 | |
764 /******************************************************************************* | |
765 | |
766 $Function: smscb_M_CB_TOP_CONS_exec_cb | |
767 | |
768 $Description: | |
769 | |
770 $Returns: | |
771 | |
772 $Arguments: | |
773 | |
774 *******************************************************************************/ | |
775 void smscb_M_CB_TOP_CONS_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * dummy) | |
776 /* callback handler for events sent to to trigger execution */ | |
777 { | |
778 | |
779 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
780 T_M_CB_TOP_CONS * data = (T_M_CB_TOP_CONS *)win_data->user; | |
781 T_MFW_HND * l_parent; | |
782 SHORT l_id; | |
783 // UBYTE i; // RAVI. | |
784 | |
785 TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_exec_cb()"); | |
786 | |
787 switch (event) | |
788 { | |
789 case E_INIT: | |
790 /* initialization of administrative data */ | |
791 data->id = value; | |
792 | |
793 /* initialization of the dialog data */ | |
794 data->list_menu_data.ListPosition = 1;/* True cursor position in list menu. */ | |
795 data->list_menu_data.CursorPosition = 1;/* Cursor position in list snapshot. */ | |
796 data->list_menu_data.SnapshotSize = 4;/* Number of list entries to view. */ | |
797 data->list_menu_data.Font = 0; | |
798 data->list_menu_data.LeftSoftKey = TxtDelete; | |
799 data->list_menu_data.RightSoftKey = TxtSoftBack; | |
800 data->list_menu_data.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN; | |
801 data->list_menu_data.Reason = 0; | |
802 data->list_menu_data.Strings = TRUE; // c020 rsa | |
803 data->list_menu_data.Attr = (MfwMnuAttr*)&smscb_M_CB_TOP_CONSAttrib; | |
804 data->list_menu_data.autoDestroy = TRUE; | |
805 | |
806 /* NOBREAK */ | |
807 case E_RETURN: | |
808 case E_EXIT: /* terminate EXIT from CB_EDT_MIDEDT|M_CB_TOP_CONS_SEL here */ | |
809 /* (re)create the dialog handler */ | |
810 TRACE_FUNCTION ("EXIT in M_CB_TOP_CONS_exec_cb"); | |
811 | |
812 //the special case : if the user deleted the last CB item | |
813 //check if there is any more CB in the list when not | |
814 //give a infoscreen and go back to the CB menu | |
815 if (g_smscb_data.CBTopics.length EQ 0) | |
816 { | |
817 info_screen(0, TxtEmptyList,TxtNull, NULL); | |
818 l_parent = data->parent; | |
819 l_id = data->id; | |
820 smscb_M_CB_TOP_CONS_destroy(data->win); | |
821 SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ | |
822 | |
823 } | |
824 else | |
825 { | |
826 smscb_M_CB_TOP_CONS_recreate(data); | |
827 | |
828 /* put the (new) dialog window on top of the window stack */ | |
829 /* winUpdate(data->win); c021 rsa */ | |
830 } | |
831 break; | |
832 case E_ABORT: /* defaultreaction */ | |
833 TRACE_EVENT ("ABORT in M_CB_TOP_CONS_exec_cb"); | |
834 | |
835 l_parent = data->parent; | |
836 l_id = data->id; | |
837 smscb_M_CB_TOP_CONS_destroy(data->win); | |
838 SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ | |
839 break; | |
840 default: | |
841 return; | |
842 } | |
843 } | |
844 | |
845 /******************************************************************************* | |
846 | |
847 $Function: smscb_M_CB_TOP_CONS_listmnu_cb | |
848 | |
849 $Description: | |
850 | |
851 $Returns: | |
852 | |
853 $Arguments: | |
854 | |
855 *******************************************************************************/ | |
856 static void smscb_M_CB_TOP_CONS_listmnu_cb (T_MFW_HND * win, ListMenuData * ListData) | |
857 /* smscb_M_CB_TOP_CONS menu event handler */ | |
858 { | |
859 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
860 T_M_CB_TOP_CONS * data = (T_M_CB_TOP_CONS *)win_data->user; | |
861 T_MFW_HND * l_parent; | |
862 SHORT l_id; | |
863 int index; | |
864 | |
865 TRACE_FUNCTION ("smscb_M_CB_TOP_CONS_listmnu_cb()"); | |
866 | |
867 switch (ListData->Reason) | |
868 { | |
869 case LISTS_REASON_SELECT: | |
870 //on SELECT: menucreate M_CB_TOP_CONS_SEL(Index=selection) | |
871 index = ListData->ListPosition; | |
872 data->CB_index_param.index = index; | |
873 | |
874 smscb_M_CB_TOP_CONS_SEL_ExeDelete(win); | |
875 | |
876 break; | |
877 case LISTS_REASON_BACK: /* back to previous menu */ | |
878 l_parent = data->parent; | |
879 l_id = data->id; | |
880 smscb_M_CB_TOP_CONS_destroy(data->win); | |
881 SEND_EVENT (data->parent, E_RETURN, data->id, NULL); // c007 rsa | |
882 break; | |
883 default: | |
884 return; | |
885 } | |
886 return; | |
887 } | |
888 | |
889 | |
890 void ExeDelete_infoscreen_cb (T_MFW_HND win, USHORT identifier, UBYTE reason); | |
891 | |
892 /********************************************************************* | |
893 ********************************************************************** | |
894 | |
895 M_CB_TOP_CONS_SEL DYNAMIC MENU WINDOW. CONTENTS BEHAVIOUR | |
896 | |
897 ********************************************************************* | |
898 **********************************************************************/ | |
899 | |
900 | |
901 /******************************************************************************* | |
902 | |
903 $Function: smscb_M_CB_TOP_CONS_SEL_ExeDelete | |
904 | |
905 $Description: | |
906 | |
907 $Returns: | |
908 | |
909 $Arguments: | |
910 | |
911 *******************************************************************************/ | |
912 static int smscb_M_CB_TOP_CONS_SEL_ExeDelete(T_MFW_HND * win) | |
913 { | |
914 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
915 T_M_CB_TOP_CONS * data = (T_M_CB_TOP_CONS *)win_data->user; | |
916 // T_MFW_HND * l_parent; // RAVI | |
917 // SHORT l_id; // RAVI | |
918 int index; | |
919 | |
920 //index is the selected MID | |
921 index = data->CB_index_param.index; | |
922 | |
923 //delete now the user selected Topic MID | |
924 smscb_delete_topic((UBYTE) index); | |
925 | |
926 //show infoscreen ("Deleted"); | |
927 info_screen(win, TxtDeleted, TxtNull, (T_VOID_FUNC) ExeDelete_infoscreen_cb); | |
928 | |
929 | |
930 //save the updated Topic list on the SIM | |
931 smscb_setCBsettings(SMSCB_SWITCH_ON); | |
932 | |
933 //selfdestroy; sendevent EXIT | |
934 | |
935 | |
936 return MFW_EVENT_CONSUMED; | |
937 } | |
938 | |
939 void ExeDelete_infoscreen_cb (T_MFW_HND win , USHORT identifier, UBYTE reason) | |
940 { | |
941 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
942 T_M_CB_TOP_CONS * data = (T_M_CB_TOP_CONS *)win_data->user; | |
943 SHORT l_id; | |
944 | |
945 l_id = data->id; | |
946 | |
947 //nm go back and recreate the CB list | |
948 SEND_EVENT (win, E_EXIT, l_id, NULL); | |
949 | |
950 } | |
951 | |
952 /********************************************************************* | |
953 ********************************************************************** | |
954 | |
955 CB_EDT_TEXTEDT DYNAMIC MENU WINDOW. DECLARATION | |
956 | |
957 ********************************************************************* | |
958 **********************************************************************/ | |
959 | |
960 typedef struct | |
961 { | |
962 /* administrative data */ | |
963 | |
964 T_MMI_CONTROL mmi_control; | |
965 T_MFW_HND win; | |
966 SHORT id; | |
967 T_MFW_HND parent; | |
968 | |
969 /* associated handlers */ | |
970 | |
971 T_MFW_HND editor; | |
972 | |
973 /* internal data */ | |
974 T_CB_index_param * param; /* pointer to parameter space in parent (index in list) */ | |
975 #ifdef NEW_EDITOR | |
976 T_AUI_EDITOR_DATA editor_info; /* SPR#1428 - SH - New Editor data */ | |
977 #else | |
978 T_EDITOR_DATA editor_info; /* storage for editor attributes */ | |
979 #endif | |
980 T_CB_EDT_MIDEDT_param CB_EDT_MIDEDT_param; /* parameter space for buffer for editing */ | |
981 } T_CB_EDT_TEXTEDT; | |
982 | |
983 static T_MFW_HND smscb_CB_EDT_TEXTEDT_create (T_MFW_HND parent); | |
984 static void smscb_CB_EDT_TEXTEDT_destroy (T_MFW_HND window); | |
985 static void smscb_CB_EDT_TEXTEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
986 static void smscb_CB_EDT_TEXTEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event); | |
987 | |
988 /********************************************************************* | |
989 ********************************************************************** | |
990 | |
991 CB_EDT_TEXTEDT DYNAMIC MENU WINDOW. IMPLEMENTATION | |
992 | |
993 ********************************************************************* | |
994 **********************************************************************/ | |
995 | |
996 T_MFW_HND smscb_CB_EDT_TEXTEDT_start(T_MFW_HND parent_window, T_CB_index_param * parameter) | |
997 { | |
998 T_MFW_HND win; | |
999 | |
1000 TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_start()"); | |
1001 | |
1002 win = smscb_CB_EDT_TEXTEDT_create (parent_window); | |
1003 | |
1004 if (win NEQ NULL) | |
1005 { | |
1006 SEND_EVENT (win, E_INIT, smscb_CB_EDT_TEXTEDT_ID, (void *)parameter); | |
1007 } | |
1008 return win; | |
1009 } | |
1010 | |
1011 | |
1012 /******************************************************************************* | |
1013 | |
1014 $Function: smscb_CB_EDT_TEXTEDT_create | |
1015 | |
1016 $Description: | |
1017 | |
1018 $Returns: | |
1019 | |
1020 $Arguments: | |
1021 | |
1022 *******************************************************************************/ | |
1023 static T_MFW_HND smscb_CB_EDT_TEXTEDT_create(MfwHnd parent_window) | |
1024 { | |
1025 T_CB_EDT_TEXTEDT * data = (T_CB_EDT_TEXTEDT *)ALLOC_MEMORY (sizeof (T_CB_EDT_TEXTEDT)); | |
1026 T_MFW_WIN * win; | |
1027 | |
1028 TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_create()"); | |
1029 | |
1030 /* | |
1031 * Create window handler | |
1032 */ | |
1033 | |
1034 data->win = | |
1035 win_create (parent_window, 0, 0, NULL); | |
1036 if (data->win EQ NULL) | |
1037 { | |
1038 return NULL; | |
1039 } | |
1040 | |
1041 /* | |
1042 * connect the dialog data to the MFW-window | |
1043 */ | |
1044 | |
1045 data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_CB_EDT_TEXTEDT_exec_cb; | |
1046 data->mmi_control.data = data; | |
1047 win = ((T_MFW_HDR *)data->win)->data; | |
1048 win->user = (void *)data; | |
1049 data->parent = parent_window; | |
1050 | |
1051 /* | |
1052 * return window handle | |
1053 */ | |
1054 | |
1055 winShow(data->win); | |
1056 return data->win; | |
1057 } | |
1058 | |
1059 | |
1060 /******************************************************************************* | |
1061 | |
1062 $Function: smscb_CB_EDT_TEXTEDT_destroy | |
1063 | |
1064 $Description: | |
1065 | |
1066 $Returns: | |
1067 | |
1068 $Arguments: | |
1069 | |
1070 *******************************************************************************/ | |
1071 static void smscb_CB_EDT_TEXTEDT_destroy(MfwHnd own_window) | |
1072 { | |
1073 T_MFW_WIN * win_data; | |
1074 T_CB_EDT_TEXTEDT * data; | |
1075 | |
1076 TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_destroy()"); | |
1077 | |
1078 if (own_window) | |
1079 { | |
1080 win_data = ((T_MFW_HDR *)own_window)->data; | |
1081 data = (T_CB_EDT_TEXTEDT *)win_data->user; | |
1082 | |
1083 if (data) | |
1084 { | |
1085 /* | |
1086 * Delete WIN handler | |
1087 */ | |
1088 win_delete (data->win); | |
1089 | |
1090 /* | |
1091 * Free Memory | |
1092 */ | |
1093 FREE_MEMORY ((void *)data, sizeof (T_CB_EDT_TEXTEDT)); | |
1094 } | |
1095 else | |
1096 { | |
1097 TRACE_EVENT ("smscb_CB_EDT_TEXTEDT_destroy() called twice"); | |
1098 } | |
1099 } | |
1100 } | |
1101 | |
1102 /******************************************************************************* | |
1103 | |
1104 $Function: smscb_CB_EDT_TEXTEDT_exec_cb | |
1105 | |
1106 $Description: | |
1107 | |
1108 $Returns: | |
1109 | |
1110 $Arguments: | |
1111 | |
1112 *******************************************************************************/ | |
1113 void smscb_CB_EDT_TEXTEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
1114 /* callback handler for events sent to to trigger execution */ | |
1115 { | |
1116 | |
1117 | |
1118 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
1119 T_CB_EDT_TEXTEDT * data = (T_CB_EDT_TEXTEDT *)win_data->user; | |
1120 T_MFW_HND * l_parent; | |
1121 SHORT l_id; | |
1122 int | |
1123 index; | |
1124 | |
1125 TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_exec_cb()"); | |
1126 | |
1127 switch (event) | |
1128 { | |
1129 case E_INIT: | |
1130 /* initialization of administrative data */ | |
1131 data->id = value; | |
1132 data->param = (T_CB_index_param *)parameter; /* store the pointer to the parameter for later use */ | |
1133 | |
1134 | |
1135 #ifdef DEBUG_SMS_CB | |
1136 /***************************Go-lite Optimization changes Start***********************/ | |
1137 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1138 TRACE_EVENT_P1( "the index is %d", data->param->index); | |
1139 /***************************Go-lite Optimization changes end***********************/ | |
1140 #endif | |
1141 | |
1142 /* initialization of the dialog data */ | |
1143 index = data->param->index; | |
1144 data->CB_EDT_MIDEDT_param.index = index; /* copy the index to parameter space of next menu */ | |
1145 | |
1146 data->CB_EDT_MIDEDT_param.name[0] = '\0'; /* provide empty entry */ | |
1147 | |
1148 //on INIT: exec "copy params to dynamic memory <data>"; RECREATE | |
1149 /* NOBREAK */ | |
1150 case E_RETURN: //on RETURN: RECREATE // recreate editor if back from options | |
1151 | |
1152 /* SPR#1428 - SH - New Editor changes */ | |
1153 | |
1154 #ifdef NEW_EDITOR | |
1155 AUI_edit_SetDefault(&data->editor_info); | |
1156 AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT); | |
1157 AUI_edit_SetEvents(&data->editor_info, value, TRUE, TEN_SECS, (T_AUI_EDIT_CB)smscb_CB_EDT_TEXTEDT_editor_cb); | |
1158 AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtEnterName, NULL); | |
1159 // Change by Sasken ( Deepa M.d) on March 29th 2004 | |
1160 // Issue Number : MMI-SPR-12722 | |
1161 // Subject: Right softkey should be "Back" when the editor is empty | |
1162 // Bug : Right softkey should be "Back" when the editor is empty | |
1163 // Solution : Added alternative string for the right softkey tobe displayed when the editor is empty | |
1164 | |
1165 AUI_edit_SetAltTextStr(&data->editor_info, 0, NULL, TRUE, TxtSoftBack); | |
1166 AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->CB_EDT_MIDEDT_param.name, CB_TAG_LENGTH); | |
1167 AUI_edit_SetMode(&data->editor_info, ED_MODE_ALPHA, ED_CURSOR_BAR); | |
1168 | |
1169 data->editor = AUI_edit_Start(data->win,&data->editor_info); /* start the editor */ | |
1170 #else /* NEW_EDITOR */ | |
1171 /*MC SPR 1488, got rid of hardcoded editor dimensions*/ | |
1172 data->editor_info.editor_attr.win.px = 0; | |
1173 data->editor_info.editor_attr.win.py = Mmi_layout_line(2); | |
1174 data->editor_info.editor_attr.win.sx =SCREEN_SIZE_X; | |
1175 data->editor_info.editor_attr.win.sy = 2*Mmi_layout_line_height(); | |
1176 data->editor_info.editor_attr.edtCol = COLOUR_EDITOR_XX; | |
1177 data->editor_info.editor_attr.font = 0; | |
1178 data->editor_info.editor_attr.mode = edtCurBar1; | |
1179 data->editor_info.editor_attr.controls = 0; | |
1180 data->editor_info.editor_attr.text = data->CB_EDT_MIDEDT_param.name; /* buffer to be edited */ | |
1181 data->editor_info.editor_attr.size = CB_TAG_LENGTH; | |
1182 data->editor_info.LeftSoftKey = TxtSoftOK; | |
1183 data->editor_info.RightSoftKey = TxtDelete; | |
1184 data->editor_info.TextId = TxtEnterName; | |
1185 data->editor_info.Identifier = value; /* optional */ | |
1186 data->editor_info.mode = ALPHA_MODE; | |
1187 data->editor_info.Callback = (T_EDIT_CB)smscb_CB_EDT_TEXTEDT_editor_cb; | |
1188 data->editor_info.destroyEditor = TRUE; | |
1189 data->editor_info.hide = FALSE; | |
1190 // Change by Sasken ( Deepa M.d) on March 29th 2004 | |
1191 // Issue Number : MMI-SPR-12722 | |
1192 // Subject: Right softkey should be "Back" when the editor is empty | |
1193 // Bug : Right softkey should be "Back" when the editor is empty | |
1194 // Solution : Added alternative string for the right softkey tobe displayed when the editor is empty | |
1195 data->editor_info.AlternateLeftSoftKey = TxtSoftBack; | |
1196 data->editor_info.TextString = NULL; | |
1197 data->editor_info.min_enter = 0; | |
1198 data->editor_info.timeout = TEN_SECS; | |
1199 | |
1200 /* create the dialog handler */ | |
1201 data->editor = editor_start(data->win,&data->editor_info); /* start the editor */ | |
1202 #endif /* NEW_EDITOR */ | |
1203 | |
1204 break; | |
1205 case E_ABORT: | |
1206 case E_EXIT: /* defaultreaction */ | |
1207 l_parent = data->parent; | |
1208 l_id = data->id; | |
1209 smscb_CB_EDT_TEXTEDT_destroy(data->win); | |
1210 /*SPR 1920, removed sending of exit event to parent, no longer needed*/ | |
1211 break; | |
1212 default: | |
1213 return; | |
1214 } | |
1215 } | |
1216 | |
1217 /******************************************************************************* | |
1218 | |
1219 $Function: smscb_CB_EDT_TEXTEDT_editor_cb | |
1220 | |
1221 $Description: | |
1222 | |
1223 $Returns: | |
1224 | |
1225 $Arguments: | |
1226 | |
1227 *******************************************************************************/ | |
1228 static void smscb_CB_EDT_TEXTEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event) | |
1229 /* smscb_CB_EDT_TEXTEDT editor event handler */ | |
1230 { | |
1231 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
1232 T_CB_EDT_TEXTEDT * data = (T_CB_EDT_TEXTEDT *)win_data->user; | |
1233 T_MFW_HND * l_parent; | |
1234 SHORT l_id; | |
1235 | |
1236 TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_editor_cb()"); | |
1237 | |
1238 switch(event) | |
1239 { | |
1240 case INFO_KCD_LEFT: | |
1241 //on OK: menucreate CB_EDT_MIDEDT(data) | |
1242 smscb_CB_EDT_MIDEDT_start (win, &data->CB_EDT_MIDEDT_param); | |
1243 break; | |
1244 case INFO_KCD_RIGHT: | |
1245 case INFO_KCD_HUP: /* defaultreaction */ | |
1246 l_parent = data->parent; | |
1247 l_id = data->id; | |
1248 smscb_CB_EDT_TEXTEDT_destroy(data->win); | |
1249 SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa | |
1250 break; | |
1251 default: | |
1252 break; | |
1253 } | |
1254 return; | |
1255 } | |
1256 /********************************************************************* | |
1257 ********************************************************************** | |
1258 | |
1259 CB_EDT_MIDEDT DYNAMIC MENU WINDOW. DECLARATION | |
1260 | |
1261 ********************************************************************* | |
1262 **********************************************************************/ | |
1263 | |
1264 typedef struct | |
1265 { | |
1266 /* administrative data */ | |
1267 | |
1268 T_MMI_CONTROL mmi_control; | |
1269 T_MFW_HND win; | |
1270 SHORT id; | |
1271 T_MFW_HND parent; | |
1272 | |
1273 /* associated handlers */ | |
1274 | |
1275 T_MFW_HND editor; | |
1276 | |
1277 /* internal data */ | |
1278 T_CB_EDT_MIDEDT_param * param; /* pointer to parameter space in parent (buffer for editing) */ | |
1279 #ifdef NEW_EDITOR | |
1280 T_AUI_EDITOR_DATA editor_info; /* SPR#1428 - SH - New Editor data */ | |
1281 #else | |
1282 T_EDITOR_DATA editor_info; /* storage for editor attributes */ | |
1283 #endif | |
1284 } T_CB_EDT_MIDEDT; | |
1285 | |
1286 static T_MFW_HND smscb_CB_EDT_MIDEDT_create (T_MFW_HND parent); | |
1287 static void smscb_CB_EDT_MIDEDT_destroy (T_MFW_HND window); | |
1288 static void smscb_CB_EDT_MIDEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
1289 static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event); | |
1290 | |
1291 /********************************************************************* | |
1292 ********************************************************************** | |
1293 | |
1294 CB_EDT_MIDEDT DYNAMIC MENU WINDOW. IMPLEMENTATION | |
1295 | |
1296 ********************************************************************* | |
1297 **********************************************************************/ | |
1298 | |
1299 T_MFW_HND smscb_CB_EDT_MIDEDT_start(T_MFW_HND parent_window, T_CB_EDT_MIDEDT_param * parameter) | |
1300 { | |
1301 T_MFW_HND win; | |
1302 | |
1303 TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_start()"); | |
1304 | |
1305 win = smscb_CB_EDT_MIDEDT_create (parent_window); | |
1306 | |
1307 if (win NEQ NULL) | |
1308 { | |
1309 SEND_EVENT (win, E_INIT, smscb_CB_EDT_MIDEDT_ID, (void *)parameter); | |
1310 } | |
1311 return win; | |
1312 } | |
1313 | |
1314 /******************************************************************************* | |
1315 | |
1316 $Function: smscb_CB_EDT_MIDEDT_create | |
1317 | |
1318 $Description: | |
1319 | |
1320 $Returns: | |
1321 | |
1322 $Arguments: | |
1323 | |
1324 *******************************************************************************/ | |
1325 static T_MFW_HND smscb_CB_EDT_MIDEDT_create(MfwHnd parent_window) | |
1326 { | |
1327 T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)ALLOC_MEMORY (sizeof (T_CB_EDT_MIDEDT)); | |
1328 T_MFW_WIN * win; | |
1329 | |
1330 TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_create()"); | |
1331 | |
1332 /* | |
1333 * Create window handler | |
1334 */ | |
1335 | |
1336 data->win = win_create (parent_window, 0, 0, NULL); | |
1337 | |
1338 if (data->win EQ NULL) | |
1339 { | |
1340 return NULL; | |
1341 } | |
1342 | |
1343 /* | |
1344 * connect the dialog data to the MFW-window | |
1345 */ | |
1346 | |
1347 data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_CB_EDT_MIDEDT_exec_cb; | |
1348 data->mmi_control.data = data; | |
1349 win = ((T_MFW_HDR *)data->win)->data; | |
1350 win->user = (void *)data; | |
1351 data->parent = parent_window; | |
1352 | |
1353 /* | |
1354 * return window handle | |
1355 */ | |
1356 | |
1357 winShow(data->win); | |
1358 return data->win; | |
1359 } | |
1360 | |
1361 | |
1362 /******************************************************************************* | |
1363 | |
1364 $Function: smscb_CB_EDT_MIDEDT_destroy | |
1365 | |
1366 $Description: | |
1367 | |
1368 $Returns: | |
1369 | |
1370 $Arguments: | |
1371 | |
1372 *******************************************************************************/ | |
1373 static void smscb_CB_EDT_MIDEDT_destroy(MfwHnd own_window) | |
1374 { | |
1375 T_MFW_WIN * win_data; | |
1376 T_CB_EDT_MIDEDT * data; | |
1377 | |
1378 | |
1379 TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_destroy()"); | |
1380 | |
1381 if (own_window) | |
1382 { | |
1383 win_data = ((T_MFW_HDR *)own_window)->data; | |
1384 data = (T_CB_EDT_MIDEDT *)win_data->user; | |
1385 | |
1386 if (data) | |
1387 { | |
1388 /* | |
1389 * Delete WIN handler | |
1390 */ | |
1391 win_delete (data->win); | |
1392 | |
1393 /* | |
1394 * Free Memory | |
1395 */ | |
1396 FREE_MEMORY ((void *)data, sizeof (T_CB_EDT_MIDEDT)); | |
1397 } | |
1398 else | |
1399 { | |
1400 TRACE_EVENT ("smscb_CB_EDT_MIDEDT_destroy() called twice"); | |
1401 } | |
1402 } | |
1403 } | |
1404 | |
1405 | |
1406 /******************************************************************************* | |
1407 | |
1408 $Function: smscb_CB_EDT_MIDEDT_exec_cb | |
1409 | |
1410 $Description: | |
1411 | |
1412 $Returns: | |
1413 | |
1414 $Arguments: | |
1415 | |
1416 *******************************************************************************/ | |
1417 void smscb_CB_EDT_MIDEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
1418 /* callback handler for events sent to to trigger execution */ | |
1419 { | |
1420 | |
1421 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
1422 T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)win_data->user; | |
1423 T_MFW_HND * l_parent; | |
1424 SHORT l_id; | |
1425 int index; | |
1426 | |
1427 TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_exec_cb()"); | |
1428 | |
1429 switch (event) | |
1430 { | |
1431 case E_INIT: | |
1432 /* initialization of administrative data */ | |
1433 data->id = value; | |
1434 data->param = (T_CB_EDT_MIDEDT_param *)parameter; /* store the pointer to the parameter for later use */ | |
1435 | |
1436 /* initialization of the dialog data */ | |
1437 index = data->param->index; | |
1438 if (g_smscb_data.CBTopics.entry[index].msg_id NEQ NO_MID) | |
1439 { | |
1440 data->param->number[0] = '\0'; /* provide empty entry */ | |
1441 | |
1442 } | |
1443 else | |
1444 { | |
1445 data->param->number[0] = '\0'; /* provide empty entry */ | |
1446 } | |
1447 //on INIT: call editor (Type=numeric, Length=3, Prompt="Enter MID Number", | |
1448 // Number=data->List.Number[data->ListIndex], SoftLeft=OK, SoftRight=BACK) | |
1449 | |
1450 /* SPR#1428 - SH - New Editor changes */ | |
1451 #ifdef NEW_EDITOR | |
1452 AUI_edit_SetDefault(&data->editor_info); | |
1453 AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT); | |
1454 AUI_edit_SetEvents(&data->editor_info, value, TRUE, TEN_SECS, (T_AUI_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb); | |
1455 AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtEnterMid, NULL); | |
1456 AUI_edit_SetAltTextStr(&data->editor_info, 1, TxtNull, TRUE, TxtSoftBack); | |
1457 AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->param->number, CB_MID_LENGTH); | |
1458 AUI_edit_SetMode(&data->editor_info, 0, ED_CURSOR_BAR); | |
1459 | |
1460 data->editor = AUI_edit_Start(data->win,&data->editor_info); /* start the editor */ | |
1461 #else /* NEW_EDITOR */ | |
1462 editor_attr_init(&data->editor_info.editor_attr, ZONE_SMALL_EDITOR, edtCurBar1, 0, data->param->number, CB_MID_LENGTH, COLOUR_EDITOR ); | |
1463 editor_data_init(&data->editor_info,(T_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb,TxtSoftOK,TxtDelete,TxtEnterMid,1 ,DIGITS_MODE, TEN_SECS); | |
1464 data->editor_info.destroyEditor = TRUE; | |
1465 data->editor_info.Identifier = value; | |
1466 data->editor_info.hide = FALSE; | |
1467 data->editor_info.TextString = NULL; | |
1468 | |
1469 /* create the dialog handler */ | |
1470 data->editor = editor_start(data->win,&data->editor_info); /* start the editor */ | |
1471 #endif /* NEW_EDITOR */ | |
1472 break; | |
1473 case E_ABORT: | |
1474 case E_EXIT: /* defaultreaction */ | |
1475 l_parent = data->parent; | |
1476 l_id = data->id; | |
1477 smscb_CB_EDT_MIDEDT_destroy(data->win); | |
1478 SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ | |
1479 break; | |
1480 default: | |
1481 return; | |
1482 } | |
1483 } | |
1484 | |
1485 | |
1486 /******************************************************************************* | |
1487 | |
1488 $Function: smscb_CB_EDT_MIDEDT_editor_cb | |
1489 | |
1490 $Description: | |
1491 | |
1492 $Returns: | |
1493 | |
1494 $Arguments: | |
1495 | |
1496 *******************************************************************************/ | |
1497 static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event) | |
1498 /* smscb_CB_EDT_MIDEDT editor event handler */ | |
1499 { | |
1500 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
1501 T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)win_data->user; | |
1502 T_MFW_HND * l_parent; | |
1503 SHORT l_id; | |
1504 int index; | |
1505 UBYTE ll; | |
1506 T_SMSCB_TOPIC_TAG ffs_tag;/*SPR1920*/ | |
1507 char file_name[20]; | |
1508 int val; | |
1509 #ifdef DEBUG_SMS_CB | |
1510 UBYTE ii; | |
1511 #endif | |
1512 | |
1513 TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_editor_cb()"); | |
1514 | |
1515 l_parent = data->parent; | |
1516 l_id = data->id; | |
1517 | |
1518 switch(event) | |
1519 { | |
1520 case INFO_KCD_LEFT: | |
1521 index = data->param->index; | |
1522 | |
1523 //nm "-1"the zero is counted as well | |
1524 if (index < MAX_MIDS -1 ) | |
1525 { | |
1526 /* add a new entry */ | |
1527 | |
1528 | |
1529 memcpy (g_smscb_data.CBTopics.entry[index].name, data->param->name, CB_TAG_LENGTH); | |
1530 g_smscb_data.CBTopics.entry[index].msg_id = atoi(data->param->number); | |
1531 /*SPR1959, save name to FFS*/ | |
1532 memcpy(ffs_tag.name, data->param->name, CB_TAG_LENGTH); | |
1533 { val = ffs_fwrite((const char*)ffs_cb_tag_name(g_smscb_data.CBTopics.entry[index].msg_id, file_name), (void*)&ffs_tag, sizeof(T_SMSCB_TOPIC_TAG)); | |
1534 | |
1535 TRACE_EVENT_P1("CB tag name write status:%d", val); | |
1536 } | |
1537 | |
1538 #ifdef DEBUG_SMS_CB | |
1539 /***************************Go-lite Optimization changes Start***********************/ | |
1540 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1541 TRACE_EVENT_P1 ( "the index is %d", index); | |
1542 /***************************Go-lite Optimization changes end***********************/ | |
1543 #endif | |
1544 | |
1545 /* add a new entry */ | |
1546 index += 1; | |
1547 g_smscb_data.CBTopics.length = index; | |
1548 | |
1549 smscb_setCBsettings(SMSCB_SWITCH_ON); /* save in SIM */ | |
1550 | |
1551 info_screen(win, TxtSaved ,TxtNull, NULL); | |
1552 | |
1553 } | |
1554 else | |
1555 { | |
1556 info_screen (win, TxtFull, TxtNull, NULL); | |
1557 } | |
1558 | |
1559 // Apr 29, 2004 REF: CRR 11630 Deepa M.D | |
1560 // Refresh the list,so that if a name exists for a channelId in FFS, it is displayed. | |
1561 for(ll = 0; ll < g_smscb_data.CBTopics.length; ll++) | |
1562 { | |
1563 if (g_smscb_data.CBTopics.entry[ll].msg_id EQ NO_MID) | |
1564 { | |
1565 break; | |
1566 } | |
1567 | |
1568 /* Set default tag string, until we get the saved name from PCM */ | |
1569 g_smscb_data.CBTopics.entry[ll].name[0] = '\0'; | |
1570 /*attempt to read channel name from FFS file*/ | |
1571 val = ffs_fread(ffs_cb_tag_name(g_smscb_data.CBTopics.entry[ll].msg_id, file_name), &ffs_tag, sizeof(T_SMSCB_TOPIC_TAG)); | |
1572 /*if reading successful, copy name to data structure*/ | |
1573 | |
1574 if (val == sizeof(ffs_tag)) | |
1575 { | |
1576 memcpy(g_smscb_data.CBTopics.entry[ll].name, ffs_tag.name, CB_TAG_LENGTH); | |
1577 } | |
1578 /* update here g_smscb_data.CBTopics.entry[i].name from PCM */ | |
1579 if (g_smscb_data.CBTopics.entry[ll].name[0] EQ '\0') | |
1580 { | |
1581 /* but if it's empty substitute it by the channel number */ | |
1582 sprintf (g_smscb_data.CBTopics.entry[ll].name,"Ch%d,ID:%d",ll,g_smscb_data.CBTopics.entry[ll].msg_id); | |
1583 } | |
1584 | |
1585 } | |
1586 | |
1587 | |
1588 #ifdef DEBUG_SMS_CB | |
1589 /***************************Go-lite Optimization changes Start***********************/ | |
1590 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1591 TRACE_EVENT ("after add a new one !"); | |
1592 for (ii = 0; ii < MAX_MIDS; ii++) | |
1593 { | |
1594 | |
1595 TRACE_EVENT_P2 (" 04 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii); | |
1596 } | |
1597 | |
1598 TRACE_EVENT_P1 ("04 midlist:%d", g_smscb_data.CBTopics.length); | |
1599 | |
1600 /***************************Go-lite Optimization changes end***********************/ | |
1601 #endif | |
1602 | |
1603 | |
1604 | |
1605 | |
1606 smscb_CB_EDT_MIDEDT_destroy(data->win); | |
1607 SEND_EVENT (l_parent, E_EXIT, l_id, NULL); | |
1608 break; | |
1609 case INFO_KCD_RIGHT: | |
1610 case INFO_KCD_HUP: /* defaultreaction */ | |
1611 smscb_CB_EDT_MIDEDT_destroy(data->win); | |
1612 SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa | |
1613 break; | |
1614 default: | |
1615 break; | |
1616 } | |
1617 return; | |
1618 } | |
1619 | |
1620 /********************************************************************* | |
1621 ********************************************************************** | |
1622 | |
1623 | |
1624 cell broadcast routines IMPLEMENTATION | |
1625 | |
1626 ********************************************************************* | |
1627 **********************************************************************/ | |
1628 | |
1629 | |
1630 /******************************************************************************* | |
1631 | |
1632 $Function: smscb_InitData | |
1633 | |
1634 $Description: Initialises CB message storage | |
1635 | |
1636 $Returns: none. | |
1637 | |
1638 $Arguments: | |
1639 | |
1640 *******************************************************************************/ | |
1641 void smscb_InitData (void) | |
1642 { | |
1643 UBYTE i; | |
1644 | |
1645 g_smscb_data.CBTopics.length = 0; | |
1646 for (i = 0; i < MAX_MIDS; i++) | |
1647 { | |
1648 g_smscb_data.CBTopics.entry[i].msg_id = NO_MID; /* Set MID list default values. */ | |
1649 g_smscb_data.CBTopics.entry[i].name[0] = '\0'; | |
1650 g_smscb_data.CBTopics.entry[i].dcs = 0; | |
1651 } | |
1652 | |
1653 } | |
1654 | |
1655 /******************************************************************************* | |
1656 | |
1657 $Function: smscb_delete_topic | |
1658 | |
1659 | |
1660 | |
1661 $Description: : This function is used to delete an MID from the | |
1662 current list <g_smscb_data.CBTopics>. | |
1663 | |
1664 | |
1665 $Returns: | |
1666 | |
1667 $Arguments: | |
1668 | |
1669 *******************************************************************************/ | |
1670 static T_MFW smscb_delete_topic(UBYTE MidOffset) | |
1671 { | |
1672 SHORT Mid; | |
1673 UBYTE MidCount; | |
1674 UBYTE i; | |
1675 | |
1676 #ifdef DEBUG_SMS_CB | |
1677 UBYTE ii; | |
1678 #endif | |
1679 | |
1680 Mid = g_smscb_data.CBTopics.entry[MidOffset].msg_id; | |
1681 | |
1682 /* Find out how many messages are stored. | |
1683 * set MidCount to first entry which contains NO_MID or | |
1684 * set MidCount to MAX_MIDS if list is full | |
1685 */ | |
1686 // | |
1687 MidCount = g_smscb_data.CBTopics.length + 1; | |
1688 | |
1689 /* Move the MID data up one. */ | |
1690 while (MidOffset < (MidCount)) //c005 rsa avoid copying from behind the array | |
1691 { | |
1692 g_smscb_data.CBTopics.entry[MidOffset] = g_smscb_data.CBTopics.entry[MidOffset + 1]; | |
1693 MidOffset++; | |
1694 } | |
1695 //c005 rsa but assign NO_MID behind the last entry | |
1696 if (MidCount > 0) | |
1697 g_smscb_data.CBTopics.entry[MidCount].msg_id = NO_MID; | |
1698 else | |
1699 g_smscb_data.CBTopics.entry[0].msg_id = NO_MID; | |
1700 //end c005 rsa | |
1701 | |
1702 g_smscb_data.CBTopics.length--; | |
1703 | |
1704 /* Delete any message in FIFO bearing the MID. */ | |
1705 /*MC SPR 1920, I have a suspicion this does nothing, but have replaced references | |
1706 to removed structure members with references to data stored for topics list*/ | |
1707 i = 0; | |
1708 while ((i < MAX_MIDS) && (g_smscb_data.CBTopics.entry[i].msg_id != Mid)) | |
1709 i++; | |
1710 | |
1711 | |
1712 #ifdef DEBUG_SMS_CB | |
1713 /***************************Go-lite Optimization changes Start***********************/ | |
1714 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1715 TRACE_EVENT_P1 ("i is %d", i); | |
1716 /***************************Go-lite Optimization changes end***********************/ | |
1717 #endif | |
1718 | |
1719 | |
1720 #ifdef DEBUG_SMS_CB | |
1721 /***************************Go-lite Optimization changes Start***********************/ | |
1722 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1723 TRACE_EVENT ("after deleting !"); | |
1724 for (ii = 0; ii < MAX_MIDS; ii++) | |
1725 { | |
1726 | |
1727 TRACE_EVENT_P2 (" 03 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii); | |
1728 } | |
1729 | |
1730 TRACE_EVENT_P1 ("03 midlist:%d", g_smscb_data.CBTopics.length); | |
1731 /***************************Go-lite Optimization changes end***********************/ | |
1732 #endif | |
1733 | |
1734 | |
1735 | |
1736 return 1; | |
1737 } | |
1738 | |
1739 /******************************************************************************* | |
1740 | |
1741 $Function: ffs_cb_tag_name | |
1742 | |
1743 $Description: generates a filename string for the pathname of an FFS CB Topic tag file | |
1744 i.e./MMI/cbtagXX where XX is the channel number. | |
1745 Added for issue1920 | |
1746 | |
1747 $Returns: filename string | |
1748 | |
1749 $Arguments: channel number, pointer to allocated string | |
1750 | |
1751 *******************************************************************************/ | |
1752 char* ffs_cb_tag_name(int channel_num, char* name) | |
1753 { | |
1754 sprintf(name,"/mmi/cbtag%d",channel_num); | |
1755 return name; | |
1756 } | |
1757 | |
1758 /******************************************************************************* | |
1759 | |
1760 $Function: smscb_getCBsettings | |
1761 | |
1762 $Description: This function allows the MS-User to examine the | |
1763 current list of MIDs being used to filter CB messages. | |
1764 | |
1765 | |
1766 $Returns: | |
1767 | |
1768 $Arguments: | |
1769 | |
1770 *******************************************************************************/ | |
1771 T_MFW smscb_getCBsettings(void) | |
1772 { | |
1773 T_MFW status; | |
1774 UBYTE i,d=0; | |
1775 /*MC SPR 1920, need to allocate this as large data structure*/ | |
1776 T_MFW_SMS_CB_INFO* SmsCbInfo = (T_MFW_SMS_CB_INFO*)ALLOC_MEMORY(sizeof(T_MFW_SMS_CB_INFO)); | |
1777 T_SMSCB_TOPIC_TAG ffs_tag;/*SPR1920*/ | |
1778 char file_name[20];/*SPR1920*/ | |
1779 int val;/*SPR1920*/ | |
1780 | |
1781 #ifdef FF_2TO1_PS | |
1782 return MFW_SMS_FAIL; | |
1783 #endif | |
1784 | |
1785 #ifdef DEBUG_SMS_CB | |
1786 TRACE_EVENT (" get the list from sim"); | |
1787 #endif | |
1788 | |
1789 //clear the Topic list | |
1790 smscb_InitData(); | |
1791 | |
1792 //get the Topic list from the SIM | |
1793 status = sms_get_cell_broadcast_info(SmsCbInfo); | |
1794 | |
1795 //set to default | |
1796 g_smscb_data.CBTopics.length = 0xFF; | |
1797 | |
1798 | |
1799 #ifdef DEBUG_SMS_CB | |
1800 /***************************Go-lite Optimization changes Start***********************/ | |
1801 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1802 for (i = 0; i <= 19; i++) | |
1803 { | |
1804 TRACE_EVENT_P2("DATA from mfw %d i:%d", SmsCbInfo->msg_id[i],i); | |
1805 } | |
1806 /***************************Go-lite Optimization changes end***********************/ | |
1807 #endif | |
1808 | |
1809 | |
1810 for (i = 0; i < MAX_MIDS; i++) | |
1811 { | |
1812 /* Update MID list from SIM data. */ | |
1813 g_smscb_data.CBTopics.entry[i].msg_id = SmsCbInfo->msg_id[d]; | |
1814 | |
1815 g_smscb_data.CBTopics.entry[i].dcs = SmsCbInfo->dcs[d]; | |
1816 | |
1817 if (g_smscb_data.CBTopics.entry[i].msg_id EQ NO_MID) | |
1818 { | |
1819 break; | |
1820 } | |
1821 else | |
1822 { | |
1823 g_smscb_data.CBTopics.length = i; | |
1824 } | |
1825 | |
1826 /* Set default tag string, until we get the saved name form PCM */ | |
1827 g_smscb_data.CBTopics.entry[i].name[0] = '\0'; | |
1828 /*SPR1920*/ | |
1829 /*attempt to read channel name from FFS file*/ | |
1830 val = ffs_fread(ffs_cb_tag_name(g_smscb_data.CBTopics.entry[i].msg_id, file_name), &ffs_tag, sizeof(T_SMSCB_TOPIC_TAG)); | |
1831 /*if reading successful, copy name to data structure*/ | |
1832 if (val == sizeof(ffs_tag)) | |
1833 { | |
1834 memcpy(g_smscb_data.CBTopics.entry[i].name, ffs_tag.name, CB_TAG_LENGTH); | |
1835 } | |
1836 /*SPR1920, end*/ | |
1837 /* ??? update here g_smscb_data.CBTopics.entry[i].name from PCM */ | |
1838 if (g_smscb_data.CBTopics.entry[i].name[0] EQ '\0') | |
1839 { | |
1840 /* but if it's empty substitute it by the channel number */ | |
1841 sprintf (g_smscb_data.CBTopics.entry[i].name,"Ch%d,ID:%d",i,g_smscb_data.CBTopics.entry[i].msg_id); | |
1842 } | |
1843 | |
1844 d+=2; | |
1845 | |
1846 #ifdef DEBUG_SMS_CB | |
1847 /***************************Go-lite Optimization changes Start***********************/ | |
1848 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1849 TRACE_EVENT_P2 ( "02 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[i].msg_id,i); | |
1850 /***************************Go-lite Optimization changes end***********************/ | |
1851 #endif | |
1852 | |
1853 } | |
1854 | |
1855 | |
1856 if (g_smscb_data.CBTopics.length EQ 0xFF) | |
1857 { | |
1858 //list is empty | |
1859 g_smscb_data.CBTopics.length = 0; | |
1860 } | |
1861 else | |
1862 { | |
1863 //+1 because the "0" was counted as well | |
1864 g_smscb_data.CBTopics.length +=1; | |
1865 } | |
1866 | |
1867 | |
1868 | |
1869 /*SPR 1920, end of function, deallocate memory*/ | |
1870 FREE_MEMORY((void*)SmsCbInfo,sizeof(T_MFW_SMS_CB_INFO)); | |
1871 return status; | |
1872 } | |
1873 | |
1874 /******************************************************************************* | |
1875 | |
1876 $Function: smscb_setCBsettings | |
1877 | |
1878 $Description: This function is used to activated/de-activate the CB | |
1879 feature and to submit MIDs for filter list control. | |
1880 | |
1881 When the CB feature is switched ON, the stored message | |
1882 index MIDs are set to invalid, i.e ready for incoming CB | |
1883 messages and the MID list is initialised. On switch OFF, | |
1884 the MID list parameters are refreshed before the switch | |
1885 OFF command is issued, to ensure that the most recent | |
1886 MID list is used. It is not necessary to handle the | |
1887 stored message index MIDs as they will be dealt with | |
1888 next time the feature is activated. | |
1889 usage: | |
1890 Status = smscb_setCBsettings(SMSCB_SWITCH_OFF); | |
1891 Status = smscb_setCBsettings(SMSCB_SWITCH_ON); | |
1892 | |
1893 | |
1894 $Returns: none. | |
1895 | |
1896 $Arguments: | |
1897 | |
1898 *******************************************************************************/ | |
1899 T_MFW smscb_setCBsettings(UBYTE State) | |
1900 { | |
1901 /* SPR759 - SH - removed 'static' so function can be called by Homezone */ | |
1902 | |
1903 UBYTE i,d=0; | |
1904 T_MFW Status; | |
1905 /*MC SPR 1920, need to allocate this as large data structure*/ | |
1906 T_MFW_SMS_CB_INFO* SmsCbInfo = (T_MFW_SMS_CB_INFO*)ALLOC_MEMORY(sizeof(T_MFW_SMS_CB_INFO)); | |
1907 | |
1908 #ifdef FF_2TO1_PS | |
1909 return MFW_SMS_FAIL; | |
1910 #endif | |
1911 | |
1912 /* SH - moved up here otherwise does not execute*/ | |
1913 //nm | |
1914 if (State EQ SMSCB_SWITCH_ON ) | |
1915 sms_set_mt_ind(MT_CB_MSG); | |
1916 else | |
1917 sms_set_mt_ind(MT_CB_NO_IDX); | |
1918 | |
1919 | |
1920 /* copy local list to SIM */ | |
1921 SmsCbInfo->mode = State; | |
1922 | |
1923 | |
1924 for (i = 0; i < MAX_MIDS; i++) | |
1925 { | |
1926 SmsCbInfo->msg_id[i] = NO_MID; /* Set MID list default values. */ | |
1927 SmsCbInfo->dcs[i] = 0xFF; | |
1928 } | |
1929 | |
1930 // Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar | |
1931 // Description: MFW memory size variable changed from U16 -> U32 | |
1932 // Solution: 'd' is checked against 'MAX_IDENTS' to restrict increment beyond limit | |
1933 for (i = 0; (i < g_smscb_data.CBTopics.length) && (d < MAX_IDENTS); i++) | |
1934 { | |
1935 | |
1936 SmsCbInfo->msg_id[d] = g_smscb_data.CBTopics.entry[i].msg_id; | |
1937 /* ??? update here PCM with g_smscb_data.CBTopics.entry[i].name */ | |
1938 SmsCbInfo->dcs[d] = (char)g_smscb_data.CBTopics.entry[i].dcs; | |
1939 | |
1940 d++; | |
1941 | |
1942 // Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar | |
1943 // Description: MFW memory size variable changed from U16 -> U32 | |
1944 // Solution: Duplication removed | |
1945 | |
1946 // SmsCbInfo->msg_id[d] = g_smscb_data.CBTopics.entry[i].msg_id; | |
1947 // /* ??? update here PCM with g_smscb_data.CBTopics.entry[i].name */ | |
1948 // SmsCbInfo->dcs[d] = (char)g_smscb_data.CBTopics.entry[i].dcs; | |
1949 | |
1950 // d++; | |
1951 | |
1952 | |
1953 } | |
1954 | |
1955 | |
1956 #ifdef DEBUG_SMS_CB | |
1957 /***************************Go-lite Optimization changes Start***********************/ | |
1958 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1959 for (i = 0; i <= 25; i++) | |
1960 { | |
1961 TRACE_EVENT_P2 ("SAVING..SmsCbInfo.msg_id[i] %d i:%d", SmsCbInfo->msg_id[i],i); | |
1962 } | |
1963 /***************************Go-lite Optimization changes end***********************/ | |
1964 #endif | |
1965 | |
1966 Status = sms_set_cell_broadcast_info(State, SmsCbInfo); | |
1967 | |
1968 #ifdef DEBUG_SMS_CB | |
1969 /***************************Go-lite Optimization changes Start***********************/ | |
1970 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
1971 TRACE_EVENT_P1 ("SAVING.Status is %d", Status); | |
1972 /***************************Go-lite Optimization changes end***********************/ | |
1973 #endif | |
1974 /*SPR 1920, end of function, deallocate memory*/ | |
1975 FREE_MEMORY((void*)SmsCbInfo,sizeof(T_MFW_SMS_CB_INFO)); | |
1976 return Status; | |
1977 } | |
1978 | |
1979 | |
1980 /******************************************************************************* | |
1981 | |
1982 $Function: smscb_get_new_cb_messages_count | |
1983 | |
1984 $Description: Calls from the MainMenu | |
1985 | |
1986 $Returns: none. | |
1987 | |
1988 $Arguments: | |
1989 | |
1990 *******************************************************************************/ | |
1991 SHORT smscb_get_new_cb_messages_count(void) | |
1992 { | |
1993 int j; | |
1994 int count; | |
1995 | |
1996 count = 0; | |
1997 /*SPR 1920, use cb_attributes list as smsCBList removed*/ | |
1998 for (j=0; j<MAX_MIDS; j++) | |
1999 { | |
2000 if (smscb_data.cb_attributes[j].status== UNREAD_MESSAGE) | |
2001 { | |
2002 count++; /* found an unread message */ | |
2003 } | |
2004 } | |
2005 return count; | |
2006 } | |
2007 | |
2008 /******************************************************************************* | |
2009 | |
2010 $Function: msgsExtractPhoneNumber | |
2011 | |
2012 $Description: This function extracts a phone number within quotes, which | |
2013 is embedded in a text message. | |
2014 | |
2015 $Returns: | |
2016 $Arguments: | |
2017 | |
2018 *******************************************************************************/ | |
2019 void msgsExtractPhoneNumber(UBYTE *InputString, UBYTE *Buffer) | |
2020 { | |
2021 UBYTE i; | |
2022 CHAR * FirstQuote; | |
2023 CHAR * SecondQuote; | |
2024 | |
2025 FirstQuote = strchr((const char *)InputString, (int)"\""); | |
2026 | |
2027 if (FirstQuote != '\0') | |
2028 { | |
2029 SecondQuote = strchr((const char *)FirstQuote++, (int)"\""); | |
2030 | |
2031 if (SecondQuote != '\0') | |
2032 { | |
2033 for (i = 0; FirstQuote != SecondQuote; i++) | |
2034 Buffer[i] = FirstQuote[i]; | |
2035 } | |
2036 | |
2037 if (ss_check_ss_string((UBYTE *)Buffer) != MFW_SS_DIAL) | |
2038 Buffer[0] = '\0'; | |
2039 } | |
2040 } | |
2041 #ifdef DEBUG_SMS_CB | |
2042 void handle_dummy_message(T_MFW_SMS_CB* Message) | |
2043 { | |
2044 USHORT i; | |
2045 SHORT geograhical_scope = (SHORT)0xC000; | |
2046 char temp_buffer[MAX_CBMSG_LEN]; | |
2047 | |
2048 TRACE_EVENT ("E_SMS_CB"); | |
2049 | |
2050 memset(temp_buffer, '\0', MAX_CBMSG_LEN); | |
2051 | |
2052 //check: does the incoming CB indicates a immediate scope | |
2053 if (! (Message->sn & geograhical_scope) ) | |
2054 { | |
2055 //Immediate scope | |
2056 // API - 859 - German characters were not visable in the CB message | |
2057 TRACE_EVENT("Immediate Scope"); | |
2058 | |
2059 | |
2060 | |
2061 for(i=0;i <= Message->msg_len;i++) | |
2062 { | |
2063 //check now for the termination "0x00D" | |
2064 //the message is NOT terminated with '\0' | |
2065 if (Message->cb_msg[i] EQ 0x0d) | |
2066 { | |
2067 Message->cb_msg[i]='\0'; | |
2068 } | |
2069 } | |
2070 // API - 859 - Convert the the incoming GSM Text to ASCII | |
2071 ATB_convert_String(Message->cb_msg, MFW_DCS_8bits, Message->msg_len, | |
2072 temp_buffer, MFW_ASCII, MAX_CBMSG_LEN, FALSE); | |
2073 #ifdef MMI_HOMEZONE_ENABLED // SH 11/12/01 | |
2074 /* SPR759 - SH - Homezone: check to see if CB gives us the coordinates of the centre of the current cell */ | |
2075 | |
2076 if (Message->msg_id==HZ_IDENTIFIER) | |
2077 { | |
2078 homezoneCBData(Message->cb_msg); | |
2079 } | |
2080 else | |
2081 { | |
2082 #endif // HOMEZONE | |
2083 | |
2084 //display now on the idle screen | |
2085 | |
2086 addCBCH(temp_buffer, IdleNewCBImmediateMessage); | |
2087 statusCBCH(TRUE); | |
2088 #ifdef MMI_HOMEZONE_ENABLED | |
2089 } /* SPR759 - SH */ | |
2090 #endif | |
2091 } | |
2092 | |
2093 else //Normal scope | |
2094 | |
2095 { | |
2096 TRACE_EVENT("Normal Scope"); | |
2097 //only for single- and the last page of mulitpages | |
2098 //other pages have not the termination "0x00D" | |
2099 | |
2100 // API - 859 - Convert the the incoming GSM Text to ASCII | |
2101 | |
2102 { | |
2103 Message->cb_msg[MAX_CBMSG_LEN-1]='\0'; | |
2104 } | |
2105 ATB_convert_String(Message->cb_msg, MFW_DCS_8bits, Message->msg_len, | |
2106 temp_buffer, MFW_ASCII, /*MAX_MSG_LEN*/MAX_CBMSG_LEN, FALSE); | |
2107 memcpy(Message->cb_msg, temp_buffer, MAX_CBMSG_LEN); | |
2108 //indicate on the idle screen the new incoming cb | |
2109 addCBCH( NULL, IdleNewCBNormalMessage ); | |
2110 statusCBCH(TRUE); | |
2111 //save the incoming cb messages in the fifo | |
2112 sms_new_incoming_cb (Message); | |
2113 | |
2114 } | |
2115 | |
2116 } | |
2117 /******************************************************************************* | |
2118 | |
2119 $Function: test_function_to_send_cb | |
2120 | |
2121 $Description: This function is only for simulation of incoming cb messages | |
2122 | |
2123 $Returns: | |
2124 $Arguments: | |
2125 | |
2126 *******************************************************************************/ | |
2127 | |
2128 | |
2129 void test_function_to_send_cb (void) | |
2130 { | |
2131 T_MFW_SMS_CB Message; | |
2132 UBYTE i; | |
2133 | |
2134 | |
2135 DEBUG = FALSE; | |
2136 | |
2137 // for testing only | |
2138 //#if 0 | |
2139 TRACE_EVENT("Testcase"); | |
2140 Message.sn = 60; | |
2141 Message.msg_id = 60; | |
2142 Message.page = 1; | |
2143 Message.pages = 1; | |
2144 strcpy (Message.cb_msg, "60 Toronto Blue Jays to a 4-0 victory Tuesday "); | |
2145 Message.msg_len= strlen(Message.cb_msg); | |
2146 handle_dummy_message (&Message); | |
2147 | |
2148 | |
2149 | |
2150 Message.sn = 61; | |
2151 Message.msg_id = 61; | |
2152 Message.page = 1; | |
2153 Message.pages = 1; | |
2154 strcpy (Message.cb_msg, "61 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2155 Message.msg_len= strlen(Message.cb_msg); | |
2156 handle_dummy_message (&Message); | |
2157 | |
2158 | |
2159 | |
2160 Message.sn = 62; | |
2161 Message.msg_id = 61; | |
2162 Message.page = 1; | |
2163 Message.pages = 1; | |
2164 strcpy (Message.cb_msg, "61/2 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2165 Message.msg_len= strlen(Message.cb_msg); | |
2166 handle_dummy_message (&Message); | |
2167 | |
2168 Message.sn = 55; | |
2169 Message.msg_id = 55; | |
2170 Message.page = 1; | |
2171 Message.pages = 1; | |
2172 strcpy (Message.cb_msg, " 55 Toronto Blue Jays to a 4-0 victory Tuesday Multipage "); | |
2173 Message.msg_len= strlen(Message.cb_msg); | |
2174 Message.dcs = MFW_DCS_8bits; | |
2175 handle_dummy_message (&Message); | |
2176 | |
2177 | |
2178 | |
2179 Message.sn = /*56*/0xC038; | |
2180 Message.msg_id = 55; | |
2181 Message.page = 1; | |
2182 Message.pages = 2; | |
2183 strcpy (Message.cb_msg, "55/2 1/2 Toronto Blue Jays to a 4-0 victory Tuesday Multipage"); | |
2184 Message.msg_len= strlen(Message.cb_msg); | |
2185 handle_dummy_message (&Message); | |
2186 | |
2187 | |
2188 | |
2189 Message.sn = /*56*/0xC038; | |
2190 Message.msg_id = 56; | |
2191 Message.page = 2; | |
2192 Message.pages = 2; | |
2193 strcpy (Message.cb_msg, "56 2/2 Toronto Blue Jays to a 4-0 victory Tuesday Multipage"); | |
2194 Message.msg_len= strlen(Message.cb_msg); | |
2195 handle_dummy_message (&Message); | |
2196 | |
2197 Message.sn = 58; | |
2198 Message.msg_id = 58; | |
2199 Message.page = 1; | |
2200 Message.pages = 1; | |
2201 strcpy (Message.cb_msg, "58 Toronto Blue Jays to a 4-0 victory Tuesday Multipage "); | |
2202 Message.msg_len= strlen(Message.cb_msg); | |
2203 handle_dummy_message (&Message); | |
2204 | |
2205 Message.sn = /*56*/0xC038; | |
2206 Message.msg_id = 56; | |
2207 Message.page = 2; | |
2208 Message.pages = 2; | |
2209 strcpy (Message.cb_msg, "56 2/2 Toronto Blue Jays to a 4-0 victory Tuesday Multipage"); | |
2210 Message.msg_len= strlen(Message.cb_msg); | |
2211 handle_dummy_message (&Message); | |
2212 | |
2213 Message.sn = 45; | |
2214 Message.msg_id = 45; | |
2215 Message.page = 1; | |
2216 Message.pages = 1; | |
2217 strcpy (Message.cb_msg, "45 Toronto Blue Jays to a 4-0 victory Tuesday Multipage "); | |
2218 Message.msg_len= strlen(Message.cb_msg); | |
2219 handle_dummy_message (&Message); | |
2220 | |
2221 //#if 0 | |
2222 | |
2223 Message.sn = 16384; | |
2224 Message.msg_id = 59; | |
2225 Message.page = 1; | |
2226 Message.pages = 15; | |
2227 strcpy (Message.cb_msg, "58 1/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage***"); | |
2228 Message.msg_len= strlen(Message.cb_msg); | |
2229 handle_dummy_message (&Message); | |
2230 | |
2231 | |
2232 | |
2233 Message.sn = 16384; | |
2234 Message.msg_id = 59; | |
2235 Message.page = 2; | |
2236 Message.pages = 15; | |
2237 strcpy (Message.cb_msg, "59 2/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2238 Message.msg_len= strlen(Message.cb_msg); | |
2239 handle_dummy_message (&Message); | |
2240 | |
2241 Message.sn = 16384; | |
2242 Message.msg_id = 59; | |
2243 Message.page = 3; | |
2244 Message.pages = 15; | |
2245 strcpy (Message.cb_msg, "59 3/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage***"); | |
2246 Message.msg_len= strlen(Message.cb_msg); | |
2247 handle_dummy_message (&Message); | |
2248 Message.sn = 16384; | |
2249 Message.msg_id = 59; | |
2250 Message.page = 4; | |
2251 Message.pages = 15; | |
2252 strcpy (Message.cb_msg, "59 4/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage***"); | |
2253 Message.msg_len= strlen(Message.cb_msg); | |
2254 handle_dummy_message (&Message); | |
2255 | |
2256 | |
2257 | |
2258 Message.sn = 16384; | |
2259 Message.msg_id = 59; | |
2260 Message.page = 5; | |
2261 Message.pages = 15; | |
2262 strcpy (Message.cb_msg, "59 5/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2263 Message.msg_len= strlen(Message.cb_msg); | |
2264 handle_dummy_message (&Message); | |
2265 | |
2266 Message.sn = 16384; | |
2267 Message.msg_id = 59; | |
2268 Message.page = 6; | |
2269 Message.pages = 15; | |
2270 strcpy (Message.cb_msg, "59 6/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2271 Message.msg_len= strlen(Message.cb_msg); | |
2272 handle_dummy_message (&Message); | |
2273 Message.sn = 16384; | |
2274 Message.msg_id = 59; | |
2275 Message.page = 7; | |
2276 Message.pages = 15; | |
2277 strcpy (Message.cb_msg, "59 7/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage***"); | |
2278 Message.msg_len= strlen(Message.cb_msg); | |
2279 handle_dummy_message (&Message); | |
2280 | |
2281 | |
2282 | |
2283 Message.sn = 16384; | |
2284 Message.msg_id = 59; | |
2285 Message.page = 8; | |
2286 Message.pages = 15; | |
2287 strcpy (Message.cb_msg, "59 8/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2288 Message.msg_len= strlen(Message.cb_msg); | |
2289 handle_dummy_message (&Message); | |
2290 | |
2291 Message.sn = 16384; | |
2292 Message.msg_id = 59; | |
2293 Message.page = 9; | |
2294 Message.pages = 15; | |
2295 strcpy (Message.cb_msg, "59 9/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2296 Message.msg_len= strlen(Message.cb_msg); | |
2297 handle_dummy_message (&Message); | |
2298 Message.sn = 16384; | |
2299 Message.msg_id = 59; | |
2300 Message.page = 10; | |
2301 Message.pages = 15; | |
2302 strcpy (Message.cb_msg, "59 10/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2303 Message.msg_len= strlen(Message.cb_msg); | |
2304 handle_dummy_message (&Message); | |
2305 | |
2306 | |
2307 | |
2308 Message.sn = 16384; | |
2309 Message.msg_id = 59; | |
2310 Message.page = 11; | |
2311 Message.pages = 15; | |
2312 strcpy (Message.cb_msg, "59 11/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2313 Message.msg_len= strlen(Message.cb_msg); | |
2314 handle_dummy_message (&Message); | |
2315 | |
2316 Message.sn = 16384; | |
2317 Message.msg_id = 59; | |
2318 Message.page = 12; | |
2319 Message.pages = 15; | |
2320 strcpy (Message.cb_msg, "59 12/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2321 Message.msg_len= strlen(Message.cb_msg); | |
2322 handle_dummy_message (&Message); | |
2323 Message.sn = 16384; | |
2324 Message.msg_id = 59; | |
2325 Message.page = 13; | |
2326 Message.pages = 15; | |
2327 strcpy (Message.cb_msg, "59 13/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2328 Message.msg_len= strlen(Message.cb_msg); | |
2329 handle_dummy_message (&Message); | |
2330 | |
2331 | |
2332 | |
2333 Message.sn = 16384; | |
2334 Message.msg_id = 59; | |
2335 Message.page = 14; | |
2336 Message.pages = 15; | |
2337 strcpy (Message.cb_msg, "59 14/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage***"); | |
2338 Message.msg_len= strlen(Message.cb_msg); | |
2339 handle_dummy_message (&Message); | |
2340 | |
2341 Message.sn = 16384; | |
2342 Message.msg_id = 59; | |
2343 Message.page = 15; | |
2344 Message.pages = 15; | |
2345 strcpy (Message.cb_msg, "59 15/15 Toronto Blue Jays to a 4-0 victory Tuesday Multipage ***"); | |
2346 Message.msg_len= strlen(Message.cb_msg); | |
2347 handle_dummy_message (&Message); | |
2348 //#endif | |
2349 | |
2350 #if 0 | |
2351 | |
2352 | |
2353 | |
2354 | |
2355 Message.sn = 63; | |
2356 Message.msg_id = 63; | |
2357 Message.page = 1; | |
2358 Message.pages = 1; | |
2359 strcpy (Message.cb_msg, "63 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2360 Message.msg_len= strlen(Message.cb_msg); | |
2361 handle_dummy_message (&Message); | |
2362 | |
2363 | |
2364 Message.sn = 64; | |
2365 Message.msg_id = 64; | |
2366 Message.page = 1; | |
2367 Message.pages = 1; | |
2368 strcpy (Message.cb_msg, "64 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2369 Message.msg_len= strlen(Message.cb_msg); | |
2370 handle_dummy_message (&Message); | |
2371 | |
2372 Message.sn = 65; | |
2373 Message.msg_id = 65; | |
2374 Message.page = 1; | |
2375 Message.pages = 3; | |
2376 strcpy (Message.cb_msg, "65 1/3 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2377 Message.msg_len= strlen(Message.cb_msg); | |
2378 handle_dummy_message (&Message); | |
2379 | |
2380 | |
2381 Message.sn = 65; | |
2382 Message.msg_id = 65; | |
2383 Message.page = 2; | |
2384 Message.pages = 3; | |
2385 strcpy (Message.cb_msg, "65 2/3 Toronto Blue Jays to a 4-0 victory Tuesday 65"); | |
2386 Message.msg_len= strlen(Message.cb_msg); | |
2387 handle_dummy_message (&Message); | |
2388 | |
2389 | |
2390 Message.sn = 65; | |
2391 Message.msg_id = 65; | |
2392 Message.page = 3; | |
2393 Message.pages = 3; | |
2394 strcpy (Message.cb_msg, "65 3/3 Toronto Blue Jays to a 4-0 victory Tuesday 65"); | |
2395 Message.msg_len= strlen(Message.cb_msg); | |
2396 handle_dummy_message (&Message); | |
2397 | |
2398 | |
2399 Message.sn = 66; | |
2400 Message.msg_id = 66; | |
2401 Message.page = 1; | |
2402 Message.pages = 1; | |
2403 strcpy (Message.cb_msg, "66 Toronto Blue Jays to a 4-0 victory Tuesday"); | |
2404 Message.msg_len= strlen(Message.cb_msg); | |
2405 handle_dummy_message (&Message); | |
2406 | |
2407 Message.sn = 67; | |
2408 Message.msg_id = 67; | |
2409 Message.page = 1; | |
2410 Message.pages = 1; | |
2411 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 67"); | |
2412 Message.msg_len= strlen(Message.cb_msg); | |
2413 handle_dummy_message (&Message); | |
2414 | |
2415 Message.sn = 68; | |
2416 Message.msg_id = 68; | |
2417 Message.page = 1; | |
2418 Message.pages = 1; | |
2419 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 68 "); | |
2420 Message.msg_len= strlen(Message.cb_msg); | |
2421 handle_dummy_message (&Message); | |
2422 | |
2423 | |
2424 Message.sn = 72; | |
2425 Message.msg_id = 72; | |
2426 Message.page = 1; | |
2427 Message.pages = 4; | |
2428 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 72:1 "); | |
2429 Message.msg_len= strlen(Message.cb_msg); | |
2430 handle_dummy_message (&Message); | |
2431 | |
2432 Message.sn = 72; | |
2433 Message.msg_id = 72; | |
2434 Message.page = 2; | |
2435 Message.pages = 4; | |
2436 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 72:2 "); | |
2437 Message.msg_len= strlen(Message.cb_msg); | |
2438 handle_dummy_message (&Message); | |
2439 | |
2440 Message.sn = 72; | |
2441 Message.msg_id = 72; | |
2442 Message.page = 3; | |
2443 Message.pages = 4; | |
2444 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 72:3 "); | |
2445 Message.msg_len= strlen(Message.cb_msg); | |
2446 handle_dummy_message (&Message); | |
2447 | |
2448 Message.sn = 72; | |
2449 Message.msg_id = 72; | |
2450 Message.page =4; | |
2451 Message.pages = 4; | |
2452 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 72:4 "); | |
2453 Message.msg_len= strlen(Message.cb_msg); | |
2454 handle_dummy_message (&Message); | |
2455 | |
2456 Message.sn = 73; | |
2457 Message.msg_id = 73; | |
2458 Message.page = 1; | |
2459 Message.pages = 1; | |
2460 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 73 "); | |
2461 Message.msg_len= strlen(Message.cb_msg); | |
2462 handle_dummy_message (&Message); | |
2463 | |
2464 | |
2465 Message.sn = 74; | |
2466 Message.msg_id = 74; | |
2467 Message.page = 1; | |
2468 Message.pages = 1; | |
2469 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 74"); | |
2470 Message.msg_len= strlen(Message.cb_msg); | |
2471 handle_dummy_message (&Message); | |
2472 | |
2473 Message.sn = 75; | |
2474 Message.msg_id = 75; | |
2475 Message.page = 1; | |
2476 Message.pages = 1; | |
2477 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 75 "); | |
2478 Message.msg_len= strlen(Message.cb_msg); | |
2479 handle_dummy_message (&Message); | |
2480 | |
2481 Message.sn = 77; | |
2482 Message.msg_id = 77; | |
2483 Message.page = 1; | |
2484 Message.pages = 2; | |
2485 strcpy (Message.cb_msg, "1/2 Toronto Blue Jays to a 4-0 victory Tuesday 77:1"); | |
2486 Message.msg_len= strlen(Message.cb_msg); | |
2487 handle_dummy_message (&Message); | |
2488 | |
2489 Message.sn = 77; | |
2490 Message.msg_id = 77; | |
2491 Message.page = 2; | |
2492 Message.pages = 2; | |
2493 strcpy (Message.cb_msg, "2/2 Toronto Blue Jays to a 4-0 victory Tuesday 77:2 "); | |
2494 Message.msg_len= strlen(Message.cb_msg); | |
2495 handle_dummy_message (&Message); | |
2496 // | |
2497 Message.sn = 78; | |
2498 Message.msg_id = 78; | |
2499 Message.page = 1; | |
2500 Message.pages = 1; | |
2501 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 78"); | |
2502 Message.msg_len= strlen(Message.cb_msg); | |
2503 handle_dummy_message (&Message); | |
2504 | |
2505 Message.sn = 16386; | |
2506 Message.msg_id = 79; | |
2507 Message.page = 1; | |
2508 Message.pages = 1; | |
2509 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 79 "); | |
2510 Message.msg_len= strlen(Message.cb_msg); | |
2511 handle_dummy_message (&Message); | |
2512 | |
2513 Message.sn = 80; | |
2514 Message.msg_id = 80; | |
2515 Message.page = 1; | |
2516 Message.pages = 3; | |
2517 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 80:1"); | |
2518 Message.msg_len= strlen(Message.cb_msg); | |
2519 handle_dummy_message (&Message); | |
2520 | |
2521 | |
2522 Message.sn = 80; | |
2523 Message.msg_id = 80; | |
2524 Message.page = 3; | |
2525 Message.pages = 3; | |
2526 strcpy (Message.cb_msg, "80 2/3 Yoronto Blue Jays to a 4-0 Tuesday:3"); | |
2527 Message.msg_len= strlen(Message.cb_msg); | |
2528 handle_dummy_message (&Message); | |
2529 | |
2530 Message.sn = 80; | |
2531 Message.msg_id = 80; | |
2532 Message.page = 2; | |
2533 Message.pages = 3; | |
2534 strcpy (Message.cb_msg, "80 1/3 Toronto Blue Jays to Tuesday:2"); | |
2535 Message.msg_len= strlen(Message.cb_msg); | |
2536 handle_dummy_message (&Message); | |
2537 | |
2538 DEBUG = TRUE; | |
2539 | |
2540 Message.sn = 83; | |
2541 Message.msg_id = 83; | |
2542 Message.page = 1; | |
2543 Message.pages = 1; | |
2544 strcpy (Message.cb_msg, " Toronto Blue Jays to a 4-0 victory Tuesday 83"); | |
2545 Message.msg_len= strlen(Message.cb_msg); | |
2546 handle_dummy_message (&Message); | |
2547 #endif | |
2548 } | |
2549 | |
2550 #endif | |
2551 | |
2552 | |
2553 /******************************************************************************* | |
2554 | |
2555 $Function: sms_cb_init | |
2556 | |
2557 $Description: This is initialize the CB fifo and the attributes after switch on the mobile | |
2558 | |
2559 $Returns: | |
2560 $Arguments: | |
2561 | |
2562 *******************************************************************************/ | |
2563 void sms_cb_init (void) | |
2564 { | |
2565 | |
2566 //for tracing | |
2567 #ifdef DEBUG_SMS_CB | |
2568 char buf [100]; | |
2569 #endif | |
2570 | |
2571 | |
2572 UBYTE i; | |
2573 | |
2574 | |
2575 //set to the default, "FF" -> no CB messages stored | |
2576 smscb_data.used_pointer = 0xFF; | |
2577 | |
2578 //set to the default, "0" -> free spaces on the first index in fifo | |
2579 smscb_data.free_pointer = 0; | |
2580 | |
2581 | |
2582 //set the fifo to the default | |
2583 for (i=0; i<MAX_STORED_PAGES -1 ; i++) | |
2584 { | |
2585 smscb_data.cb_attributes[i].next_link = i + 1; | |
2586 } | |
2587 | |
2588 for (i=0; i<MAX_STORED_PAGES ; i++) | |
2589 { | |
2590 smscb_data.cb_attributes[i].start_page = 0; | |
2591 smscb_data.cb_attributes[i].header = NULL;/* SPR 1920,ensure unalloacted pointers set to NULL*/ | |
2592 } | |
2593 | |
2594 | |
2595 | |
2596 //"FF" on the last entry means end of the free spaces list | |
2597 smscb_data.cb_attributes[MAX_STORED_PAGES-1].next_link = 0xFF; | |
2598 smscb_getCBsettings(); | |
2599 | |
2600 if (settingsGetStatus(SettingsCBDisable)) | |
2601 smscb_setCBsettings(SMSCB_SWITCH_OFF); | |
2602 else | |
2603 smscb_setCBsettings(SMSCB_SWITCH_ON); | |
2604 //for tracing | |
2605 | |
2606 | |
2607 | |
2608 | |
2609 | |
2610 } | |
2611 | |
2612 /******************************************************************************* | |
2613 | |
2614 $Function: sms_cb_exit | |
2615 | |
2616 $Description: This deallocates any memory. MC added for SPR 1920 | |
2617 | |
2618 $Returns: | |
2619 $Arguments: | |
2620 | |
2621 *******************************************************************************/ | |
2622 void sms_cb_exit (void) | |
2623 { | |
2624 int i; | |
2625 /*for each storage space*/ | |
2626 for (i=0;i<MAX_STORED_PAGES;i++) | |
2627 { /*if memory allocated, deallocate it*/ | |
2628 if(smscb_data.messages[i] != NULL) | |
2629 { mfwFree((U8*)smscb_data.messages[i], CB_PAGE_LENGTH); | |
2630 smscb_data.messages[i] = NULL; | |
2631 } | |
2632 } | |
2633 for(i=0; i<MAX_MIDS;i++) | |
2634 { if (smscb_data.cb_attributes[i].header != NULL) | |
2635 { FREE_MEMORY((void*)smscb_data.cb_attributes[i].header,sizeof(char)*25); | |
2636 smscb_data.cb_attributes[i].header = NULL; | |
2637 } | |
2638 } | |
2639 } | |
2640 | |
2641 /******************************************************************************* | |
2642 | |
2643 $Function: sms_new_incoming_cb | |
2644 | |
2645 $Description: This function will be call after each NEW incoming cb messages. | |
2646 It checks for free spaces and organize to save the cb messages | |
2647 in the right order. | |
2648 $Returns: | |
2649 | |
2650 $Arguments: | |
2651 | |
2652 *******************************************************************************/ | |
2653 void sms_new_incoming_cb (T_MFW_SMS_CB *Message) | |
2654 { | |
2655 | |
2656 //only for tracing | |
2657 #ifdef DEBUG_SMS_CB | |
2658 UBYTE i, test; | |
2659 #endif | |
2660 | |
2661 | |
2662 //set to default | |
2663 UBYTE result =0; | |
2664 smscb_data.found_mid = FALSE; | |
2665 smscb_data.clear_mid = FALSE; | |
2666 | |
2667 | |
2668 //only for tracing | |
2669 #ifdef DEBUG_SMS_CB | |
2670 TRACE_EVENT("--------------start------------"); | |
2671 #endif //DEBUG_SMS_CB | |
2672 | |
2673 | |
2674 //search the new MID with the MID's in the fifo. | |
2675 //used_pointer EQ 0xFF means there is no message in the fifo | |
2676 if (smscb_data.used_pointer NEQ 0xFF) | |
2677 { | |
2678 result = sms_cb_search_mid (Message->msg_id, Message->sn); | |
2679 } | |
2680 | |
2681 | |
2682 //error: in searching mid | |
2683 if (result EQ 0xAA) | |
2684 { | |
2685 TRACE_EVENT("sms cb ERROR, in searching mid"); | |
2686 return; | |
2687 } | |
2688 | |
2689 | |
2690 // does the message with the same MID already exist in the fifo ? | |
2691 if(smscb_data.found_mid) | |
2692 { | |
2693 TRACE_EVENT("MID already exist"); | |
2694 | |
2695 sms_cb_delete_message (Message->msg_id); | |
2696 | |
2697 | |
2698 smscb_data.clear_mid = TRUE; | |
2699 } | |
2700 | |
2701 | |
2702 // does we have free space ? | |
2703 if (smscb_data.free_pointer EQ 0xFF) | |
2704 { | |
2705 //no free spaces -> means overwrite the oldest message | |
2706 sms_cb_overwrite_old_message (Message); | |
2707 | |
2708 } | |
2709 else // does we have free space ? | |
2710 { | |
2711 //still free spaces | |
2712 sms_cb_store_message (Message); | |
2713 | |
2714 } | |
2715 | |
2716 | |
2717 | |
2718 //only for tracing | |
2719 #ifdef DEBUG_SMS_CB | |
2720 /***************************Go-lite Optimization changes Start***********************/ | |
2721 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
2722 TRACE_EVENT_P1("5 smscb_data.used_pointer %d ", smscb_data.used_pointer); | |
2723 | |
2724 TRACE_EVENT_P1("5 smscb_data.free_pointer %d ", smscb_data.free_pointer); | |
2725 /***************************Go-lite Optimization changes end***********************/ | |
2726 TRACE_EVENT("--------------finish------------"); | |
2727 | |
2728 | |
2729 #endif //DEBUG_SMS_CB | |
2730 | |
2731 } | |
2732 | |
2733 | |
2734 | |
2735 /******************************************************************************* | |
2736 | |
2737 $Function: sms_cb_store_message | |
2738 | |
2739 $Description: This function will be call when we have still free space for saving | |
2740 new incoming cb messages. | |
2741 $Returns: | |
2742 | |
2743 $Arguments: | |
2744 | |
2745 *******************************************************************************/ | |
2746 UBYTE sms_cb_store_message (T_MFW_SMS_CB *Message) | |
2747 { | |
2748 | |
2749 TRACE_FUNCTION("sms_cb_store_message"); | |
2750 | |
2751 | |
2752 //it is only for the first time | |
2753 if (smscb_data.used_pointer EQ 0xFF) | |
2754 { | |
2755 // request for a free space | |
2756 smscb_data.used_pointer = smscb_data.free_pointer; | |
2757 } | |
2758 | |
2759 | |
2760 //save the new message in the fifo | |
2761 /*MC SPR 1920 if memory not alloacted for message, allocate some*/ | |
2762 TRACE_EVENT_P1("Allocating memory to slot %d for CB message", smscb_data.free_pointer); | |
2763 | |
2764 if (smscb_data.messages[smscb_data.free_pointer] == NULL) | |
2765 if ((smscb_data.messages[smscb_data.free_pointer] = (char*) mfwAlloc(sizeof(char)*CB_PAGE_LENGTH)) != NULL) | |
2766 memcpy(smscb_data.messages[smscb_data.free_pointer], Message->cb_msg,CB_PAGE_LENGTH); | |
2767 | |
2768 /*MC end*/ | |
2769 //save the attributes of the new cb | |
2770 sms_cb_store_attributes (smscb_data.free_pointer, Message); | |
2771 | |
2772 //set the status of the message | |
2773 smscb_data.cb_attributes[smscb_data.free_pointer].status = UNREAD_MESSAGE; | |
2774 | |
2775 //was it the last free space ? | |
2776 if (smscb_data.cb_attributes[smscb_data.free_pointer].next_link EQ 0xFF) | |
2777 { | |
2778 //no more free space available | |
2779 | |
2780 UBYTE temp, result; | |
2781 | |
2782 | |
2783 //keep the link-value for later | |
2784 temp = smscb_data.used_pointer; | |
2785 | |
2786 //find the termination in the link list | |
2787 result = sms_cb_find_termination (&smscb_data.used_pointer); | |
2788 | |
2789 //error: couldnt find the termination ?! | |
2790 if (result EQ 0xAA) | |
2791 { | |
2792 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
2793 return 0; // RAVI | |
2794 } | |
2795 | |
2796 | |
2797 //update the link-list | |
2798 smscb_data.cb_attributes[smscb_data.used_pointer].next_link = smscb_data.free_pointer; | |
2799 | |
2800 //no more free space | |
2801 smscb_data.free_pointer = 0xFF; | |
2802 | |
2803 //update the used pointer | |
2804 smscb_data.used_pointer = temp; | |
2805 | |
2806 //did it clear before ? | |
2807 if (smscb_data.clear_mid) | |
2808 { | |
2809 smscb_data.used_pointer = smscb_data.result_used; | |
2810 } | |
2811 | |
2812 | |
2813 } | |
2814 else //was it the last free space ? | |
2815 { | |
2816 //no, still free space available | |
2817 | |
2818 UBYTE temp, temp_2, result; | |
2819 | |
2820 //keep the usedpointer-value for later | |
2821 temp_2 = smscb_data.used_pointer; | |
2822 | |
2823 | |
2824 //keep the link-value for later | |
2825 temp = smscb_data.cb_attributes[smscb_data.free_pointer].next_link; | |
2826 | |
2827 | |
2828 //terminate the used list | |
2829 smscb_data.cb_attributes[smscb_data.free_pointer].next_link = 0xFF; | |
2830 | |
2831 | |
2832 //find the termination in the link list | |
2833 result = sms_cb_find_termination (&smscb_data.used_pointer); | |
2834 | |
2835 //error: couldnt find the termination ?! | |
2836 if (result EQ 0xAA) | |
2837 { | |
2838 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
2839 return 0; | |
2840 } | |
2841 | |
2842 | |
2843 //update the use pointer | |
2844 if (smscb_data.used_pointer NEQ smscb_data.free_pointer) | |
2845 { | |
2846 smscb_data.cb_attributes[smscb_data.used_pointer].next_link = smscb_data.free_pointer; | |
2847 } | |
2848 | |
2849 | |
2850 // update the free pointer as well | |
2851 smscb_data.free_pointer = temp; | |
2852 | |
2853 | |
2854 //did it clear before ? | |
2855 if (smscb_data.clear_mid) | |
2856 { | |
2857 smscb_data.used_pointer = smscb_data.result_used; | |
2858 } | |
2859 else | |
2860 { | |
2861 //update the used pointer | |
2862 smscb_data.used_pointer = temp_2 ; | |
2863 } | |
2864 | |
2865 | |
2866 } | |
2867 //ADDED BY RAVI- 28-11-2005 | |
2868 return 1; | |
2869 //END RAVI - 28-11-2005 | |
2870 } | |
2871 | |
2872 /******************************************************************************* | |
2873 | |
2874 $Function: sms_cb_overwrite_old_message | |
2875 | |
2876 $Description: This function will be call when we don't have free space for saving | |
2877 new incoming cb messages. The new cb just overwrite the | |
2878 oldest cb in the fifo. | |
2879 | |
2880 $Returns: | |
2881 | |
2882 $Arguments: | |
2883 | |
2884 *******************************************************************************/ | |
2885 UBYTE sms_cb_overwrite_old_message (T_MFW_SMS_CB *Message) | |
2886 { | |
2887 // UBYTE temp, temp_2, result; // RAVI | |
2888 | |
2889 //only tracing | |
2890 #ifdef DEBUG_SMS_CB | |
2891 /***************************Go-lite Optimization changes Start***********************/ | |
2892 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
2893 TRACE_EVENT_P1("used_pointer= %d ", smscb_data.used_pointer); | |
2894 TRACE_EVENT_P1("pages = %d, ", smscb_data.cb_attributes[smscb_data.used_pointer].pages); | |
2895 TRACE_EVENT_P1("page = %d ", smscb_data.cb_attributes[smscb_data.used_pointer].page); | |
2896 TRACE_EVENT_P1( "mid = %d ", smscb_data.cb_attributes[smscb_data.used_pointer].mid); | |
2897 /***************************Go-lite Optimization changes end***********************/ | |
2898 #endif //DEBUG_SMS_CB | |
2899 | |
2900 | |
2901 TRACE_EVENT("sms_cb_overwrite_old_message"); | |
2902 | |
2903 //keep the value for later | |
2904 // temp = smscb_data.used_pointer; | |
2905 | |
2906 | |
2907 //find the page in the fifo with the same MID number & delete them | |
2908 sms_cb_delete_message (smscb_data.cb_attributes[smscb_data.used_pointer].mid); | |
2909 | |
2910 | |
2911 //now we have free space to store the new incoming cb message | |
2912 sms_cb_store_message (Message); | |
2913 | |
2914 return 1; // ADDED BY RAVI - 28-11-2005 | |
2915 | |
2916 } | |
2917 | |
2918 /******************************************************************************* | |
2919 | |
2920 $Function: sms_cb_store_attributes | |
2921 | |
2922 $Description: Store the attributes of the new incoming cb | |
2923 | |
2924 Attributes are stored seperatly from the message text | |
2925 $Returns: | |
2926 | |
2927 $Arguments: | |
2928 | |
2929 *******************************************************************************/ | |
2930 | |
2931 void sms_cb_store_attributes (UBYTE position, T_MFW_SMS_CB *Message) | |
2932 { | |
2933 smscb_data.cb_attributes[position].sn = Message->sn; | |
2934 smscb_data.cb_attributes[position].mid = Message->msg_id; | |
2935 smscb_data.cb_attributes[position].dcs = Message->dcs; | |
2936 smscb_data.cb_attributes[position].page = Message->page; | |
2937 smscb_data.cb_attributes[position].pages = Message->pages; | |
2938 smscb_data.cb_attributes[position].msg_len = Message->msg_len; | |
2939 | |
2940 } | |
2941 | |
2942 | |
2943 /******************************************************************************* | |
2944 | |
2945 $Function: sms_cb_search_mid | |
2946 | |
2947 $Description: This function searchs the new incoming message in the | |
2948 fifo for the already existing stored messages. | |
2949 If true, the stored messages in the fifo will be removed | |
2950 | |
2951 $Returns: | |
2952 | |
2953 $Arguments: | |
2954 | |
2955 *******************************************************************************/ | |
2956 UBYTE sms_cb_search_mid (USHORT mid ,SHORT sn) | |
2957 { | |
2958 UBYTE temp, i=0; | |
2959 SHORT update_number_mask = 0x0F; | |
2960 | |
2961 temp = smscb_data.used_pointer; | |
2962 | |
2963 | |
2964 if (smscb_data.cb_attributes[temp].mid EQ mid) | |
2965 { | |
2966 //found the mid in the fifo | |
2967 TRACE_EVENT("Matching MID"); | |
2968 if ((smscb_data.cb_attributes[temp].sn & update_number_mask) NEQ | |
2969 (sn & update_number_mask) ) | |
2970 { | |
2971 //the new cb is the update of the existing one | |
2972 smscb_data.found_mid = TRUE; | |
2973 TRACE_EVENT("found = True, return"); | |
2974 return temp; | |
2975 } | |
2976 /*SPR 2429, return this index as otherwise there will be two | |
2977 copies of the same message*/ | |
2978 TRACE_EVENT("Serial numbers match"); | |
2979 return temp; | |
2980 } | |
2981 | |
2982 | |
2983 while (smscb_data.cb_attributes[temp].next_link NEQ 0xFF) | |
2984 { | |
2985 | |
2986 // going through the link list | |
2987 temp = smscb_data.cb_attributes[temp].next_link; | |
2988 | |
2989 | |
2990 if (smscb_data.cb_attributes[temp].mid EQ mid) | |
2991 { | |
2992 //found the mid in the fifo | |
2993 TRACE_EVENT_P1("Matching MID at location:%d", temp); | |
2994 if ((smscb_data.cb_attributes[temp].sn & update_number_mask) NEQ | |
2995 (sn & update_number_mask) ) | |
2996 { | |
2997 | |
2998 //the new cb is the update of the existing one in the fifo | |
2999 smscb_data.found_mid = TRUE; | |
3000 return temp; | |
3001 | |
3002 | |
3003 } | |
3004 /*SPR 2429, return this index as otherwise there will be two | |
3005 copies of the same message*/ | |
3006 TRACE_EVENT("Serial numbers match"); | |
3007 return temp;/*SHould just replace old one with new one anyway*/ | |
3008 } | |
3009 | |
3010 | |
3011 // only to be sure there is a ever ending loop | |
3012 i++; | |
3013 if (i > MAX_STORED_PAGES) | |
3014 return 0xAA; | |
3015 } | |
3016 | |
3017 return temp; | |
3018 } | |
3019 | |
3020 | |
3021 | |
3022 /******************************************************************************* | |
3023 | |
3024 $Function: sms_cb_delete_message | |
3025 | |
3026 $Description: This function delete the messages in the fifo, even for multipages | |
3027 | |
3028 $Returns: | |
3029 | |
3030 $Arguments: | |
3031 | |
3032 *******************************************************************************/ | |
3033 UBYTE sms_cb_delete_message (USHORT mid) | |
3034 { | |
3035 | |
3036 //only tracing | |
3037 #ifdef DEBUG_SMS_CB | |
3038 char buf[100]; | |
3039 #endif | |
3040 | |
3041 UBYTE temp, temp_2, result; // , i=0; // RAVI | |
3042 | |
3043 TRACE_EVENT("sms_cb_delete_message"); | |
3044 | |
3045 | |
3046 //keep the value for later | |
3047 temp_2 = smscb_data.used_pointer; | |
3048 | |
3049 | |
3050 // keep the value for later | |
3051 smscb_data.start_used = smscb_data.used_pointer; | |
3052 | |
3053 //search for the first page of the multipages | |
3054 smscb_data.start_used = sms_cb_find_startpoint (mid, smscb_data.used_pointer); | |
3055 | |
3056 //error: couldnt find the termination ?! | |
3057 if (smscb_data.start_used EQ 0xAA) | |
3058 { | |
3059 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3060 return 0; // RAVI | |
3061 } | |
3062 | |
3063 | |
3064 //found immediately ? | |
3065 if (smscb_data.start_used EQ smscb_data.used_pointer) | |
3066 { | |
3067 //is in the OLDEST position in the fifo | |
3068 | |
3069 TRACE_EVENT("message in oldest position in FIFO"); | |
3070 | |
3071 //keep the value for later | |
3072 temp = smscb_data.used_pointer; | |
3073 | |
3074 //search for the last page | |
3075 smscb_data.end_used = sms_cb_find_endpoint (mid, smscb_data.used_pointer); | |
3076 | |
3077 | |
3078 //error: couldnt find the termination ?! | |
3079 if (smscb_data.end_used EQ 0xAA) | |
3080 { | |
3081 TRACE_EVENT("sms cb ERROR"); | |
3082 return 0; // RAVI | |
3083 } | |
3084 | |
3085 | |
3086 | |
3087 if ( (smscb_data.cb_attributes[smscb_data.used_pointer].next_link EQ 0xFF) && | |
3088 (smscb_data.cb_attributes[smscb_data.used_pointer].mid EQ mid) ) | |
3089 { | |
3090 //it is the oldest cb and also the only one in the fifo | |
3091 TRACE_EVENT("oldest position and the only one in the list"); | |
3092 | |
3093 | |
3094 //deleted messages -> now more space availabe -> update the free pointer | |
3095 result = sms_cb_update_free_pointer (temp); | |
3096 | |
3097 //terminate the free pointer list | |
3098 //smscb_data.cb_attributes[smscb_data.end_used].next_link = 0xFF; | |
3099 | |
3100 //error: couldnt find the termination ?! | |
3101 if (result EQ 0xAA) | |
3102 { | |
3103 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3104 return 0; | |
3105 } | |
3106 | |
3107 //no anymore cb message in the fifo | |
3108 //terminate the use list | |
3109 smscb_data.used_pointer = 0xFF; | |
3110 | |
3111 smscb_data.result_used = result; | |
3112 | |
3113 } | |
3114 else | |
3115 { | |
3116 //deleted messages -> now more space availabe -> update the free pointer | |
3117 result = sms_cb_update_free_pointer (temp); | |
3118 | |
3119 //terminate the free pointer list | |
3120 smscb_data.cb_attributes[smscb_data.end_used].next_link = 0xFF; | |
3121 | |
3122 | |
3123 //error: couldnt find the termination ?! | |
3124 if (result EQ 0xAA) | |
3125 { | |
3126 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3127 return 0; | |
3128 } | |
3129 | |
3130 } | |
3131 | |
3132 | |
3133 } | |
3134 else //found immediately ? | |
3135 { | |
3136 | |
3137 //keep the value for later | |
3138 temp = smscb_data.used_pointer; | |
3139 | |
3140 //search for the last page of the multipages | |
3141 smscb_data.end_used = sms_cb_find_endpoint (mid, smscb_data.used_pointer); | |
3142 | |
3143 if (smscb_data.start_used EQ 0xAA) | |
3144 { | |
3145 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3146 return 0; | |
3147 } | |
3148 | |
3149 | |
3150 if (smscb_data.cb_attributes[smscb_data.used_pointer].next_link EQ 0xFF && | |
3151 smscb_data.cb_attributes[smscb_data.used_pointer].mid EQ mid) | |
3152 { | |
3153 //is in the the latest position in the fifo | |
3154 | |
3155 TRACE_EVENT("multipage is in the latest position"); | |
3156 | |
3157 //terminate the position where the multipage began | |
3158 smscb_data.cb_attributes[smscb_data.start_used].next_link= 0xFF; | |
3159 | |
3160 | |
3161 //deleted messages -> now more space availabe -> update the free pointer | |
3162 result = sms_cb_update_free_pointer (temp); | |
3163 | |
3164 //terminate the free pointer list | |
3165 smscb_data.cb_attributes[smscb_data.used_pointer].next_link = 0xFF; | |
3166 | |
3167 | |
3168 //error: couldnt find the termination ?! | |
3169 if (result EQ 0xAA) | |
3170 { | |
3171 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3172 return 0; | |
3173 } | |
3174 | |
3175 smscb_data.result_used = temp_2; | |
3176 smscb_data.used_pointer = temp_2; | |
3177 | |
3178 | |
3179 } | |
3180 else | |
3181 { | |
3182 //is in the middle position in the fifo | |
3183 | |
3184 TRACE_EVENT("multipage is in the middle position"); | |
3185 | |
3186 //update the link list | |
3187 smscb_data.cb_attributes[smscb_data.start_used].next_link = smscb_data.used_pointer; | |
3188 | |
3189 //deleted messages -> now more space availabe -> update the free pointer | |
3190 result = sms_cb_update_free_pointer (temp); | |
3191 | |
3192 //terminate the free pointer list | |
3193 smscb_data.cb_attributes[smscb_data.end_used].next_link = 0xFF; | |
3194 | |
3195 | |
3196 | |
3197 | |
3198 | |
3199 | |
3200 //error: couldnt find the termination ?! | |
3201 if (result EQ 0xAA) | |
3202 { | |
3203 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3204 return 0; | |
3205 } | |
3206 | |
3207 | |
3208 smscb_data.result_used = temp_2; | |
3209 | |
3210 } | |
3211 | |
3212 | |
3213 } | |
3214 return 1; // ADDED BY RAVI - 28-11-2005 | |
3215 | |
3216 } | |
3217 | |
3218 /******************************************************************************* | |
3219 | |
3220 $Function: sms_cb_find_startpoint | |
3221 | |
3222 $Description: find the startpoint of the multipage. It is also used for singlepage. | |
3223 | |
3224 | |
3225 $Returns: | |
3226 | |
3227 $Arguments: | |
3228 | |
3229 *******************************************************************************/ | |
3230 UBYTE sms_cb_find_startpoint (USHORT mid, UBYTE start_used) | |
3231 { | |
3232 UBYTE i = 0; | |
3233 | |
3234 //only tracing | |
3235 #ifdef DEBUG_SMS_CB | |
3236 // char buf[100]; | |
3237 | |
3238 TRACE_EVENT("in sms_cb_find_startpoint "); | |
3239 #endif //DEBUG_SMS_CB | |
3240 | |
3241 | |
3242 //search for the first page of the multipages | |
3243 while (smscb_data.cb_attributes[smscb_data.used_pointer].mid NEQ mid) | |
3244 { | |
3245 | |
3246 start_used = smscb_data.used_pointer; | |
3247 | |
3248 // going through the link list | |
3249 smscb_data.used_pointer = smscb_data.cb_attributes[smscb_data.used_pointer].next_link; | |
3250 | |
3251 // only to be sure there is a ever ending loop | |
3252 i++; | |
3253 if (i > MAX_STORED_PAGES) | |
3254 return 0xAA; | |
3255 } | |
3256 | |
3257 //only tracing | |
3258 TRACE_EVENT_P1("start_used: %d", start_used); | |
3259 | |
3260 return start_used; | |
3261 } | |
3262 | |
3263 /******************************************************************************* | |
3264 | |
3265 $Function: sms_cb_find_startpoint | |
3266 | |
3267 $Description: find the lastpage of the multipage. | |
3268 It is also used for the singlepage but in this case the | |
3269 end_used will be equal to used_pointer | |
3270 | |
3271 $Returns: | |
3272 | |
3273 $Arguments: | |
3274 | |
3275 *******************************************************************************/ | |
3276 UBYTE sms_cb_find_endpoint (USHORT mid, UBYTE end_used) | |
3277 { | |
3278 UBYTE i = 0; | |
3279 | |
3280 | |
3281 | |
3282 //search for the last page of the multipages | |
3283 while (smscb_data.cb_attributes[smscb_data.used_pointer].mid EQ mid && | |
3284 smscb_data.cb_attributes[smscb_data.used_pointer].next_link NEQ 0xFF ) | |
3285 { | |
3286 | |
3287 end_used = smscb_data.used_pointer; | |
3288 | |
3289 // going through the link list | |
3290 smscb_data.used_pointer = smscb_data.cb_attributes[smscb_data.used_pointer].next_link; | |
3291 | |
3292 // only to be sure there is a ever ending loop | |
3293 i++; | |
3294 if (i > MAX_STORED_PAGES) | |
3295 return 0xAA; | |
3296 } | |
3297 | |
3298 | |
3299 TRACE_EVENT_P1("end_used: %d", end_used); | |
3300 | |
3301 return end_used; | |
3302 } | |
3303 | |
3304 /******************************************************************************* | |
3305 | |
3306 $Function: sms_cb_update_free_pointer | |
3307 | |
3308 $Description: This function is updating the free pointer after deleting | |
3309 cb messages in the fifo (space available !) | |
3310 | |
3311 | |
3312 $Returns: | |
3313 | |
3314 $Arguments: | |
3315 | |
3316 *******************************************************************************/ | |
3317 UBYTE sms_cb_update_free_pointer (UBYTE temp) | |
3318 { | |
3319 UBYTE update=0, i=0; | |
3320 | |
3321 | |
3322 TRACE_EVENT("sms_cb_update_free_pointer"); | |
3323 | |
3324 | |
3325 TRACE_EVENT_P1("temp index:%d", temp); | |
3326 if (smscb_data.free_pointer EQ 0xFF) | |
3327 {TRACE_EVENT("free pointer = 0xff"); | |
3328 //take the old used_pointer (before of deleting the messages) | |
3329 smscb_data.free_pointer = temp; | |
3330 /*MC SPR 1920, free the message slot*/ | |
3331 mfwFree( (U8*)smscb_data.messages[temp], sizeof(char)*CB_PAGE_LENGTH); | |
3332 smscb_data.messages[temp] = NULL; | |
3333 } | |
3334 else | |
3335 { | |
3336 /*MC SPR 2429 free the message slot here too*/ | |
3337 mfwFree( (U8*)smscb_data.messages[temp], sizeof(char)*CB_PAGE_LENGTH); | |
3338 smscb_data.messages[temp] = NULL; | |
3339 | |
3340 // | |
3341 update = smscb_data.free_pointer; | |
3342 TRACE_EVENT_P1("free pointer:%d",smscb_data.free_pointer) ; | |
3343 // | |
3344 while (smscb_data.cb_attributes[smscb_data.free_pointer].next_link NEQ 0xFF) | |
3345 { | |
3346 | |
3347 // going through the link list | |
3348 smscb_data.free_pointer = smscb_data.cb_attributes[smscb_data.free_pointer].next_link; | |
3349 TRACE_EVENT_P1("free pointer:%d",smscb_data.free_pointer) ; | |
3350 | |
3351 // only to be sure there is a ever ending loop | |
3352 i++; | |
3353 if (i > MAX_STORED_PAGES) | |
3354 return 0xAA; | |
3355 } | |
3356 | |
3357 | |
3358 //continue the free pointer link list to the new deleted multipage | |
3359 smscb_data.cb_attributes[smscb_data.free_pointer].next_link = temp; | |
3360 | |
3361 | |
3362 //show on the first deleted multipage | |
3363 smscb_data.free_pointer = update; | |
3364 | |
3365 | |
3366 } | |
3367 | |
3368 | |
3369 //indicate that we deleted cb messages | |
3370 smscb_data.clear_mid = TRUE; | |
3371 | |
3372 | |
3373 //need for later | |
3374 smscb_data.result_used = smscb_data.used_pointer; | |
3375 | |
3376 TRACE_EVENT_P1("used pointer: %d", smscb_data.used_pointer); | |
3377 //only for tracing | |
3378 | |
3379 | |
3380 return update; | |
3381 | |
3382 | |
3383 } | |
3384 | |
3385 | |
3386 /******************************************************************************* | |
3387 | |
3388 $Function: sms_cb_find_termination | |
3389 | |
3390 $Description: This function search for the termination in the link list. | |
3391 It jumps from one link to the another link until he founds | |
3392 the termination "0xFF" | |
3393 | |
3394 $Returns: | |
3395 | |
3396 $Arguments: | |
3397 | |
3398 *******************************************************************************/ | |
3399 UBYTE sms_cb_find_termination (UBYTE *used) | |
3400 { | |
3401 UBYTE i=0; | |
3402 | |
3403 while (smscb_data.cb_attributes[*used].next_link NEQ 0xFF) | |
3404 { | |
3405 // going through the link list | |
3406 *used = smscb_data.cb_attributes[*used].next_link; | |
3407 | |
3408 // only to be sure there is a ever ending loop | |
3409 i++; | |
3410 if (i > MAX_STORED_PAGES) | |
3411 return 0xAA; | |
3412 | |
3413 } | |
3414 | |
3415 return *used; | |
3416 } | |
3417 | |
3418 | |
3419 /******************************************************************************* | |
3420 | |
3421 $Function: sms_cb_count_messages | |
3422 | |
3423 $Description: This function counts messages in the fifo. | |
3424 ! Multipage are counted as one page ! | |
3425 | |
3426 $Returns: | |
3427 | |
3428 $Arguments: | |
3429 | |
3430 *******************************************************************************/ | |
3431 UBYTE sms_cb_count_messages ( void ) | |
3432 { | |
3433 UBYTE i=0, count=0, used, page, pages, mid, start_flag = 1; //, temp_used; | |
3434 | |
3435 | |
3436 for (i=0; i<MAX_STORED_PAGES ; i++) | |
3437 { | |
3438 smscb_data.cb_attributes[i].start_page = 0; | |
3439 } | |
3440 i=0; | |
3441 | |
3442 | |
3443 if (smscb_data.used_pointer EQ 0xFF) | |
3444 { | |
3445 //there are no cb messages in the fifo | |
3446 return count; | |
3447 } | |
3448 | |
3449 used = smscb_data.used_pointer; | |
3450 | |
3451 while ( i < MAX_STORED_PAGES) | |
3452 { | |
3453 | |
3454 //single or multipage ? | |
3455 if(smscb_data.cb_attributes[used].pages EQ 0x01) | |
3456 { | |
3457 //Singlepage | |
3458 | |
3459 start_flag = 1; | |
3460 /***************************Go-lite Optimization changes Start***********************/ | |
3461 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3462 TRACE_EVENT_P2("11 : used%d, count%d", used,count); | |
3463 | |
3464 /***************************Go-lite Optimization changes end***********************/ | |
3465 //indicate the first page, even for singlepage | |
3466 smscb_data.cb_attributes[used].start_page = 0x55; | |
3467 | |
3468 TRACE_EVENT_P1("1 set Flag at %d", used); | |
3469 | |
3470 //check, is it the last message in the link list | |
3471 //if yes, not necessary to go through the link list | |
3472 if (smscb_data.cb_attributes[used].next_link NEQ 0xFF) | |
3473 { | |
3474 count ++; | |
3475 | |
3476 // going through the link list | |
3477 used = smscb_data.cb_attributes[used].next_link; | |
3478 } | |
3479 | |
3480 //is it the last message in the fifo ? | |
3481 if (smscb_data.cb_attributes[used].next_link EQ 0xFF) | |
3482 { | |
3483 /***************************Go-lite Optimization changes Start***********************/ | |
3484 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3485 TRACE_EVENT_P2("1 : used%d,count%d", used,count); | |
3486 /***************************Go-lite Optimization changes end***********************/ | |
3487 | |
3488 //indicate the first page, even for singlepage | |
3489 smscb_data.cb_attributes[used].start_page = 0x55; | |
3490 | |
3491 | |
3492 TRACE_EVENT_P1("2 set Flag at %d", used); | |
3493 | |
3494 count ++; | |
3495 return count; | |
3496 } | |
3497 | |
3498 | |
3499 } | |
3500 else //single or multipage ? | |
3501 { | |
3502 | |
3503 //Multipage | |
3504 if (start_flag) | |
3505 { | |
3506 | |
3507 //indicate the first page, even for singlepage | |
3508 smscb_data.cb_attributes[used].start_page = 0x55; | |
3509 /***************************Go-lite Optimization changes Start***********************/ | |
3510 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3511 TRACE_EVENT_P1("3 set Flag at %d", used); | |
3512 /***************************Go-lite Optimization changes end***********************/ | |
3513 } | |
3514 | |
3515 | |
3516 page = smscb_data.cb_attributes[used].page; | |
3517 pages = smscb_data.cb_attributes[used].pages; | |
3518 mid = smscb_data.cb_attributes[used].mid; | |
3519 | |
3520 //check, is it the last message in the link list | |
3521 //if yes, not necessary to go through the link list | |
3522 if (smscb_data.cb_attributes[used].next_link NEQ 0xFF) | |
3523 { | |
3524 // going through the link list | |
3525 used = smscb_data.cb_attributes[used].next_link; | |
3526 } | |
3527 | |
3528 | |
3529 //is it the last message in the fifo ? | |
3530 if (smscb_data.cb_attributes[used].next_link EQ 0xFF) | |
3531 { | |
3532 | |
3533 //The last page, does it still continue or does it complete | |
3534 //the multipage ? | |
3535 if( smscb_data.cb_attributes[used].pages EQ pages && | |
3536 smscb_data.cb_attributes[used].page EQ (page+1) && | |
3537 smscb_data.cb_attributes[used].page EQ smscb_data.cb_attributes[used].pages) | |
3538 { | |
3539 //this one was the last page of the multipage and | |
3540 //the last one in the fifo | |
3541 /***************************Go-lite Optimization changes Start***********************/ | |
3542 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3543 TRACE_EVENT_P2("5 : used%d,count%d", used,count); | |
3544 /***************************Go-lite Optimization changes end***********************/ | |
3545 start_flag = 0; | |
3546 | |
3547 count ++; | |
3548 return count; | |
3549 } | |
3550 else | |
3551 { | |
3552 //the multipage is not complete yet | |
3553 | |
3554 if (smscb_data.cb_attributes[used].mid EQ mid) | |
3555 { | |
3556 | |
3557 start_flag = 0; | |
3558 /***************************Go-lite Optimization changes Start***********************/ | |
3559 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3560 TRACE_EVENT_P2("6 : used%d,count%d", used,count); | |
3561 /***************************Go-lite Optimization changes end***********************/ | |
3562 count ++; | |
3563 | |
3564 return count; | |
3565 } | |
3566 else | |
3567 { | |
3568 | |
3569 //this is a different page , it means the multipage before | |
3570 //is uncomplete ! | |
3571 | |
3572 start_flag = 0; | |
3573 | |
3574 | |
3575 //indicate the first page, even for singlepage | |
3576 smscb_data.cb_attributes[used].start_page = 0x55; | |
3577 /***************************Go-lite Optimization changes Start***********************/ | |
3578 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3579 TRACE_EVENT_P1("4 set Flag at %d", used); | |
3580 /***************************Go-lite Optimization changes end***********************/ | |
3581 | |
3582 //the page before is a uncomplete multipage | |
3583 //and the last message is a single page | |
3584 // ->count twice | |
3585 count+=2; | |
3586 /***************************Go-lite Optimization changes Start***********************/ | |
3587 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3588 TRACE_EVENT_P2("7 : used%d,count%d", used,count); | |
3589 /***************************Go-lite Optimization changes end***********************/ | |
3590 return count; | |
3591 | |
3592 } | |
3593 } | |
3594 | |
3595 } | |
3596 else | |
3597 { | |
3598 if( smscb_data.cb_attributes[used].pages EQ pages && | |
3599 smscb_data.cb_attributes[used].page EQ (page+1)) | |
3600 { | |
3601 //still continue | |
3602 /***************************Go-lite Optimization changes Start***********************/ | |
3603 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3604 | |
3605 TRACE_EVENT_P2("3 : used%d,count%d", used,count); | |
3606 /***************************Go-lite Optimization changes end***********************/ | |
3607 start_flag = 0; | |
3608 | |
3609 } | |
3610 else | |
3611 { | |
3612 //there is a new page starting | |
3613 | |
3614 | |
3615 start_flag = 1; | |
3616 | |
3617 count ++; | |
3618 /***************************Go-lite Optimization changes Start***********************/ | |
3619 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3620 | |
3621 TRACE_EVENT_P2("4 : used%d,count%d", used,count); | |
3622 /***************************Go-lite Optimization changes end***********************/ | |
3623 } | |
3624 } | |
3625 | |
3626 } | |
3627 | |
3628 | |
3629 // only to be sure there is a ever ending loop | |
3630 i++; | |
3631 } | |
3632 | |
3633 } | |
3634 | |
3635 /******************************************************************************* | |
3636 | |
3637 $Function: sms_cb_count_unread_messages | |
3638 | |
3639 $Description: This function counts the unread messages in the fifo | |
3640 | |
3641 $Returns: | |
3642 | |
3643 $Arguments: | |
3644 | |
3645 *******************************************************************************/ | |
3646 UBYTE sms_cb_count_unread_messages (void) | |
3647 { | |
3648 UBYTE i=0, m=0, used; | |
3649 | |
3650 used = smscb_data.used_pointer; | |
3651 | |
3652 while (smscb_data.cb_attributes[used].next_link NEQ 0xFF) | |
3653 { | |
3654 // count only the unread messages | |
3655 if (smscb_data.cb_attributes[used].status EQ UNREAD_MESSAGE) | |
3656 m ++; | |
3657 | |
3658 // going through the link list | |
3659 used = smscb_data.cb_attributes[used].next_link; | |
3660 | |
3661 // only to be sure there is a ever ending loop | |
3662 i++; | |
3663 if (i > MAX_STORED_PAGES) | |
3664 return 0xAA; | |
3665 | |
3666 } | |
3667 | |
3668 | |
3669 // have a check of the last one | |
3670 if (smscb_data.cb_attributes[used].status EQ UNREAD_MESSAGE) | |
3671 m ++; | |
3672 | |
3673 | |
3674 #ifdef DEBUG_SMS_CB | |
3675 /***************************Go-lite Optimization changes Start***********************/ | |
3676 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3677 TRACE_EVENT_P1("count unread %d ", m); | |
3678 /***************************Go-lite Optimization changes end***********************/ | |
3679 #endif | |
3680 | |
3681 return m; | |
3682 } | |
3683 | |
3684 | |
3685 /******************************************************************************* | |
3686 | |
3687 $Function: sms_cb_give_position_of_msg | |
3688 | |
3689 $Description: You give the position (order of the msg from oldest to the latest) | |
3690 and he gives you the real positon of the link list | |
3691 | |
3692 $Returns: | |
3693 | |
3694 $Arguments: used : current used_pointer | |
3695 | |
3696 *******************************************************************************/ | |
3697 UBYTE sms_cb_give_position_of_msg (UBYTE used, UBYTE positon) | |
3698 { | |
3699 UBYTE i=0, m=0; | |
3700 | |
3701 while ( (smscb_data.cb_attributes[used].next_link NEQ 0xFF) && | |
3702 (i NEQ positon) ) | |
3703 { | |
3704 | |
3705 // going through the link list | |
3706 used= smscb_data.cb_attributes[used].next_link; | |
3707 | |
3708 // only to be sure there is a ever ending loop | |
3709 if (smscb_data.cb_attributes[used].start_page EQ 0x55) | |
3710 { | |
3711 i++; | |
3712 } | |
3713 | |
3714 | |
3715 | |
3716 if (m > MAX_STORED_PAGES) | |
3717 return 0xAA; | |
3718 | |
3719 m++; | |
3720 | |
3721 } | |
3722 | |
3723 //return the positon in the link list | |
3724 return used; | |
3725 } | |
3726 | |
3727 /******************************************************************************* | |
3728 | |
3729 $Function: sms_cb_select_read | |
3730 | |
3731 $Description: called by pressing the read item in SMS-Broadcast | |
3732 | |
3733 $Returns: | |
3734 | |
3735 $Arguments: | |
3736 | |
3737 | |
3738 *******************************************************************************/ | |
3739 int sms_cb_select_read (MfwMnu* m, MfwMnuItem* i) | |
3740 { | |
3741 | |
3742 sms_cb_read_msg (ALL_MESSAGE); | |
3743 return 1; | |
3744 } | |
3745 | |
3746 /******************************************************************************* | |
3747 | |
3748 $Function: sms_cb_read_msg | |
3749 | |
3750 $Description: This function prepare to read the cb messages | |
3751 It could be call from everywhere. | |
3752 | |
3753 $Returns: | |
3754 | |
3755 $Arguments: | |
3756 | |
3757 | |
3758 *******************************************************************************/ | |
3759 int sms_cb_read_msg (T_SMSCB_STATUS status) | |
3760 { | |
3761 UBYTE result; //, i; // RAVI | |
3762 | |
3763 | |
3764 T_MFW_HND win = mfwParent(mfw_header()); | |
3765 | |
3766 TRACE_FUNCTION("sms_cb_read_msg"); | |
3767 | |
3768 | |
3769 | |
3770 //count the number of the stored messages in the fifo | |
3771 | |
3772 result = sms_cb_count_messages (); | |
3773 | |
3774 if (result EQ 0x00) | |
3775 { | |
3776 TRACE_EVENT("sms cb ERROR, there are 0 cb messages"); | |
3777 } | |
3778 | |
3779 | |
3780 if((smscb_data.used_pointer EQ 0xFF) || (result EQ 0x00)) | |
3781 { | |
3782 TRACE_EVENT("There is no cb message stored"); | |
3783 | |
3784 info_screen(0, TxtEmptyList ,TxtNull, NULL); | |
3785 } | |
3786 else | |
3787 { | |
3788 /***************************Go-lite Optimization changes Start***********************/ | |
3789 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
3790 TRACE_EVENT_P1("Total msg%d ", result); | |
3791 /***************************Go-lite Optimization changes end***********************/ | |
3792 if (result EQ 0xAA) | |
3793 { | |
3794 TRACE_EVENT("sms cb ERROR, couldnt find the termination"); | |
3795 return 0; // RAVI | |
3796 } | |
3797 | |
3798 | |
3799 //keep this value for the callback function from menu-list | |
3800 smscb_data.total_number = result; | |
3801 | |
3802 //set the reason of reading | |
3803 //read "all_message" , "unread_message", .......... | |
3804 smscb_data.current_status = status; | |
3805 | |
3806 //fill up the menu list attributes | |
3807 smscb_data.cb_list_attributes = sms_cb_create_list (smscb_data.total_number); | |
3808 | |
3809 | |
3810 //show the menu list on the screen now | |
3811 listDisplayListMenu (win, smscb_data.cb_list_attributes ,(ListCbFunc)sms_cb_list_cb,0); | |
3812 | |
3813 } | |
3814 | |
3815 return 1; | |
3816 } | |
3817 | |
3818 | |
3819 /******************************************************************************* | |
3820 | |
3821 $Function: sms_cb_create_list | |
3822 | |
3823 $Description: Prepare the items for the menu list | |
3824 | |
3825 $Returns: | |
3826 | |
3827 $Arguments: | |
3828 | |
3829 *******************************************************************************/ | |
3830 static ListMenuData * sms_cb_create_list (UBYTE number) | |
3831 { | |
3832 UBYTE i = 0, used, next_used, number_multipg =1; // RAVI - Removed - page, pages, variable. , control_bit=0; | |
3833 | |
3834 | |
3835 ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof(ListMenuData)); | |
3836 | |
3837 if (list_menu_data EQ 0) | |
3838 { | |
3839 TRACE_EVENT ("failed to create the list for cb"); | |
3840 return NULL; | |
3841 } | |
3842 | |
3843 | |
3844 list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (number * sizeof (T_MFW_MNU_ITEM)); | |
3845 | |
3846 | |
3847 if (list_menu_data->List EQ 0) | |
3848 { | |
3849 TRACE_EVENT ("failed to create the list for cb"); | |
3850 return NULL; | |
3851 } | |
3852 | |
3853 TRACE_EVENT ("sms_cb_create_list ()"); | |
3854 | |
3855 | |
3856 //take the current position in the fifo | |
3857 used = smscb_data.used_pointer; | |
3858 | |
3859 | |
3860 /* | |
3861 * Fill Menu List | |
3862 */ | |
3863 | |
3864 | |
3865 //until to reach the end of the fifo | |
3866 while ( smscb_data.cb_attributes[used].next_link NEQ 0xFF ) | |
3867 { | |
3868 | |
3869 if (smscb_data.cb_attributes[used].start_page EQ 0x55) | |
3870 { | |
3871 mnuInitDataItem(&list_menu_data->List[i]); | |
3872 | |
3873 next_used = used; | |
3874 | |
3875 // going through the link list | |
3876 next_used = smscb_data.cb_attributes[next_used].next_link; | |
3877 | |
3878 | |
3879 | |
3880 //before we put the item for a multipage, we have to | |
3881 //know how long it is. | |
3882 //This is counting the number of pages belongs to a multipage | |
3883 //Every multipage &singlepage starts with the indication 0x55 | |
3884 while(smscb_data.cb_attributes[next_used].start_page NEQ 0x55) | |
3885 { | |
3886 //sprintf(buf, "number_multipg %d in while", number_multipg); | |
3887 //TRACE_EVENT(buf); | |
3888 | |
3889 number_multipg++; | |
3890 | |
3891 //go out when we reach the end of the link list | |
3892 if (smscb_data.cb_attributes[next_used].next_link EQ 0xFF) | |
3893 break; | |
3894 | |
3895 // going through the link list & take the next cb message | |
3896 next_used = smscb_data.cb_attributes[next_used].next_link; | |
3897 } | |
3898 | |
3899 | |
3900 | |
3901 //fill up the header | |
3902 //"MID" + "available Page" + "Total page" | |
3903 //the user release the uncomplete page about the available page. | |
3904 /*SPR1920, allocate memory for header string*/ | |
3905 if (smscb_data.cb_attributes[used].header == NULL) | |
3906 smscb_data.cb_attributes[used].header = (char*)ALLOC_MEMORY(sizeof(char)*25); | |
3907 sprintf(smscb_data.cb_attributes[used].header,"MID%d,%d/%d", smscb_data.cb_attributes[used].mid, | |
3908 number_multipg, smscb_data.cb_attributes[used].pages); | |
3909 | |
3910 list_menu_data->List[i].str =(char *) smscb_data.cb_attributes[used].header; | |
3911 | |
3912 //set item to visible | |
3913 if (smscb_data.current_status EQ ALL_MESSAGE) | |
3914 { | |
3915 //show all the cb messages | |
3916 list_menu_data->List[i].flagFunc = item_flag_none; | |
3917 } | |
3918 else if (smscb_data.current_status EQ UNREAD_MESSAGE) | |
3919 { | |
3920 if (smscb_data.cb_attributes[used].status EQ smscb_data.current_status) | |
3921 list_menu_data->List[i].flagFunc = item_flag_none; | |
3922 else | |
3923 list_menu_data->List[i].flagFunc = item_flag_hide; | |
3924 } | |
3925 | |
3926 i++; | |
3927 number_multipg = 1; | |
3928 | |
3929 | |
3930 } | |
3931 | |
3932 // going through the link list & take the next cb message | |
3933 used = smscb_data.cb_attributes[used].next_link; | |
3934 | |
3935 // only to be sure there is a ever ending loop | |
3936 if (i > MAX_STORED_PAGES) | |
3937 return NULL; | |
3938 } | |
3939 | |
3940 | |
3941 number_multipg = 1; | |
3942 | |
3943 //fill up the last message of the fifo !! | |
3944 if (smscb_data.cb_attributes[used].start_page EQ 0x55) | |
3945 { | |
3946 mnuInitDataItem(&list_menu_data->List[i]); | |
3947 | |
3948 //fill up the header | |
3949 //"MID" + "available Page" + "Total page" | |
3950 //the user release the uncomplete page about the available page. | |
3951 /*SPR1920, allocate memory for header string*/ | |
3952 if (smscb_data.cb_attributes[used].header == NULL) | |
3953 smscb_data.cb_attributes[used].header = (char*)ALLOC_MEMORY(sizeof(char)*25); | |
3954 sprintf(smscb_data.cb_attributes[used].header,"MID%d,%d/%d", smscb_data.cb_attributes[used].mid, | |
3955 number_multipg, smscb_data.cb_attributes[used].pages); | |
3956 | |
3957 | |
3958 list_menu_data->List[i].str =(char *) smscb_data.cb_attributes[used].header; | |
3959 | |
3960 //set item to visible | |
3961 if (smscb_data.current_status EQ ALL_MESSAGE) | |
3962 { | |
3963 //show all the cb messages | |
3964 list_menu_data->List[i].flagFunc = item_flag_none; | |
3965 } | |
3966 else if (smscb_data.current_status EQ UNREAD_MESSAGE) | |
3967 { | |
3968 if (smscb_data.cb_attributes[used].status EQ smscb_data.current_status) | |
3969 list_menu_data->List[i].flagFunc = item_flag_none; | |
3970 else | |
3971 list_menu_data->List[i].flagFunc = item_flag_hide; | |
3972 } | |
3973 } | |
3974 | |
3975 | |
3976 | |
3977 | |
3978 | |
3979 /* | |
3980 * Fill common parameter for list handling | |
3981 */ | |
3982 | |
3983 | |
3984 list_menu_data->ListLength = number; | |
3985 list_menu_data->ListPosition = 1; | |
3986 list_menu_data->CursorPosition = 1; | |
3987 list_menu_data->SnapshotSize = number; | |
3988 list_menu_data->Font = 0; | |
3989 list_menu_data->LeftSoftKey = TxtSoftSelect; | |
3990 list_menu_data->RightSoftKey = TxtSoftBack; | |
3991 /* SPR#1428 - SH - Add select key to list */ | |
3992 list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN | KEY_MNUSELECT; | |
3993 list_menu_data->Reason = 0; | |
3994 list_menu_data->Strings = TRUE; | |
3995 list_menu_data->Attr = (MfwMnuAttr*)&sms_cb_menuAttrib; | |
3996 list_menu_data->autoDestroy = TRUE; | |
3997 | |
3998 return list_menu_data; | |
3999 } | |
4000 | |
4001 /******************************************************************************* | |
4002 | |
4003 $Function: sms_cb_list_cb | |
4004 | |
4005 $Description: callback function of the menu list | |
4006 | |
4007 $Returns: | |
4008 | |
4009 $Arguments: | |
4010 | |
4011 *******************************************************************************/ | |
4012 | |
4013 static void sms_cb_list_cb(T_MFW_HND win, ListMenuData * ListData) | |
4014 { | |
4015 UBYTE number, selected_postion; | |
4016 int i;/*SPR 1920*/ | |
4017 | |
4018 | |
4019 TRACE_FUNCTION ("sms_cb_list_cb()"); | |
4020 | |
4021 switch (ListData->Reason) | |
4022 { | |
4023 case LISTS_REASON_SELECT: /* */ | |
4024 | |
4025 | |
4026 // | |
4027 selected_postion = sms_cb_give_position_of_msg (smscb_data.used_pointer, ListData->ListPosition); | |
4028 | |
4029 | |
4030 //display the selected message on the scree | |
4031 sms_cb_show_cb_message (selected_postion); | |
4032 | |
4033 | |
4034 //destroy the list menu | |
4035 listsDestroy(ListData->win); | |
4036 | |
4037 //counted the total number of cb msg before created the menu list | |
4038 number = smscb_data.total_number; | |
4039 | |
4040 | |
4041 FREE_MEMORY ((UBYTE *)smscb_data.cb_list_attributes->List, number * sizeof (T_MFW_MNU_ITEM)); | |
4042 FREE_MEMORY ((UBYTE *)smscb_data.cb_list_attributes, sizeof (ListMenuData)); | |
4043 /* SPR 1920 if any memory alloacted for list headers, deallocate it*/ | |
4044 for(i=0; i<MAX_MIDS;i++) | |
4045 { if (smscb_data.cb_attributes[i].header != NULL) | |
4046 { FREE_MEMORY((void*)smscb_data.cb_attributes[i].header,sizeof(char)*25); | |
4047 smscb_data.cb_attributes[i].header = NULL; | |
4048 } | |
4049 } | |
4050 break; | |
4051 | |
4052 case LISTS_REASON_BACK: /* back to previous menu */ | |
4053 | |
4054 TRACE_EVENT("pressed Back-key"); | |
4055 | |
4056 //destroy the list menu | |
4057 listsDestroy(ListData->win); | |
4058 | |
4059 //counted the total number of cb msg before created the menu list | |
4060 number = smscb_data.total_number; | |
4061 | |
4062 FREE_MEMORY ((UBYTE *)smscb_data.cb_list_attributes->List, number * sizeof (T_MFW_MNU_ITEM)); | |
4063 FREE_MEMORY ((UBYTE *)smscb_data.cb_list_attributes, sizeof (ListMenuData)); | |
4064 /* SPR 1920 if any memory alloacted for list headers, deallocate it*/ | |
4065 for(i=0; i<MAX_MIDS;i++) | |
4066 { if (smscb_data.cb_attributes[i].header != NULL) | |
4067 { FREE_MEMORY((void*)smscb_data.cb_attributes[i].header,sizeof(char)*25); | |
4068 smscb_data.cb_attributes[i].header = NULL; | |
4069 } | |
4070 } | |
4071 break; | |
4072 default: | |
4073 return; | |
4074 } | |
4075 | |
4076 | |
4077 | |
4078 } | |
4079 | |
4080 | |
4081 /******************************************************************************* | |
4082 | |
4083 $Function: sms_cb_list_cb | |
4084 | |
4085 $Description: open a editor to show the cb message | |
4086 | |
4087 $Returns: | |
4088 | |
4089 $Arguments: | |
4090 | |
4091 *******************************************************************************/ | |
4092 void sms_cb_show_cb_message(UBYTE link_list_position) | |
4093 { | |
4094 | |
4095 T_MFW_HND win = mfwParent(mfw_header()); | |
4096 | |
4097 #ifdef NEW_EDITOR | |
4098 T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ | |
4099 #else | |
4100 T_EDITOR_DATA editor_data; | |
4101 #endif | |
4102 | |
4103 UBYTE number_multipg =1, temp, next_used; | |
4104 | |
4105 //char buf[60]; | |
4106 | |
4107 next_used = link_list_position; | |
4108 | |
4109 //check : is it the end of the link list | |
4110 //if yes, not necassary to go through the link list | |
4111 if (smscb_data.cb_attributes[next_used].next_link NEQ 0xFF) | |
4112 { | |
4113 // going through the link list | |
4114 next_used = smscb_data.cb_attributes[next_used].next_link; | |
4115 } | |
4116 | |
4117 //if the multipage contain more than one page, find out | |
4118 //how many pages ! | |
4119 //This is counting the number of pages belongs to a multipage | |
4120 //Every multipage & singlepge starts with the indication 0x55 | |
4121 while(smscb_data.cb_attributes[next_used].start_page NEQ 0x55) | |
4122 { | |
4123 //sprintf(buf, "number_multipg %d", number_multipg); | |
4124 //TRACE_EVENT(buf); | |
4125 | |
4126 number_multipg++; | |
4127 | |
4128 if (smscb_data.cb_attributes[next_used].next_link EQ 0xFF) | |
4129 break; | |
4130 | |
4131 // going through the link list & take the next cb message | |
4132 next_used = smscb_data.cb_attributes[next_used].next_link; | |
4133 } | |
4134 | |
4135 //sprintf(buf, "number_multipg %d after..", number_multipg); | |
4136 //TRACE_EVENT(buf); | |
4137 | |
4138 //keep the value for later | |
4139 smscb_data.multipage_number = number_multipg; | |
4140 | |
4141 sms_cb_loadEditDefault(&editor_data); | |
4142 | |
4143 //buffer for the multipage | |
4144 smscb_data.multipage = (UBYTE *) ALLOC_MEMORY (OFFSET(smscb_data.multipage_number) * sizeof (UBYTE)); | |
4145 | |
4146 next_used = link_list_position; | |
4147 | |
4148 //fill up the new buffer with the first page | |
4149 /*MC SPR 1920, refer to new message array*/ | |
4150 strcat((char *)smscb_data.multipage, smscb_data.messages[next_used]); | |
4151 /*MC end*/ | |
4152 //check : is it the end of the link list | |
4153 //if yes, not necassary to go through the link list | |
4154 if (smscb_data.cb_attributes[next_used].next_link NEQ 0xFF) | |
4155 { | |
4156 // going through the link list | |
4157 next_used = smscb_data.cb_attributes[next_used].next_link; | |
4158 } | |
4159 | |
4160 temp = smscb_data.multipage_number; | |
4161 | |
4162 //if the multipage contain more than one page, fill up the data | |
4163 //to the new buffer | |
4164 while(temp > 1) | |
4165 { | |
4166 | |
4167 /*MC SPR 1920, refer to new message array*/ | |
4168 strcat((char *)smscb_data.multipage, smscb_data.messages[next_used]); | |
4169 /*MC end*/ | |
4170 | |
4171 // going through the link list & take the next cb message | |
4172 next_used = smscb_data.cb_attributes[next_used].next_link; | |
4173 | |
4174 temp --; | |
4175 } | |
4176 | |
4177 //set the mark | |
4178 smscb_data.cb_attributes[link_list_position].status = READ_MESSAGE; | |
4179 | |
4180 /* SPR#1428 - SH - New Editor changes */ | |
4181 #ifdef NEW_EDITOR | |
4182 AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, smscb_data.multipage, OFFSET(smscb_data.multipage_number)); | |
4183 AUI_edit_SetEvents(&editor_data, link_list_position, TRUE, FOREVER, (T_AUI_EDIT_CB)sms_cb_editor_cb); | |
4184 AUI_edit_SetTextStr(&editor_data, TxtDelete, TxtSoftBack, 0, NULL); | |
4185 AUI_edit_SetAltTextStr(&editor_data, 0, TxtSoftOptions, FALSE, TxtNull); | |
4186 AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE); | |
4187 AUI_edit_Start(win, &editor_data); | |
4188 #else /* NEW_EDITOR */ | |
4189 editor_data.editor_attr.text =(char *) smscb_data.multipage; | |
4190 | |
4191 editor_data.Identifier = link_list_position ; //keep the value (selected cb message) | |
4192 editor_data.editor_attr.size = OFFSET(smscb_data.multipage_number); | |
4193 editor_data.min_enter = 0; | |
4194 editor_data.LeftSoftKey = TxtDelete; | |
4195 editor_data.AlternateLeftSoftKey = TxtSoftOptions; | |
4196 editor_data.RightSoftKey = TxtSoftBack; | |
4197 editor_data.Callback = (T_EDIT_CB)sms_cb_editor_cb; | |
4198 editor_data.mode = READ_ONLY_MODE; | |
4199 | |
4200 editor_start(win, &editor_data); /* start the editor */ | |
4201 #endif /* NEW_EDITOR */ | |
4202 } | |
4203 | |
4204 /******************************************************************************* | |
4205 | |
4206 $Function: sms_cb_loadEditDefault | |
4207 | |
4208 $Description: Configure T_EDITOR_DATA structure with default editor settings. | |
4209 | |
4210 $Returns: none | |
4211 | |
4212 $Arguments: editor_data - editor data. | |
4213 | |
4214 *******************************************************************************/ | |
4215 /* SPR#1428 - SH - New Editor changes */ | |
4216 #ifdef NEW_EDITOR | |
4217 void sms_cb_loadEditDefault (T_AUI_EDITOR_DATA *editor_data) | |
4218 { | |
4219 TRACE_FUNCTION ("sms_cb_loadEditDefault()"); | |
4220 | |
4221 AUI_edit_SetDefault(editor_data); | |
4222 AUI_edit_SetMode(editor_data, ED_MODE_ALPHA, ED_CURSOR_NONE); | |
4223 AUI_edit_SetTextStr(editor_data, TxtSoftSelect, TxtSoftBack, 0, NULL); | |
4224 AUI_edit_SetDisplay(editor_data, 0, COLOUR_EDITOR, EDITOR_FONT); | |
4225 | |
4226 return; | |
4227 } | |
4228 #else /* NEW_EDITOR */ | |
4229 | |
4230 void sms_cb_loadEditDefault (T_EDITOR_DATA *editor_data) | |
4231 { | |
4232 TRACE_FUNCTION ("sms_cb_loadEditDefault()"); | |
4233 | |
4234 editor_attr_init(&editor_data->editor_attr, NULL, edtCurNone, 0, 0, 0, COLOUR_EDITOR); | |
4235 editor_data_init(editor_data, NULL, TxtSoftSelect, TxtSoftBack, 0, 1, ALPHA_MODE, FOREVER); | |
4236 editor_data->hide = FALSE; | |
4237 editor_data->AlternateLeftSoftKey = TxtNull; | |
4238 editor_data->Identifier = 0; | |
4239 editor_data->TextString = NULL; | |
4240 editor_data->destroyEditor = TRUE ; | |
4241 } | |
4242 #endif /* NEW_EDITOR */ | |
4243 | |
4244 | |
4245 /******************************************************************************* | |
4246 | |
4247 $Function: sms_cb_editor_cb | |
4248 | |
4249 $Description: callback function of the editor | |
4250 | |
4251 $Returns: none | |
4252 | |
4253 $Arguments: | |
4254 | |
4255 *******************************************************************************/ | |
4256 static void sms_cb_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) | |
4257 { | |
4258 UBYTE test, i; // RAVI - result, | |
4259 | |
4260 //only for tracing | |
4261 #ifdef DEBUG_SMS_CB | |
4262 UBYTE w; | |
4263 #endif | |
4264 | |
4265 TRACE_FUNCTION ("sms_cb_editor_cb()"); | |
4266 | |
4267 FREE_MEMORY ((UBYTE *)smscb_data.multipage, OFFSET(smscb_data.multipage_number) * sizeof (UBYTE)); | |
4268 | |
4269 switch (reason) | |
4270 { | |
4271 case INFO_KCD_LEFT: | |
4272 | |
4273 | |
4274 //user selected to delete the message | |
4275 sms_cb_delete_message (smscb_data.cb_attributes[Identifier].mid); | |
4276 | |
4277 //update the use_pointer after deleting | |
4278 smscb_data.used_pointer = smscb_data.result_used; | |
4279 | |
4280 if (smscb_data.used_pointer EQ smscb_data.free_pointer) | |
4281 { | |
4282 //no anymore messages stored | |
4283 smscb_data.used_pointer = 0xFF; | |
4284 } | |
4285 | |
4286 | |
4287 if (smscb_data.current_status EQ ALL_MESSAGE) | |
4288 { | |
4289 //go back to the cb list | |
4290 sms_cb_read_msg (smscb_data.current_status); | |
4291 } | |
4292 else if (smscb_data.current_status EQ UNREAD_MESSAGE) | |
4293 { | |
4294 // if (sms_cb_count_unread_messages ()) | |
4295 // sms_cb_read_msg (smscb_data.current_status); | |
4296 | |
4297 } | |
4298 | |
4299 | |
4300 | |
4301 break; | |
4302 | |
4303 case INFO_KCD_RIGHT: | |
4304 case INFO_KCD_HUP: | |
4305 | |
4306 | |
4307 //only for tracing | |
4308 #ifdef DEBUG_SMS_CB | |
4309 /***************************Go-lite Optimization changes Start***********************/ | |
4310 // Aug 16, 2004 REF: CRR 24323 Deepa M.D | |
4311 TRACE_EVENT_P1( ".. used_pointer %d ", smscb_data.used_pointer); | |
4312 TRACE_EVENT_P1("..free_pointer %d ", smscb_data.free_pointer); | |
4313 for (i=0; i<MAX_STORED_PAGES ; i++) | |
4314 { | |
4315 TRACE_EVENT_P2("link_index: %d, i:%d", smscb_data.cb_attributes[i].next_link,i); | |
4316 } | |
4317 test = smscb_data.used_pointer; | |
4318 while (smscb_data.cb_attributes[test].next_link NEQ 0xFF) | |
4319 { | |
4320 //sprintf(buf, "Buffer on %s", &smscb_data.cb_buffer[OFFSET(test)]); | |
4321 /*MC*/ | |
4322 TRACE_EVENT_P1("Buffer on %s", smscb_data.messages[test]); | |
4323 test = smscb_data.cb_attributes[test].next_link; | |
4324 } | |
4325 //sprintf(buf, "Buffer on %s,i:%d ", &smscb_data.cb_buffer[OFFSET(test)], i); | |
4326 /*MC*/ | |
4327 TRACE_EVENT_P2("Buffer on %s,i:%d ", smscb_data.messages[test], i); | |
4328 /***************************Go-lite Optimization changes end***********************/ | |
4329 #endif //DEBUG_SMS_CB | |
4330 | |
4331 | |
4332 | |
4333 if (smscb_data.current_status EQ ALL_MESSAGE) | |
4334 { | |
4335 //go back to the cb list | |
4336 sms_cb_read_msg (smscb_data.current_status); | |
4337 } | |
4338 else if (smscb_data.current_status EQ UNREAD_MESSAGE) | |
4339 { | |
4340 | |
4341 } | |
4342 break; | |
4343 | |
4344 default: | |
4345 TRACE_EVENT("Err: Default"); | |
4346 break; | |
4347 } | |
4348 } | |
4349 | |
4350 | |
4351 |