FreeCalypso > hg > leo2moko-debug
comparison g23m/condat/ms/src/bmi/MmiAoc.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 CONDAT (UK) | |
4 | |
5 ******************************************************************************** | |
6 | |
7 This software product is the property of Condat (UK) Ltd and may not be | |
8 disclosed to any third party without the express permission of the owner. | |
9 | |
10 ******************************************************************************** | |
11 | |
12 $Project name: Basic MMI | |
13 $Project code: BMI (6349) | |
14 $Module: Advice of Charge | |
15 $File: MmiVoiceMemo.c | |
16 $Revision: 1.0 | |
17 | |
18 $Author: Condat(UK) | |
19 $Date: 09/04/01 | |
20 | |
21 ******************************************************************************** | |
22 | |
23 Description: | |
24 | |
25 This provides the start code for the MMI | |
26 | |
27 ******************************************************************************** | |
28 $History: MmiAoc.c | |
29 | |
30 June 16, 2005 REF: CRR 31267 x0021334 | |
31 Description: Handset ignore the initializtion of the PIN1/PIN2 | |
32 Fix: Cheking is done to ascertain if PIN1/PIN2 are initialised. If not, appropriate | |
33 message is displayed to the user. | |
34 | |
35 09/04/01 Original Condat(UK) BMI version. | |
36 May 25, 2004 REF: CRR MMI-SPR-17588 NISHIKANT KULKARNI | |
37 Issue description: On the SIM EF(ACMMax) is defined as 0xFFFFFF, so it should be possible to | |
38 enter 16777215, but only 999999 is accepted. | |
39 Solution: MAX_ENTER_LIMIT changed from 7 to 9. A check is done to verify that the entered | |
40 ACMmax value is less that 0xFFFFFF. Otherwise "Not Allowed" message is displayed. | |
41 | |
42 $End | |
43 | |
44 *******************************************************************************/ | |
45 | |
46 | |
47 | |
48 | |
49 /******************************************************************************* | |
50 | |
51 Include files | |
52 | |
53 *******************************************************************************/ | |
54 | |
55 #define ENTITY_MFW | |
56 | |
57 /* includes */ | |
58 #include <string.h> | |
59 #include <stdio.h> | |
60 #include <stdlib.h> | |
61 | |
62 #if defined (NEW_FRAME) | |
63 | |
64 #include "typedefs.h" | |
65 #include "vsi.h" | |
66 #include "pei.h" | |
67 #include "custom.h" | |
68 #include "gsm.h" | |
69 | |
70 #else | |
71 | |
72 #include "STDDEFS.H" | |
73 #include "custom.h" | |
74 #include "gsm.h" | |
75 #include "vsi.h" | |
76 | |
77 #endif | |
78 #include "mfw_sys.h" | |
79 | |
80 #include "cus_aci.h" | |
81 | |
82 #include "mfw_mfw.h" | |
83 #include "mfw_win.h" | |
84 #include "mfw_kbd.h" | |
85 /* SPR#1428 - SH - New Editor changes */ | |
86 #ifndef NEW_EDITOR | |
87 #include "mfw_edt.h" | |
88 #endif | |
89 #include "mfw_lng.h" | |
90 #include "mfw_tim.h" | |
91 #include "mfw_icn.h" | |
92 #include "mfw_mnu.h" | |
93 #include "mfw_phb.h" | |
94 #include "mfw_cm.h" | |
95 #include "mfw_sim.h" | |
96 #include "mfw_nm.h" | |
97 #include "mfw_sat.h" | |
98 #include "mfw_ss.h" /*for convert*/ | |
99 #include "mfw_phb.h" | |
100 #include "ksd.h" | |
101 #include "psa.h" | |
102 #include "mfw_sms.h" | |
103 #include "mfw_cphs.h" | |
104 #include "mfw_sat.h" | |
105 | |
106 #include "dspl.h" | |
107 | |
108 | |
109 #include "MmiMmi.h" | |
110 #include "MmiDummy.h" | |
111 #include "MmiDialogs.h" | |
112 /* SPR#1428 - SH - New Editor changes */ | |
113 #ifdef NEW_EDITOR | |
114 #include "ATBCommon.h" | |
115 #include "ATBDisplay.h" | |
116 #include "ATBEditor.h" | |
117 #include "AUIEditor.h" | |
118 #else /* NEW_EDITOR */ | |
119 #include "MmiEditor.h" | |
120 #endif /* NEW_EDITOR */ | |
121 #include "MmiLists.h" | |
122 #include "MmiIdle.h" | |
123 #include "MmiSoftKeys.h" | |
124 #include "Mmiicons.h" | |
125 #include "MmiMenu.h" | |
126 #include "MmiMain.h" | |
127 #include "MmiStart.h" | |
128 #include "MmiPins.h" | |
129 | |
130 #include "mmiColours.h" | |
131 | |
132 // June 16, 2005 REF: CRR 31267 x0021334 | |
133 // Added this BOOL variable to keep track of PIN2 requests. | |
134 BOOL pin2Flag = FALSE; | |
135 | |
136 | |
137 /******************************************************************************* | |
138 Local Data | |
139 | |
140 *******************************************************************************/ | |
141 #define PIN_REQUEST_FOR_RATE 700 | |
142 #define SERVICES_ENTER_CURRENCY 701 | |
143 #define SERVICES_ONE_UNIT 702 | |
144 #define SERVICES_RATE_CHANGED 703 | |
145 #define SERVICES_CREDIT_REMAINING 704 | |
146 #define PIN_REQUEST_FOR_LIMIT_CHANGE 705 | |
147 #define PIN_REQUEST_FOR_LIMIT_CANCEL 706 | |
148 #define SERVICES_LIMIT_VIEW 707 | |
149 #define SERVICES_LIMIT_CHANGE 708 | |
150 #define SERVICES_LIMIT_CANCEL 709 | |
151 #define SERVICES_LIMIT_CHANGED 710 | |
152 #define SERVICES_LAST_CHARGE 711 | |
153 #define SERVICES_TOTAL_CHARGE 712 | |
154 #define SERVICES_RESET_CHARGE 713 | |
155 #define SERVICES_CHARGE_CHANGED 714 | |
156 #define SERVICES_OUT_OF_RANGE 715 | |
157 #define SERVICES_AOC_NOT_SUPPORTED 716 | |
158 #define PIN_REQUEST_FOR_RESET_CHARGE 717 | |
159 | |
160 /* May 25, 2004 REF: CRR MMI-SPR-17588 NISHIKANT KULKARNI | |
161 MAX_ENTER_LIMIT changed from 7 to 9 to accept "Limit" values till 16777215 (0xFFFFFF) | |
162 Previously, with MAX_ENTER_LIMIT set to 7, maximum 999999 could be entered as limit. | |
163 Effectively, the limit is MAX_ENTER_LIMIT - 1. The last character used for string termination. | |
164 Also, the maximum value that can be entered (0xFFFFFF) is # defined to MAX_ENTER_VALUE | |
165 */ | |
166 /* Max. Enter of Character */ | |
167 #define MAX_ENTER_LIMIT 9 // xnkulkar SPR-17588 | |
168 #define MAX_ENTER_CURRENCY 4 | |
169 #define MAX_ENTER_UNIT 6 | |
170 #define MAX_ENTER_VALUE 0xFFFFFF // xnkulkar SPR-17588 | |
171 /* */ | |
172 | |
173 | |
174 | |
175 typedef struct | |
176 { | |
177 T_MMI_CONTROL mmi_control; | |
178 T_MFW_HND service_win; /* MFW win handler */ | |
179 T_MFW_CM_AOC_INFO aocInfo; | |
180 USHORT Identifier; | |
181 char edt_Buf[30]; /* Editor buffer */ | |
182 } T_SERVICES; | |
183 | |
184 | |
185 | |
186 | |
187 LONG acm_last_call = 0; //accumulated call meter from the last call | |
188 //later the value should save and read again from PCM | |
189 | |
190 | |
191 /******************************************************************************* | |
192 Local prototypes | |
193 | |
194 *******************************************************************************/ | |
195 T_MFW_HND service_Init (T_MFW_HND parent_window); | |
196 void service_Exit (T_MFW_HND own_window); | |
197 T_MFW_HND service_create (T_MFW_HND parent_window); | |
198 void service_destroy (T_MFW_HND own_window); | |
199 static int service_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); | |
200 void service_dialog_cb (T_MFW_HND win, USHORT identifier, UBYTE reason); | |
201 void service (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
202 /* SPR#1428 - SH - New Editor changes */ | |
203 #ifdef NEW_EDITOR | |
204 void service_loadEditDefault (T_AUI_EDITOR_DATA *editor_data); | |
205 #else /* NEW_EDITOR */ | |
206 void service_loadEditDefault (T_EDITOR_DATA *editor_data); | |
207 #endif /* NEW_EDITOR */ | |
208 void service_calc_balance (T_MFW_HND win,char* line); | |
209 void service_calculate (T_MFW_HND win, char* line, long value); | |
210 USHORT service_check_pin_for_aoc (void); | |
211 //ADDED BY RAVI-29-11-2005 | |
212 extern T_MFW_HND AUI_calc_Start(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data); | |
213 // END RAVI | |
214 | |
215 /******************************************************************************* | |
216 Functions | |
217 | |
218 *******************************************************************************/ | |
219 | |
220 /******************************************************************************* | |
221 | |
222 $Function: aoc_credit_remaining | |
223 | |
224 $Description: | |
225 | |
226 $Returns: | |
227 | |
228 $Arguments: | |
229 | |
230 *******************************************************************************/ | |
231 | |
232 int aoc_credit_remaining (MfwMnu* m, MfwMnuItem* i) | |
233 { | |
234 T_MFW_HND win = mfw_parent(mfw_header()); | |
235 | |
236 TRACE_FUNCTION("aoc_credit_remaining"); | |
237 | |
238 // create new dynamic dialog for the AOC | |
239 SEND_EVENT (service_Init (win), SERVICES_CREDIT_REMAINING, 0, 0); | |
240 | |
241 | |
242 return 0; | |
243 } | |
244 | |
245 | |
246 | |
247 /******************************************************************************* | |
248 | |
249 $Function: aoc_charge_rate | |
250 | |
251 $Description: A security code editing screen is opened and Pin 2 requested. | |
252 Once entered successfully, an alpha. editor is opened with the | |
253 title "Enter currency".Once entered, an numeric editor is opened | |
254 with the title "Enter price p. unit". When the user has finished | |
255 entry the information screen " Rate changed" is displayed for | |
256 3 second and the phone returns to the previous sub-menu | |
257 $Returns: | |
258 | |
259 $Arguments: | |
260 | |
261 *******************************************************************************/ | |
262 | |
263 | |
264 int aoc_charge_rate (MfwMnu* m, MfwMnuItem* i) | |
265 { | |
266 T_MFW_HND win = mfw_parent(mfw_header()); | |
267 | |
268 TRACE_FUNCTION("aoc_charge_rate"); | |
269 | |
270 switch (service_check_pin_for_aoc ()) | |
271 { | |
272 case MFW_SIM_PIN2_REQ: | |
273 // June 16, 2005 REF: CRR 31267 x0021334 | |
274 pin2Flag = TRUE; | |
275 // create new dynamic dialog for the AOC | |
276 SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_RATE, 0, 0); | |
277 break; | |
278 | |
279 case MFW_SIM_PIN_REQ: | |
280 case MFW_SIM_NO_PIN: | |
281 //pin 1 or no pin required, open now the editor for entering the currency | |
282 SEND_EVENT (service_Init (win), SERVICES_ENTER_CURRENCY, 0, 0); | |
283 break; | |
284 | |
285 } | |
286 | |
287 return 0; | |
288 } | |
289 | |
290 | |
291 | |
292 /******************************************************************************* | |
293 | |
294 $Function: aoc_view_limit | |
295 | |
296 $Description: | |
297 | |
298 $Returns: | |
299 | |
300 $Arguments: | |
301 | |
302 *******************************************************************************/ | |
303 | |
304 | |
305 int aoc_view_limit (MfwMnu* m, MfwMnuItem* i) | |
306 { | |
307 T_MFW_HND win = mfw_parent(mfw_header()); | |
308 | |
309 TRACE_FUNCTION("aoc_view_limit");/*SPR2500*/ | |
310 | |
311 | |
312 // create new dynamic dialog for the AOC | |
313 SEND_EVENT (service_Init (win), SERVICES_LIMIT_VIEW, 0, 0); | |
314 | |
315 return 0; | |
316 } | |
317 | |
318 | |
319 /******************************************************************************* | |
320 | |
321 $Function: aoc_change_limit | |
322 | |
323 $Description: | |
324 | |
325 $Returns: | |
326 | |
327 $Arguments: | |
328 | |
329 *******************************************************************************/ | |
330 | |
331 | |
332 int aoc_change_limit (MfwMnu* m, MfwMnuItem* i) | |
333 { | |
334 T_MFW_HND win = mfw_parent(mfw_header()); | |
335 | |
336 TRACE_FUNCTION("aoc_change_limit"); | |
337 | |
338 /*SPR#1904 - DS - Added call to service_check_pin_for_aoc() to check if | |
339 *PIN2 entry is required. | |
340 */ | |
341 switch (service_check_pin_for_aoc ()) | |
342 { | |
343 case MFW_SIM_PIN2_REQ: | |
344 // June 16, 2005 REF: CRR 31267 x0021334 | |
345 pin2Flag = TRUE; | |
346 // create new dynamic dialog for the AOC | |
347 SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_LIMIT_CHANGE, 0, 0); | |
348 break; | |
349 | |
350 case MFW_SIM_PIN_REQ: | |
351 case MFW_SIM_NO_PIN: | |
352 //pin 1 or no pin required, open now the editor for entering the currency | |
353 SEND_EVENT (service_Init (win), SERVICES_LIMIT_CHANGE, 0, 0); | |
354 break; | |
355 | |
356 } | |
357 | |
358 return 0; | |
359 } | |
360 | |
361 | |
362 /******************************************************************************* | |
363 | |
364 $Function: aoc_cancel_limit | |
365 | |
366 $Description: | |
367 | |
368 $Returns: | |
369 | |
370 $Arguments: | |
371 | |
372 *******************************************************************************/ | |
373 | |
374 | |
375 int aoc_cancel_limit (MfwMnu* m, MfwMnuItem* i) | |
376 { | |
377 T_MFW_HND win = mfw_parent(mfw_header()); | |
378 | |
379 TRACE_FUNCTION("aoc_charge_rate"); | |
380 | |
381 /*SPR#1904 - DS - Added call to service_check_pin_for_aoc() to check if | |
382 *PIN2 entry is required. | |
383 */ | |
384 switch (service_check_pin_for_aoc ()) | |
385 { | |
386 case MFW_SIM_PIN2_REQ: | |
387 // June 16, 2005 REF: CRR 31267 x0021334 | |
388 pin2Flag = TRUE; | |
389 // create new dynamic dialog for the AOC | |
390 SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_LIMIT_CANCEL, 0, 0); | |
391 break; | |
392 | |
393 case MFW_SIM_PIN_REQ: | |
394 case MFW_SIM_NO_PIN: | |
395 //pin 1 or no pin required, open now the editor for entering the currency | |
396 SEND_EVENT (service_Init (win), SERVICES_LIMIT_CANCEL, 0, 0); | |
397 break; | |
398 | |
399 } | |
400 | |
401 return 0; | |
402 } | |
403 | |
404 /******************************************************************************* | |
405 | |
406 $Function: aoc_last_charge | |
407 | |
408 $Description: Dispays the charge for the last call in the currency or in units | |
409 if no currency information has been entered | |
410 | |
411 $Returns: | |
412 | |
413 $Arguments: | |
414 | |
415 *******************************************************************************/ | |
416 | |
417 | |
418 int aoc_last_charge (MfwMnu* m, MfwMnuItem* i) | |
419 { | |
420 T_MFW_HND win = mfw_parent(mfw_header()); | |
421 | |
422 TRACE_FUNCTION("aoc_last_charge"); /*SPR2500*/ | |
423 | |
424 // create new dynamic dialog for the AOC | |
425 SEND_EVENT (service_Init (win), SERVICES_LAST_CHARGE, 0, 0); | |
426 | |
427 | |
428 return 0; | |
429 } | |
430 | |
431 /******************************************************************************* | |
432 | |
433 $Function: aoc_total_charge | |
434 | |
435 $Description: Displays the charge for all calls since the chage counter was last reset | |
436 | |
437 $Returns: | |
438 | |
439 $Arguments: | |
440 | |
441 *******************************************************************************/ | |
442 | |
443 | |
444 int aoc_total_charge (MfwMnu* m, MfwMnuItem* i) | |
445 { | |
446 T_MFW_HND win = mfw_parent(mfw_header()); | |
447 | |
448 TRACE_FUNCTION("aoc_total_charge");/*SPR2500*/ | |
449 | |
450 | |
451 // create new dynamic dialog for the AOC | |
452 SEND_EVENT (service_Init (win), SERVICES_TOTAL_CHARGE, 0, 0); | |
453 | |
454 | |
455 return 0; | |
456 } | |
457 /******************************************************************************* | |
458 | |
459 $Function: aoc_reset_charge | |
460 | |
461 $Description: Resets the charge counter for all calls | |
462 | |
463 $Returns: | |
464 | |
465 $Arguments: | |
466 | |
467 *******************************************************************************/ | |
468 | |
469 | |
470 int aoc_reset_charge (MfwMnu* m, MfwMnuItem* i) | |
471 { | |
472 T_MFW_HND win = mfw_parent(mfw_header()); | |
473 | |
474 TRACE_FUNCTION("aoc_reset_charge");/*SPR2500*/ | |
475 | |
476 | |
477 switch (service_check_pin_for_aoc ()) | |
478 { | |
479 case MFW_SIM_PIN2_REQ: | |
480 // June 16, 2005 REF: CRR 31267 x0021334 | |
481 pin2Flag = TRUE; | |
482 // create new dynamic dialog for the AOC | |
483 SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_RESET_CHARGE, 0, 0); | |
484 break; | |
485 | |
486 case MFW_SIM_PIN_REQ: | |
487 case MFW_SIM_NO_PIN: | |
488 //pin 1 or no pin required, open now the editor for entering the currency | |
489 SEND_EVENT (service_Init (win), SERVICES_RESET_CHARGE, 0, 0); | |
490 | |
491 break; | |
492 } | |
493 | |
494 return 0; | |
495 } | |
496 | |
497 | |
498 | |
499 | |
500 | |
501 | |
502 /******************************************************************************* | |
503 | |
504 $Function: service_Init | |
505 | |
506 $Description: | |
507 | |
508 $Returns: | |
509 | |
510 $Arguments: | |
511 | |
512 *******************************************************************************/ | |
513 T_MFW_HND service_Init (T_MFW_HND parent_window) | |
514 { | |
515 return (service_create (parent_window)); | |
516 } | |
517 | |
518 | |
519 /******************************************************************************* | |
520 | |
521 $Function: service_Exit | |
522 | |
523 $Description: | |
524 | |
525 $Returns: | |
526 | |
527 $Arguments: | |
528 | |
529 *******************************************************************************/ | |
530 void service_Exit (T_MFW_HND own_window) | |
531 { | |
532 | |
533 T_MFW_WIN * win_data = ((T_MFW_HDR *)own_window)->data; | |
534 T_SERVICES * data = (T_SERVICES *)win_data->user; | |
535 | |
536 TRACE_FUNCTION("service_Exit"); | |
537 /*SPR 2500, check valid window pointer before destruction*/ | |
538 if ((own_window) && | |
539 (win_data) && | |
540 (data) && | |
541 (data->service_win)) | |
542 { | |
543 service_destroy (data->service_win); | |
544 } | |
545 else | |
546 { | |
547 TRACE_ERROR("service_Exit : Invalid Pointer passed"); | |
548 } | |
549 | |
550 return; | |
551 | |
552 } | |
553 | |
554 /******************************************************************************* | |
555 | |
556 $Function: service_create | |
557 | |
558 $Description: | |
559 | |
560 $Returns: | |
561 | |
562 $Arguments: | |
563 | |
564 *******************************************************************************/ | |
565 T_MFW_HND service_create (T_MFW_HND parent_window) | |
566 { | |
567 T_SERVICES * data = (T_SERVICES *)ALLOC_MEMORY (sizeof (T_SERVICES)); | |
568 T_MFW_WIN * win; | |
569 | |
570 | |
571 TRACE_FUNCTION ("service_create()"); | |
572 | |
573 data->service_win = win_create (parent_window, 0, 0, (T_MFW_CB)service_win_cb); | |
574 | |
575 if (data->service_win EQ 0) | |
576 return 0; | |
577 | |
578 /* | |
579 * Create window handler | |
580 */ | |
581 data->mmi_control.dialog = (T_DIALOG_FUNC)service; | |
582 data->mmi_control.data = data; | |
583 win = ((T_MFW_HDR *)data->service_win)->data; | |
584 win->user = (void *) data; | |
585 | |
586 | |
587 winShow(data->service_win); | |
588 /* | |
589 * return window handle | |
590 */ | |
591 return data->service_win; | |
592 } | |
593 | |
594 /******************************************************************************* | |
595 | |
596 $Function: service_destroy | |
597 | |
598 $Description: | |
599 | |
600 $Returns: | |
601 | |
602 $Arguments: | |
603 | |
604 *******************************************************************************/ | |
605 void service_destroy (T_MFW_HND own_window) | |
606 { | |
607 T_MFW_WIN * win; | |
608 T_SERVICES * data; | |
609 | |
610 TRACE_FUNCTION ("service_destroy()"); | |
611 | |
612 if (own_window) | |
613 { | |
614 win = ((T_MFW_HDR *)own_window)->data; | |
615 data = (T_SERVICES *)win->user; | |
616 | |
617 if (data) | |
618 { | |
619 | |
620 /* | |
621 * Delete WIN handler | |
622 */ | |
623 win_delete (data->service_win); | |
624 data->service_win = 0; | |
625 | |
626 FREE_MEMORY ((void *)data, sizeof (T_SERVICES)); | |
627 | |
628 } | |
629 } | |
630 } | |
631 /******************************************************************************* | |
632 | |
633 $Function: service_win_cb | |
634 | |
635 $Description: | |
636 | |
637 $Returns: | |
638 | |
639 $Arguments: | |
640 | |
641 *******************************************************************************/ | |
642 static int service_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) | |
643 { | |
644 /* | |
645 * Top Window has no output | |
646 */ | |
647 return 1; | |
648 } | |
649 | |
650 /******************************************************************************* | |
651 | |
652 $Function: service_dialog_cb | |
653 | |
654 $Description: | |
655 | |
656 $Returns: | |
657 | |
658 $Arguments: | |
659 | |
660 *******************************************************************************/ | |
661 void service_dialog_cb(T_MFW_HND win, USHORT identifier, UBYTE reason) | |
662 { | |
663 TRACE_FUNCTION ("service_dialog_cb()"); | |
664 | |
665 switch (reason) | |
666 { | |
667 case INFO_KCD_LEFT: | |
668 /* no break; */ | |
669 case INFO_TIMEOUT: | |
670 /* no break; */ | |
671 case INFO_KCD_HUP: | |
672 /* no break; */ | |
673 case INFO_KCD_RIGHT: | |
674 /* no break; */ | |
675 case INFO_KCD_CLEAR: | |
676 | |
677 TRACE_EVENT_P1("identifier: %d", identifier); | |
678 | |
679 if (identifier EQ SERVICES_OUT_OF_RANGE) | |
680 { | |
681 TRACE_EVENT ("SERVICES_OUT_OF_RANGE"); | |
682 SEND_EVENT (win, SERVICES_ONE_UNIT, 0, 0); | |
683 } | |
684 else | |
685 { | |
686 TRACE_EVENT (" destroy "); | |
687 service_Exit(win); | |
688 } | |
689 break; | |
690 } | |
691 } | |
692 | |
693 /******************************************************************************* | |
694 | |
695 $Function: service_editor_cb | |
696 | |
697 $Description: | |
698 | |
699 $Returns: | |
700 | |
701 $Arguments: | |
702 | |
703 *******************************************************************************/ | |
704 | |
705 static void service_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) | |
706 { | |
707 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
708 T_SERVICES * data = (T_SERVICES *)win_data->user; | |
709 | |
710 | |
711 UBYTE PWD[16], i; | |
712 int result; | |
713 | |
714 TRACE_FUNCTION ("service_editor_cb()"); | |
715 /*SPR 2500, check pointers valid*/ | |
716 if ((!win) || | |
717 (!win_data) || | |
718 (!data)) | |
719 { | |
720 TRACE_ERROR("service_editor_cb : Invalid Pointer passed"); | |
721 return; | |
722 } | |
723 | |
724 if ((!win) || | |
725 (!win_data) || | |
726 (!data)) | |
727 { | |
728 TRACE_ERROR("service_editor_cb : Invalid Pointer passed"); | |
729 return; | |
730 } | |
731 | |
732 memset(PWD, 0x00, 16); | |
733 | |
734 switch (reason) | |
735 { | |
736 case INFO_KCD_LEFT: | |
737 switch (Identifier) | |
738 { | |
739 case SERVICES_ENTER_CURRENCY: | |
740 TRACE_EVENT ("SERVICES_ENTER_CURRENCY"); | |
741 TRACE_EVENT ("pressed left"); | |
742 | |
743 | |
744 // clear old current currency before overwrite it | |
745 memset(data->aocInfo.cur, 0x80, sizeof(data->aocInfo.cur)); | |
746 | |
747 if(strlen(data->edt_Buf) NEQ 0) | |
748 { | |
749 memcpy(data->aocInfo.cur, data->edt_Buf, MAX_ENTER_CURRENCY); | |
750 } | |
751 | |
752 //termination from ASCII to GSM default | |
753 for (i=0; i< MAX_ENTER_CURRENCY-1; i++) | |
754 { | |
755 if (data->aocInfo.cur[i] EQ '\0') | |
756 data->aocInfo.cur[i] = 0x80; | |
757 } | |
758 | |
759 | |
760 // open the next editor for entering the price per unit | |
761 SEND_EVENT (win, SERVICES_ONE_UNIT, 0, 0); | |
762 break; | |
763 | |
764 case SERVICES_ONE_UNIT: | |
765 TRACE_EVENT ("SERVICES_ONE_UNIT"); | |
766 TRACE_EVENT ("pressed left"); | |
767 | |
768 // clear old current ppu before overwrite it | |
769 memset(data->aocInfo.ppu, '\0', sizeof(data->aocInfo.ppu)); | |
770 | |
771 if(strlen(data->edt_Buf) NEQ 0) | |
772 { | |
773 memcpy(data->aocInfo.ppu, data->edt_Buf, strlen(data->edt_Buf)); | |
774 } | |
775 | |
776 | |
777 // Password not necessary, Pin2 scenario done | |
778 memset(PWD, 0x00, 16); | |
779 | |
780 // write cur and ppu in AOC | |
781 result = cm_set_aoc_value(CM_AOC_PUCT, &data->aocInfo, PWD); | |
782 | |
783 | |
784 TRACE_EVENT_P1("PPU : %s", data->aocInfo.ppu); | |
785 TRACE_EVENT_P1("CUR : %s", data->aocInfo.cur); | |
786 TRACE_EVENT_P1("result : %d", result); | |
787 | |
788 if(result EQ CM_OK) | |
789 { | |
790 SEND_EVENT (win, SERVICES_RATE_CHANGED, 0, 0); | |
791 } | |
792 else | |
793 { | |
794 SEND_EVENT (win, SERVICES_OUT_OF_RANGE, 0, 0); | |
795 } | |
796 | |
797 break; | |
798 | |
799 case SERVICES_LIMIT_CHANGE: | |
800 | |
801 // string => long | |
802 data->aocInfo.acm_max = atol(data->edt_Buf); | |
803 | |
804 // Password not necessary, Pin2 scenario done | |
805 memset(PWD, 0x00, 16); | |
806 | |
807 // May 25, 2004 REF: CRR MMI-SPR-17588 NISHIKANT KULKARNI | |
808 | |
809 // If the ACMmax value entered by the user is more than 16777215 (0xFFFFFF), | |
810 // display a "Not Allowed" message. | |
811 if(data->aocInfo.acm_max > MAX_ENTER_VALUE) | |
812 { | |
813 // Send event to display a "Not Allowed" message. | |
814 SEND_EVENT (win, SERVICES_AOC_NOT_SUPPORTED, 0, 0); | |
815 } | |
816 | |
817 // Else set the ACMmax value in AoC. | |
818 else | |
819 { | |
820 result = cm_set_aoc_value(CM_AOC_ACMMAX, &data->aocInfo, PWD); /* save ACMmax in AOC */ | |
821 | |
822 TRACE_EVENT_P1("%ld", data->aocInfo.acm_max); | |
823 TRACE_EVENT_P1("result of set aoc %d", result); | |
824 | |
825 // Send event to display a "Limit Changed" message. | |
826 SEND_EVENT (win, SERVICES_LIMIT_CHANGED, 0, 0); | |
827 } | |
828 | |
829 break; | |
830 case SERVICES_RESET_CHARGE: | |
831 /* MC 12/04/02: Changed ACMMAX to ACM (should fix "broken" SIM problem)*/ | |
832 | |
833 result = cm_set_aoc_value(CM_AOC_ACM, &data->aocInfo, PWD); /* save ACMmax in AOC */ | |
834 | |
835 } | |
836 break; | |
837 | |
838 case INFO_KCD_RIGHT: | |
839 case INFO_KCD_CLEAR: | |
840 | |
841 TRACE_EVENT ("INFO_KCD_RIGHT pressed"); | |
842 | |
843 switch (Identifier) | |
844 { | |
845 | |
846 case SERVICES_LIMIT_CHANGE: | |
847 case SERVICES_ENTER_CURRENCY: | |
848 | |
849 //go back to the previous screen | |
850 service_Exit (win); | |
851 break; | |
852 case SERVICES_ONE_UNIT: | |
853 | |
854 //go back to the previous screen | |
855 SEND_EVENT (win, SERVICES_ENTER_CURRENCY, 0, 0); | |
856 break; | |
857 | |
858 | |
859 default: | |
860 break; | |
861 } | |
862 default: | |
863 break; | |
864 } | |
865 } | |
866 | |
867 | |
868 /******************************************************************************* | |
869 | |
870 $Function: createAOCDialog | |
871 | |
872 $Description: Creates a dialog from 4 input parameters | |
873 | |
874 $Returns: | |
875 | |
876 $Arguments: | |
877 | |
878 *******************************************************************************/ | |
879 static void createAOCDialog( T_MFW_HND win, USHORT txtId1, USHORT txtId2, char *str2, USHORT event ) | |
880 { | |
881 T_DISPLAY_DATA display_info; | |
882 | |
883 dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, txtId1, txtId2, COLOUR_AOC); | |
884 dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)service_dialog_cb, THREE_SECS, KEY_CLEAR | KEY_RIGHT | KEY_LEFT ); | |
885 display_info.Identifier = event; | |
886 display_info.TextString2 = str2; | |
887 info_dialog (win, &display_info); | |
888 } | |
889 /******************************************************************************* | |
890 | |
891 $Function: service | |
892 | |
893 $Description: | |
894 | |
895 $Returns: | |
896 | |
897 $Arguments: | |
898 | |
899 *******************************************************************************/ | |
900 void service (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
901 { | |
902 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
903 T_SERVICES * data = (T_SERVICES *)win_data->user; | |
904 | |
905 /* CQ13428 - NDH - Use dynamically allocated memory to prevent MMI Stack Overflow */ | |
906 #ifdef NEW_EDITOR | |
907 /* SPR#1428 - SH - New Editor data */ | |
908 T_AUI_EDITOR_DATA *editor_data = (T_AUI_EDITOR_DATA *)ALLOC_MEMORY (sizeof (T_AUI_EDITOR_DATA)); | |
909 #else | |
910 T_EDITOR_DATA *editor_data = (T_EDITOR_DATA *)ALLOC_MEMORY (sizeof (T_EDITOR_DATA)); | |
911 #endif | |
912 // T_MFW_SIM_PIN_STATUS status; // RAVI | |
913 | |
914 UBYTE i, result; | |
915 UBYTE PWD[16]; | |
916 static char line[MAX_LINE]; | |
917 | |
918 TRACE_FUNCTION("service()"); | |
919 | |
920 if (!editor_data) | |
921 { | |
922 TRACE_ERROR("service : Failed to allocate memory for the Editor Data"); | |
923 return; | |
924 } | |
925 if ((!win) || | |
926 (!win_data) || | |
927 (!data)) | |
928 { | |
929 TRACE_ERROR("service : Invalid Pointer passed"); | |
930 /* CQ13428 - NDH - Use dynamically allocated memory to prevent MMI Stack Overflow */ | |
931 #ifdef NEW_EDITOR | |
932 FREE_MEMORY((void *)editor_data, sizeof (T_AUI_EDITOR_DATA)); | |
933 #else | |
934 FREE_MEMORY((void *)editor_data, sizeof (T_EDITOR_DATA)); | |
935 #endif | |
936 return; | |
937 } | |
938 | |
939 memset(PWD, 0x00, 16); | |
940 switch (event) | |
941 { | |
942 | |
943 case SERVICES_CREDIT_REMAINING: | |
944 | |
945 memset(line,'\0',sizeof(line)); | |
946 | |
947 //Get the ACM MAX | |
948 cm_get_aoc_value(CM_AOC_ACMMAX,&data->aocInfo); | |
949 | |
950 //Get ACM | |
951 cm_get_aoc_value(CM_AOC_ACM,&data->aocInfo); | |
952 | |
953 //Get currency and price per unit | |
954 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); | |
955 | |
956 | |
957 TRACE_EVENT_P1("ACMMAX: %ld", data->aocInfo.acm_max); | |
958 TRACE_EVENT_P1("ACM: %ld", data->aocInfo.acm); | |
959 TRACE_EVENT_P1("PPU:%s", data->aocInfo.ppu); | |
960 TRACE_EVENT_P1("CUR:%s", data->aocInfo.cur); | |
961 | |
962 | |
963 if ((data->aocInfo.acm_max NEQ '\0') && (data->aocInfo.acm NEQ '\0')) | |
964 { | |
965 /* special case: It is not possible to have ACM > ACMMAX */ | |
966 /* this case the mobile has to disconnect */ | |
967 if(data->aocInfo.acm > data->aocInfo.acm_max) | |
968 { | |
969 strcpy(line, "????"); | |
970 } | |
971 else | |
972 { | |
973 /* calculate the credit with ACMAX and PPU */ | |
974 TRACE_EVENT ("CREDIT :ACMMAX !=0 and PPU !=0"); | |
975 service_calc_balance (win,(char*)line); | |
976 | |
977 } | |
978 } | |
979 if ((data->aocInfo.acm_max EQ '\0') && (data->aocInfo.acm NEQ '\0')) | |
980 { | |
981 /* calculate the cost with ACM and PPU */ | |
982 TRACE_EVENT ("CREDIT :ACMMAX ==0 and PPU !=0"); | |
983 service_calculate (win, (char*)line, data->aocInfo.acm); | |
984 | |
985 } | |
986 if ((data->aocInfo.acm_max EQ '\0') && (data->aocInfo.acm NEQ '\0') ) | |
987 { | |
988 /* show only ACM */ | |
989 TRACE_EVENT ("CREDIT :ACMMAX ==0 and PPU ==0"); | |
990 sprintf(line, "%ld", data->aocInfo.acm); /* */ | |
991 } | |
992 if ((data->aocInfo.acm_max NEQ '\0') && (data->aocInfo.acm NEQ '\0')) | |
993 { | |
994 /* show only ACMAX */ | |
995 TRACE_EVENT ("CREDIT :ACMMAX !=0 and PPU ==0"); | |
996 sprintf(line, "%ld", data->aocInfo.acm_max - data->aocInfo.acm); /* */ | |
997 } | |
998 | |
999 if (data->aocInfo.acm EQ '\0') | |
1000 strcpy ((char *)line, "0"); | |
1001 | |
1002 //from ASCII to GSM default | |
1003 for (i=0; i< MAX_LINE; i++) | |
1004 { | |
1005 if (line[i] EQ 0x80 OR line[i] EQ 0xFF ) | |
1006 line[i] = '\0'; | |
1007 } | |
1008 | |
1009 | |
1010 if (data->aocInfo.acm_max EQ 0) | |
1011 { | |
1012 createAOCDialog( win, TxtCost, TxtNull, line, event); | |
1013 } | |
1014 else | |
1015 { | |
1016 createAOCDialog( win, TxtBalance, TxtNull, line, event); | |
1017 } | |
1018 break; | |
1019 | |
1020 | |
1021 | |
1022 | |
1023 case PIN_REQUEST_FOR_RATE: | |
1024 //save the status | |
1025 data->Identifier = SERVICES_ENTER_CURRENCY; | |
1026 | |
1027 //PIN2 is requested to change the Rate | |
1028 pin2_check (data->service_win); | |
1029 | |
1030 break; | |
1031 | |
1032 case PIN_REQUEST_FOR_LIMIT_CHANGE: | |
1033 | |
1034 //PIN2 is requested to change the Rate | |
1035 pin2_check (data->service_win); | |
1036 | |
1037 //save the status | |
1038 data->Identifier = SERVICES_LIMIT_CHANGE; | |
1039 break; | |
1040 | |
1041 case PIN_REQUEST_FOR_LIMIT_CANCEL: | |
1042 | |
1043 //PIN2 is requested to change the Rate | |
1044 pin2_check (data->service_win); | |
1045 | |
1046 //save the status | |
1047 data->Identifier = SERVICES_LIMIT_CANCEL; | |
1048 break; | |
1049 | |
1050 case PIN_REQUEST_FOR_RESET_CHARGE: | |
1051 //save the status | |
1052 data->Identifier = SERVICES_RESET_CHARGE; | |
1053 | |
1054 //PIN2 is requested to change the Rate | |
1055 pin2_check (data->service_win); | |
1056 | |
1057 break; | |
1058 | |
1059 | |
1060 //it calls from MMI PINS | |
1061 case PIN2_OK: | |
1062 TRACE_EVENT("PIN2_OK"); | |
1063 | |
1064 switch (data->Identifier) | |
1065 { | |
1066 case SERVICES_ENTER_CURRENCY: | |
1067 | |
1068 //pin was ok, open now the editor for entering the currency | |
1069 SEND_EVENT (win, data->Identifier, 0, 0); | |
1070 break; | |
1071 case SERVICES_LIMIT_CHANGE: | |
1072 | |
1073 //pin was ok, open now the editor for entering the currency | |
1074 SEND_EVENT (win, data->Identifier, 0, 0); | |
1075 break; | |
1076 case SERVICES_LIMIT_CANCEL: | |
1077 | |
1078 //pin was ok, open now the editor for entering the currency | |
1079 SEND_EVENT (win, data->Identifier, 0, 0); | |
1080 break; | |
1081 case SERVICES_RESET_CHARGE: | |
1082 | |
1083 //pin was ok, open now the editor for entering the currency | |
1084 SEND_EVENT (win, data->Identifier, 0, 0); | |
1085 break; | |
1086 | |
1087 | |
1088 | |
1089 } | |
1090 break; | |
1091 | |
1092 case PIN2_ABORT: | |
1093 createAOCDialog( win, TxtFailed, TxtNull, line, event ); | |
1094 break; | |
1095 | |
1096 case SERVICES_ENTER_CURRENCY: | |
1097 | |
1098 | |
1099 //save the status | |
1100 data->Identifier = SERVICES_ENTER_CURRENCY; | |
1101 | |
1102 | |
1103 //PUCT (currency and price per unit) is requested | |
1104 result = cm_get_aoc_value(CM_AOC_PUCT, &data->aocInfo); | |
1105 | |
1106 TRACE_EVENT_P1("result %d", result); | |
1107 | |
1108 //fill up editor-sttribut with default | |
1109 service_loadEditDefault (editor_data); | |
1110 | |
1111 //clear the editor-buffer | |
1112 memset(data->edt_Buf,'\0',sizeof(data->edt_Buf)); | |
1113 | |
1114 // let to show the current currency, before the user change it */ | |
1115 memcpy(data->edt_Buf, data->aocInfo.cur, MAX_ENTER_CURRENCY); | |
1116 | |
1117 | |
1118 for (i=0; i< MAX_ENTER_CURRENCY-1; i++) | |
1119 { | |
1120 if (data->edt_Buf[i] EQ 0x80 OR data->edt_Buf[i] EQ 0xFF ) | |
1121 data->edt_Buf[i] = '\0'; | |
1122 } | |
1123 | |
1124 /* SPR#1428 - SH - New Editor changes */ | |
1125 | |
1126 #ifdef NEW_EDITOR | |
1127 AUI_edit_SetBuffer(editor_data, ATB_DCS_ASCII, (UBYTE *)data->edt_Buf, MAX_ENTER_CURRENCY); | |
1128 AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, TxtEnterCurrency, NULL); | |
1129 AUI_edit_SetEvents(editor_data, data->Identifier, TRUE, FOREVER, (T_AUI_EDIT_CB)service_editor_cb); | |
1130 AUI_edit_SetMode(editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR); | |
1131 | |
1132 AUI_edit_Start(data->service_win, editor_data); | |
1133 #else /* NEW_EDITOR */ | |
1134 editor_data->editor_attr.text = data->edt_Buf; /* buffer to be edited */ | |
1135 editor_data->editor_attr.size = MAX_ENTER_CURRENCY;/* limit to 3 letters */ | |
1136 editor_data->LeftSoftKey = TxtSoftOK; | |
1137 editor_data->RightSoftKey = TxtDelete; | |
1138 editor_data->TextId = TxtEnterCurrency; | |
1139 editor_data->Identifier = data->Identifier; | |
1140 editor_data->mode = ALPHA_MODE; | |
1141 editor_data->AlternateLeftSoftKey = TxtNull; | |
1142 editor_data->min_enter = 1; | |
1143 | |
1144 /* create the dialog handler */ | |
1145 editor_start(data->service_win, editor_data); /* start the editor */ | |
1146 #endif /* NEW_EDITOR */ | |
1147 break; | |
1148 | |
1149 | |
1150 | |
1151 case SERVICES_ONE_UNIT: | |
1152 | |
1153 //save the status | |
1154 data->Identifier = SERVICES_ONE_UNIT; | |
1155 | |
1156 //fill up editor-sttribut with default | |
1157 service_loadEditDefault (editor_data); | |
1158 | |
1159 //clear the editor-buffer | |
1160 memset(data->edt_Buf,'\0',sizeof(data->edt_Buf)); | |
1161 | |
1162 /* let to show the current price per unit, before the user change it */ | |
1163 memcpy(data->edt_Buf, data->aocInfo.ppu, sizeof(data->aocInfo.ppu)); | |
1164 | |
1165 for (i=0; i< MAX_ENTER_UNIT-1; i++) | |
1166 { | |
1167 if (data->edt_Buf[i] EQ 0x80 OR data->edt_Buf[i] EQ 0xFF ) | |
1168 data->edt_Buf[i] = '\0'; | |
1169 } | |
1170 | |
1171 /* SPR#1428 - SH - New Editor changes */ | |
1172 #ifdef NEW_EDITOR | |
1173 AUI_edit_SetBuffer(editor_data, ATB_DCS_ASCII, (UBYTE *)data->edt_Buf, MAX_ENTER_UNIT); | |
1174 AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, Txt1Unit, NULL); | |
1175 AUI_edit_SetEvents(editor_data, data->Identifier, TRUE, FOREVER, (T_AUI_EDIT_CB)service_editor_cb); | |
1176 AUI_edit_SetMode(editor_data, 0, ED_CURSOR_BAR); | |
1177 | |
1178 AUI_calc_Start(data->service_win, editor_data); | |
1179 #else /* NEW_EDITOR */ | |
1180 editor_data->editor_attr.text = data->edt_Buf; /* buffer to be edited */ | |
1181 editor_data->editor_attr.size = MAX_ENTER_UNIT;/* limit to 5 numerics */ | |
1182 editor_data->LeftSoftKey = TxtSoftOK; | |
1183 editor_data->RightSoftKey = TxtDelete; | |
1184 editor_data->TextId = Txt1Unit; | |
1185 editor_data->Identifier = data->Identifier; | |
1186 editor_data->mode = CALC_MODE; | |
1187 editor_data->AlternateLeftSoftKey = TxtNull; | |
1188 editor_data->min_enter = 1; | |
1189 | |
1190 /* create the dialog handler */ | |
1191 editor_start(data->service_win, editor_data); /* start the editor */ | |
1192 #endif /* NEW_EDITOR */ | |
1193 break; | |
1194 | |
1195 | |
1196 case SERVICES_RATE_CHANGED: | |
1197 createAOCDialog( win, TxtRate, TxtChanged, NULL, event); | |
1198 break; | |
1199 | |
1200 case SERVICES_LIMIT_VIEW: | |
1201 | |
1202 memset(line,'\0',sizeof(line)); | |
1203 | |
1204 cm_get_aoc_value(CM_AOC_ACMMAX,&data->aocInfo); /* Get the ACM MAX */ | |
1205 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1206 | |
1207 TRACE_EVENT_P1("ACMMAX: %ld", data->aocInfo.acm_max); | |
1208 TRACE_EVENT_P1("ACM: %ld", data->aocInfo.acm); | |
1209 TRACE_EVENT_P1("PPU:%s", data->aocInfo.ppu); | |
1210 TRACE_EVENT_P1("CUR:%s", data->aocInfo.cur); | |
1211 | |
1212 if((strlen((char*)data->aocInfo.ppu) EQ 0) && data->aocInfo.acm_max NEQ '\0') | |
1213 { | |
1214 sprintf(line, "%ld", data->aocInfo.acm_max); /* Show only ACMmax */ | |
1215 TRACE_EVENT ("get only :ACMMAX ; PPU ==0 and ACMMAX!=0"); | |
1216 } | |
1217 if((strlen((char*)data->aocInfo.ppu) NEQ 0) && data->aocInfo.acm_max NEQ '\0') | |
1218 { | |
1219 service_calculate (win, (char*)line, data->aocInfo.acm_max); | |
1220 | |
1221 TRACE_EVENT ("calculate ACMMAX * PPU; PPU !=0 and ACMMAX!=0"); | |
1222 } | |
1223 | |
1224 for (i=0; i< MAX_LINE; i++) | |
1225 { | |
1226 if (line[i] EQ 0x80 OR line[i] EQ 0xFF ) | |
1227 line[i] = '\0'; | |
1228 } | |
1229 | |
1230 if(data->aocInfo.acm_max NEQ '\0') | |
1231 { | |
1232 createAOCDialog( win, TxtLimitEq, TxtNull, line, event); | |
1233 } | |
1234 else | |
1235 { | |
1236 createAOCDialog( win, TxtNo, TxtLimit, NULL, event); | |
1237 } | |
1238 | |
1239 /* | |
1240 * Call Info Screen | |
1241 */ | |
1242 | |
1243 break; | |
1244 | |
1245 case SERVICES_LIMIT_CHANGE: | |
1246 | |
1247 //fill up editor-sttribut with default | |
1248 service_loadEditDefault (editor_data); | |
1249 | |
1250 //clear the editor-buffer | |
1251 memset(data->edt_Buf,'\0',sizeof(data->edt_Buf)); | |
1252 | |
1253 data->Identifier = SERVICES_LIMIT_CHANGE; /*SPR 2500*/ | |
1254 | |
1255 | |
1256 data->Identifier = SERVICES_LIMIT_CHANGE; | |
1257 | |
1258 /* SPR#1428 - SH - New Editor changes */ | |
1259 #ifdef NEW_EDITOR | |
1260 | |
1261 AUI_edit_SetBuffer(editor_data, ATB_DCS_ASCII, (UBYTE *)data->edt_Buf, MAX_ENTER_LIMIT); | |
1262 AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, TxtEnterLimit, NULL); | |
1263 AUI_edit_SetEvents(editor_data, data->Identifier, TRUE, FOREVER, (T_AUI_EDIT_CB)service_editor_cb); | |
1264 AUI_edit_SetMode(editor_data, 0, ED_CURSOR_BAR); | |
1265 | |
1266 AUI_calc_Start(data->service_win, editor_data); | |
1267 #else /* NEW_EDITOR */ | |
1268 editor_data->editor_attr.text = data->edt_Buf; /* buffer to be edited */ | |
1269 editor_data->editor_attr.size = MAX_ENTER_LIMIT; /* limit to 6 terms of units */ | |
1270 editor_data->LeftSoftKey = TxtSoftOK; | |
1271 editor_data->RightSoftKey = TxtDelete; | |
1272 editor_data->TextId = TxtEnterLimit; | |
1273 editor_data->Identifier = data->Identifier; | |
1274 editor_data->mode = CALC_MODE; | |
1275 editor_data->AlternateLeftSoftKey = TxtNull; | |
1276 editor_data->min_enter = 1; | |
1277 | |
1278 /* create the dialog handler */ | |
1279 editor_start(data->service_win, editor_data); /* start the editor */ | |
1280 #endif /* NEW_EDITOR */ | |
1281 | |
1282 break; | |
1283 case SERVICES_LIMIT_CANCEL: | |
1284 | |
1285 // clear the limit | |
1286 data->aocInfo.acm_max = 0; | |
1287 | |
1288 // Password not necessary, Pin2 scenario done | |
1289 memset(PWD, 0x00, 16); | |
1290 | |
1291 cm_set_aoc_value(CM_AOC_ACMMAX, &data->aocInfo, PWD); /* save ACMmax in AOC */ | |
1292 | |
1293 TRACE_EVENT_P1("%ld", data->aocInfo.acm_max); | |
1294 | |
1295 SEND_EVENT (win, SERVICES_LIMIT_CHANGED, 0, 0); | |
1296 | |
1297 break; | |
1298 | |
1299 case SERVICES_LIMIT_CHANGED: | |
1300 createAOCDialog( win, TxtLimit, TxtChanged, NULL, event); | |
1301 | |
1302 break; | |
1303 | |
1304 case SERVICES_LAST_CHARGE: | |
1305 | |
1306 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1307 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1308 | |
1309 if ( strlen((char*)data->aocInfo.ppu) EQ 0 ) | |
1310 { | |
1311 TRACE_EVENT ("get only :ACM ; PPU ==0 and ACM!=0"); | |
1312 | |
1313 //show only the units ACM from last call | |
1314 sprintf(line, "%ld", acm_last_call); | |
1315 | |
1316 | |
1317 } | |
1318 else | |
1319 { | |
1320 TRACE_EVENT ("get only :ACM ; PPU !=0 and ACM!=0"); | |
1321 | |
1322 // add currency | |
1323 sprintf(line, "%ld %s", acm_last_call, data->aocInfo.cur); | |
1324 | |
1325 } | |
1326 | |
1327 | |
1328 | |
1329 if (acm_last_call EQ '\0') | |
1330 strcpy ((char *)line, "0"); | |
1331 | |
1332 createAOCDialog( win, TxtLastCharge, TxtNull, line, event); | |
1333 break; | |
1334 | |
1335 case SERVICES_TOTAL_CHARGE: | |
1336 | |
1337 memset(line,'\0',sizeof(line)); | |
1338 | |
1339 cm_get_aoc_value(CM_AOC_ACM,&data->aocInfo); /* Get the ACM */ | |
1340 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1341 | |
1342 | |
1343 /* nm test only set the default */ | |
1344 | |
1345 TRACE_EVENT_P1("ACM: %ld", data->aocInfo.acm); | |
1346 TRACE_EVENT_P1("PPU:%s", data->aocInfo.ppu); | |
1347 TRACE_EVENT_P1("CUR:%s", data->aocInfo.cur); | |
1348 | |
1349 | |
1350 if((strlen((char*)data->aocInfo.ppu) EQ 0) && data->aocInfo.acm NEQ '\0') | |
1351 { | |
1352 //show only the units ACM | |
1353 sprintf(line, "%ld", data->aocInfo.acm); | |
1354 TRACE_EVENT ("get only :ACM ; PPU ==0 and ACM!=0"); | |
1355 | |
1356 } | |
1357 if((strlen((char*)data->aocInfo.ppu) NEQ 0) && data->aocInfo.acm NEQ '\0') | |
1358 { | |
1359 | |
1360 service_calculate (win, (char*)line, data->aocInfo.acm); | |
1361 | |
1362 TRACE_EVENT ("calculate ACM * PPU; PPU !=0 and ACM!=0"); | |
1363 } | |
1364 | |
1365 if (data->aocInfo.acm EQ '\0') | |
1366 strcpy ((char *)line, "0"); | |
1367 | |
1368 createAOCDialog( win, TxtTotalCharge, TxtNull, line, event); | |
1369 | |
1370 break; | |
1371 | |
1372 case SERVICES_RESET_CHARGE: | |
1373 | |
1374 // clear the charge counter for all calls | |
1375 data->aocInfo.acm = 0; | |
1376 acm_last_call = 0; | |
1377 | |
1378 (void)cm_set_aoc_value(CM_AOC_ACM, &data->aocInfo, PWD); /* save ACM in AOC */ | |
1379 | |
1380 TRACE_EVENT_P1("%ld", data->aocInfo.acm); | |
1381 | |
1382 SEND_EVENT (win, SERVICES_CHARGE_CHANGED, 0, 0); | |
1383 | |
1384 break; | |
1385 | |
1386 case SERVICES_CHARGE_CHANGED: | |
1387 createAOCDialog( win, TxtResetCharge, TxtNull, NULL, event); | |
1388 break; | |
1389 case SERVICES_OUT_OF_RANGE: | |
1390 | |
1391 TRACE_EVENT("SERVICES_OUT_OF_RANGE"); | |
1392 createAOCDialog( win, TxtOutofRange, TxtNull, NULL, event); | |
1393 break; | |
1394 | |
1395 case SERVICES_AOC_NOT_SUPPORTED: | |
1396 TRACE_EVENT("SERVICES_NOT_ALLOWED"); | |
1397 createAOCDialog( win, TxtNotAllowed, TxtNull, NULL, event); | |
1398 break; | |
1399 | |
1400 | |
1401 } | |
1402 | |
1403 /* CQ13428 - NDH - Use dynamically allocated memory to prevent MMI Stack Overflow */ | |
1404 #ifdef NEW_EDITOR | |
1405 FREE_MEMORY((void *)editor_data, sizeof (T_AUI_EDITOR_DATA)); | |
1406 #else | |
1407 FREE_MEMORY((void *)editor_data, sizeof (T_EDITOR_DATA)); | |
1408 #endif | |
1409 return; | |
1410 } | |
1411 | |
1412 | |
1413 /******************************************************************************* | |
1414 | |
1415 $Function: service_loadEditDefault | |
1416 | |
1417 $Description: fill up editor-sttribut with default | |
1418 | |
1419 $Returns: | |
1420 | |
1421 $Arguments: | |
1422 | |
1423 *******************************************************************************/ | |
1424 #ifdef NEW_EDITOR | |
1425 /* SPR#1428 - SH - New Editor changes */ | |
1426 void service_loadEditDefault (T_AUI_EDITOR_DATA *editor_data) | |
1427 { | |
1428 TRACE_FUNCTION ("service_loadEditDefault()"); | |
1429 | |
1430 AUI_edit_SetDefault(editor_data); | |
1431 AUI_edit_SetDisplay(editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT); | |
1432 AUI_edit_SetEvents(editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)service_editor_cb); | |
1433 AUI_edit_SetTextStr(editor_data, TxtSoftSelect, TxtSoftBack, TxtNull, NULL); | |
1434 AUI_edit_SetMode(editor_data, 0, ED_CURSOR_UNDERLINE); | |
1435 AUI_edit_SetAltTextStr(editor_data, 1, TxtNull, FALSE, TxtNull); | |
1436 return; | |
1437 } | |
1438 #else /* NEW_EDITOR */ | |
1439 void service_loadEditDefault (T_EDITOR_DATA *editor_data) | |
1440 { | |
1441 TRACE_FUNCTION ("service_loadEditDefault()"); | |
1442 | |
1443 editor_attr_init(&editor_data->editor_attr, ZONE_SMALL_EDITOR, edtCurBar1, NULL, NULL, 0, COLOUR_EDITOR); | |
1444 editor_data->editor_attr.font = 0; | |
1445 | |
1446 editor_data_init( editor_data, (T_EDIT_CB)service_editor_cb, TxtSoftSelect, TxtSoftBack, TxtNull, 1, DIGITS_MODE, FOREVER); | |
1447 editor_data->hide = FALSE; | |
1448 editor_data->destroyEditor = TRUE; | |
1449 editor_data->AlternateLeftSoftKey = TxtNull; | |
1450 } | |
1451 #endif /* NEW_EDITOR */ | |
1452 | |
1453 /******************************************************************************* | |
1454 | |
1455 $Function: service_calc_balance | |
1456 | |
1457 $Description: Calculate the Credit remaining | |
1458 | |
1459 $Returns: | |
1460 | |
1461 $Arguments: | |
1462 | |
1463 *******************************************************************************/ | |
1464 void service_calc_balance (T_MFW_HND win,char* line) | |
1465 { | |
1466 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
1467 T_SERVICES * data = (T_SERVICES *)win_data->user; | |
1468 | |
1469 | |
1470 char line2[MAX_LINE]; | |
1471 char *pdest,*src,*dst,*POINT; | |
1472 LONG result; | |
1473 int ch = '.'; | |
1474 UBYTE counter=0; | |
1475 if ((!win) || | |
1476 (!win_data) || | |
1477 (!data)) | |
1478 { | |
1479 TRACE_ERROR("service_calc_balance : Invalid Pointer passed"); | |
1480 return; | |
1481 } | |
1482 | |
1483 /*SPR 2500, chack validity of pointers before continuing*/ | |
1484 if ((!win) || | |
1485 (!win_data) || | |
1486 (!data)) | |
1487 { | |
1488 TRACE_ERROR("service_calc_balance : Invalid Pointer passed"); | |
1489 return; | |
1490 } | |
1491 | |
1492 memset(line2,'\0',sizeof(line2)); | |
1493 | |
1494 cm_get_aoc_value(CM_AOC_ACMMAX,&data->aocInfo); /* Get the ACM MAX */ | |
1495 cm_get_aoc_value(CM_AOC_ACM,&data->aocInfo); /* Get ACM */ | |
1496 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1497 | |
1498 | |
1499 | |
1500 /* Search for '.' */ | |
1501 pdest =(char *) strchr((char*) data->aocInfo.ppu, ch ); | |
1502 | |
1503 if( pdest EQ NULL ) /* '.' not founded */ | |
1504 { | |
1505 result = atol((char*)data->aocInfo.ppu ); /* STRING => LONG */ | |
1506 result= result *(data->aocInfo.acm_max - data->aocInfo.acm); /* (ACMmax-ACM) * PPU */ | |
1507 sprintf(line, "%ld %s", result,data->aocInfo.cur); /* LONG => STRING */ | |
1508 } | |
1509 else /* '.' found */ | |
1510 { | |
1511 /* | |
1512 * '.' found, *pdest EQ '.' | |
1513 */ | |
1514 counter = strlen(pdest + 1); /* store the decimal place */ | |
1515 | |
1516 src = (char*)data->aocInfo.ppu; | |
1517 dst = line; | |
1518 do /* remove the '.' */ | |
1519 { | |
1520 if (*src NEQ '.') | |
1521 { | |
1522 *dst++ = *src; | |
1523 } | |
1524 } while (*src++ NEQ '\0'); | |
1525 /* STRING => LONG */ | |
1526 result= (atol(line))*(data->aocInfo.acm_max - data->aocInfo.acm); /* (ACMmax - ACM) * PPU */ | |
1527 sprintf(line, "%ld", result); /* LONG => STRING */ | |
1528 | |
1529 if(strlen(line) < counter) | |
1530 { | |
1531 src = line; | |
1532 dst = line2; | |
1533 *dst++ = '0'; | |
1534 *dst++ = '.'; | |
1535 counter = counter - strlen(line); | |
1536 do /* fill up with '0' */ | |
1537 { | |
1538 *dst++ = '0'; | |
1539 } while (--counter NEQ 0); | |
1540 | |
1541 memcpy (dst,src,sizeof(src)); | |
1542 sprintf(line, "%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1543 return; | |
1544 } | |
1545 src = line; | |
1546 dst = line2; | |
1547 POINT= src + strlen(src) - counter; | |
1548 do /* set the '.' */ | |
1549 { | |
1550 if (src EQ POINT) | |
1551 { | |
1552 *dst++ = '.'; | |
1553 } | |
1554 *dst++ = *src++; | |
1555 | |
1556 } while (*src NEQ '\0'); | |
1557 | |
1558 if (line2[0] EQ '.') | |
1559 sprintf(line, "0%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1560 | |
1561 if (line2[0] NEQ '.') | |
1562 sprintf(line, "%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1563 | |
1564 } | |
1565 return; | |
1566 } | |
1567 | |
1568 | |
1569 /******************************************************************************* | |
1570 | |
1571 $Function: service_calculate | |
1572 | |
1573 $Description: Calculate the value with price per unit and currency. | |
1574 | |
1575 "value * PPU" @ currency | |
1576 | |
1577 $Returns: | |
1578 | |
1579 $Arguments: | |
1580 | |
1581 *******************************************************************************/ | |
1582 | |
1583 | |
1584 void service_calculate (T_MFW_HND win, char* line, long value) | |
1585 { | |
1586 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
1587 T_SERVICES * data = (T_SERVICES *)win_data->user; | |
1588 | |
1589 char line2[MAX_LINE]; | |
1590 char *pdest,*src,*dst,*POINT; | |
1591 LONG result; | |
1592 int ch = '.'; | |
1593 UBYTE counter=0; | |
1594 | |
1595 /*SPR2500, check validity of pinters before continuing*/ | |
1596 if ((!win) || | |
1597 (!win_data) || | |
1598 (!data)) | |
1599 { | |
1600 TRACE_ERROR("service_calculate : Invalid Pointer passed"); | |
1601 return; | |
1602 } | |
1603 | |
1604 memset(line2,'\0',sizeof(line2)); | |
1605 | |
1606 cm_get_aoc_value(CM_AOC_ACM,&data->aocInfo); /* Get ACM */ | |
1607 cm_get_aoc_value(CM_AOC_PUCT,&data->aocInfo); /* Get currency and price per unit */ | |
1608 | |
1609 | |
1610 | |
1611 | |
1612 /* Search for '.' */ | |
1613 pdest =(char *) strchr((char*) data->aocInfo.ppu, ch ); | |
1614 if( pdest EQ NULL ) /* '.' not founded */ | |
1615 { | |
1616 result = atol((char*)data->aocInfo.ppu ); /* STRING => LONG */ | |
1617 result= result * value; /* value * PPU */ | |
1618 sprintf(line, "%ld %s", result,data->aocInfo.cur); /* LONG => STRING */ | |
1619 } | |
1620 else /* '.' found */ | |
1621 { | |
1622 /* | |
1623 * '.' found, *pdest EQ '.' | |
1624 */ | |
1625 counter = strlen(pdest + 1); /* store the decimal place */ | |
1626 | |
1627 src = (char*)data->aocInfo.ppu; | |
1628 dst = line; | |
1629 do /* remove the '.' */ | |
1630 { | |
1631 if (*src NEQ '.') | |
1632 { | |
1633 *dst++ = *src; | |
1634 } | |
1635 } while (*src++ NEQ '\0'); | |
1636 | |
1637 /* STRING => LONG */ | |
1638 result= atol(line) * value; /* value * PPU */ | |
1639 sprintf(line, "%ld", result); /* LONG => STRING */ | |
1640 | |
1641 if(strlen(line) < counter) | |
1642 { | |
1643 src = line; | |
1644 dst = line2; | |
1645 *dst++ = '0'; | |
1646 *dst++ = '.'; | |
1647 counter = counter - strlen(line); | |
1648 do /* fill up with '0' */ | |
1649 { | |
1650 *dst++ = '0'; | |
1651 } while (--counter NEQ 0); | |
1652 | |
1653 memcpy (dst,src,sizeof(src)); | |
1654 sprintf(line, "%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1655 return; | |
1656 } | |
1657 src = line; | |
1658 dst = line2; | |
1659 POINT= src + strlen(src) - counter; | |
1660 do /* set the '.' */ | |
1661 { | |
1662 if (src EQ POINT) | |
1663 { | |
1664 *dst++ = '.'; | |
1665 } | |
1666 *dst++ = *src++; | |
1667 | |
1668 } while (*src NEQ '\0'); | |
1669 | |
1670 if (line2[0] EQ '.') | |
1671 sprintf(line, "0%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1672 | |
1673 if (line2[0] NEQ '.') | |
1674 sprintf(line, "%s %s", line2,data->aocInfo.cur); /* add the currency */ | |
1675 } | |
1676 return; | |
1677 } | |
1678 | |
1679 /******************************************************************************* | |
1680 | |
1681 $Function: service_check_pin_for_aoc | |
1682 | |
1683 $Description: this function check the PIN 2 requirement & availability of AOC | |
1684 | |
1685 $Returns: | |
1686 | |
1687 $Arguments: | |
1688 | |
1689 *******************************************************************************/ | |
1690 USHORT service_check_pin_for_aoc (void) | |
1691 { | |
1692 T_MFW_AOC_ACCESS access; | |
1693 | |
1694 /* check PIN 2 requirement & availability of AOC */ | |
1695 sim_configuration (NULL, NULL, NULL, NULL, NULL, &access); | |
1696 | |
1697 TRACE_EVENT_P3("acm:%d acmmax:%d,puct:%d", access.access_acm,access.access_acmmax,access.access_puct); | |
1698 | |
1699 | |
1700 if (access.access_acm EQ MFW_SIM_PIN2 && | |
1701 access.access_acmmax EQ MFW_SIM_PIN2 && | |
1702 access.access_puct EQ MFW_SIM_PIN2) | |
1703 { | |
1704 TRACE_EVENT("PIN 2 required"); | |
1705 return MFW_SIM_PIN2_REQ; | |
1706 | |
1707 } | |
1708 else if (access.access_acm EQ MFW_SIM_PIN1 && | |
1709 access.access_acmmax EQ MFW_SIM_PIN1 && | |
1710 access.access_puct EQ MFW_SIM_PIN1) | |
1711 { | |
1712 TRACE_EVENT("PIN 1 required"); | |
1713 return MFW_SIM_PIN_REQ; | |
1714 | |
1715 } | |
1716 else if (access.access_acm EQ MFW_SIM_NO_PIN && | |
1717 access.access_acmmax EQ MFW_SIM_NO_PIN && | |
1718 access.access_puct EQ MFW_SIM_NO_PIN) | |
1719 { | |
1720 TRACE_EVENT("no any PIN required"); | |
1721 return MFW_SIM_NO_PIN; | |
1722 | |
1723 } | |
1724 else if (access.access_acm EQ MFW_SIM_UNKNOWN && | |
1725 access.access_acmmax EQ MFW_SIM_UNKNOWN && | |
1726 access.access_puct EQ MFW_SIM_UNKNOWN) | |
1727 { | |
1728 TRACE_EVENT("AOC not supported"); | |
1729 return MFW_SIM_FAILURE; | |
1730 } | |
1731 | |
1732 | |
1733 } | |
1734 | |
1735 /******************************************************************************* | |
1736 | |
1737 $Function: service_check_aoc | |
1738 | |
1739 $Description: If there is no support for AOC on SIM card | |
1740 the item "Charge Timers" will not Appear on the menulist | |
1741 | |
1742 $Returns: | |
1743 | |
1744 $Arguments: | |
1745 | |
1746 *******************************************************************************/ | |
1747 USHORT service_check_aoc (struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi) | |
1748 { | |
1749 TRACE_FUNCTION("service_check_aoc"); | |
1750 | |
1751 switch (service_check_pin_for_aoc ()) | |
1752 { | |
1753 case MFW_SIM_PIN2_REQ: | |
1754 case MFW_SIM_PIN_REQ: | |
1755 case MFW_SIM_NO_PIN: | |
1756 TRACE_EVENT("AOC item visible"); | |
1757 return 0; | |
1758 //break; // RAVI | |
1759 | |
1760 case MFW_SIM_FAILURE: | |
1761 TRACE_EVENT("AOC item not visible"); | |
1762 return 1; | |
1763 //break; // RAVI | |
1764 } | |
1765 | |
1766 | |
1767 } |