comparison src/ui3/bmi/mmiVoiceMemo.c @ 421:6a4d9f47793e

src/ui3/bmi: file renames to make the case consistent
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Jan 2018 03:28:53 +0000
parents src/ui3/bmi/MmiVoiceMemo.c@e8ddbb0837ed
children 0f2c6f6e3588
comparison
equal deleted inserted replaced
420:e8ddbb0837ed 421:6a4d9f47793e
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: VOICEMEMO
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: MmiVoiceMemo.c
29
30 Mar 28, 2007 DR: OMAPS00122762 x0039928
31 Description: MM: Deleting a PCM Voice Memo message in one particular memory,
32 delete them in all memories
33 Solution: voice memo position and pcm voice memo position is provided for all the devices.
34
35 Mar 31, 2006 ER: OMAPS00067709 x0pleela
36 Description: Voice Buffering implementation on C+ for PTT via PCM API
37 Solution: Added prototype for voice_buffering_stop_recording
38 Updating voicebuffering data for play stopped in play callback
39
40 Mar 15, 2006 ER: OMAPS00067709 x0pleela
41 Description: Voice Buffering implementation on C+ for PTT via PCM API
42 Solution: Defined new macro "PCM_VOICE_MEMO_MAX_DURATION" to restrict the recording
43 timeout to 20 secs for PCM voice memo and voice buffering
44 Added prototypes of new functions inputVoiceMemoNumberEditor, voiceMemoNumberCB,
45 voice_buffering_tim_cb, voice_buffering_data_reset
46 Added following new functions:
47 pcm_voice_memo_play: Sets voice memo type to PCM_VOICE_MEMO which indicates
48 PCM voice memo is active and start playing the voice
49 pcm_voice_memo_record: Sets voice memo type to PCM_VOICE_MEMO which indicates
50 PCM voice memo is active and start recording the voice
51 voice_buffering_edit_num: Opens an edtor for the user to enter PTT number. Also resets
52 voice buffering data with default values
53 voiceMemoNumberCB: call back for number entry
54 inputVoiceMemoNumberEditor: Settings of Editor
55 voice_buffering_record_start: Starts recording voice and conects to the PTT number if the
56 call is not active. If in call, then start playing the voice
57 voice_buffering_record_stop: Stops the timer and recording. If call is not active the
58 disconnects the call
59 voice_buffering_playback_start: Starts playing the voice. If any error while playing,
60 stops timer and recording
61 voice_buffering_stop_recording: A wrapper function for record stop to invoke from other
62 modules. Stops the timer and recording
63 voice_buffering_stop_playing: A wrapper function for play stop to invoke from other modules
64 voice_buffering_tim_cb: Timer callback. Stops the timer. If PTT call is not setup disconnect
65 the call, else call record stop
66 voice_buffering_data_reset: Resets voice buffering data to default values
67
68 Function: voice_memo_play, voice_memo_record, voice_memo_destroy
69 Changes: Added code to set voice memo type
70
71 Function: voice_memo
72 Changes: Added code to handle record start, play start for PCM voice memo
73
74 Function: voice_memo_tim_cb
75 Changes: Added code to handle record stop, play stop for PCM voice memo
76
77 Function: voice_memo_riv_play_cb
78 Changes: Added code to allow user to accept ant incoming call after the buffering phase
79
80 Feb 27, 2006 ER: OMAPS00067709 x0pleela
81 Description: Voice Buffering implementation on C+ for PTT via PCM API
82 Solution: Defined a global variable gPcm_voice_Memo which indicates which Voice memo is active
83 and corresponding audio APIs will be invoked and duplication of code is avoided
84
85 Feb 24, 2006 ER: OMAPS00067709 x0pleela
86 Description: Voice Buffering implementation on C+ for PTT via PCM API
87 Solution: Defined new macro PCM_VOICE_MEMO_MAX_DURATION which defines maximum
88 recording and playing duration for PCM voice memo and voice buffering
89 Implemented following functions to support PCM voice memo feature
90 pcm_voice_memo_init: Initialization of PCM voice memo
91 pcm_voice_memo_exit:Termination of PCM voice memo
92 pcm_voice_memo_play:Starts PCM voice memo play functionality
93 pcm_voice_memo_record:Starts PCM voice memo record functionality
94 pcm_voice_memo_start: create a new voicememo dialog
95 pcm_voice_memo_create: Creation of window
96 pcm_voice_memo_destroy: Destruction of an dialog
97 pcm_voice_memo: Dialog function for PCM voice memo dialog
98 pcm_voice_memo_win_cb:Callback function for information dialog
99 pcm_voice_memo_tim_cb: Callback function for the PCM voice_memo timer.
100 pcm_voice_memo_kbd_cb: Keyboard event handler
101 pcm_voice_memo_riv_record_cb: Callback that handles the return status for PCM voice memo recording
102 pcm_voice_memo_riv_play_cb:Callback that handles the return status for PCM voice memo palying
103
104 09/04/01 Original Condat(UK) BMI version.
105
106 $End
107
108 *******************************************************************************/
109
110
111
112
113 /*******************************************************************************
114
115 Include files
116
117 *******************************************************************************/
118 #define ENTITY_MFW
119
120 /* includes */
121 #include <string.h>
122 #include <stdio.h>
123 #include <stdlib.h>
124
125 #include "typedefs.h"
126 #include "vsi.h"
127 #include "pei.h"
128 #include "custom.h"
129 #include "gsm.h"
130
131 #include "mfw_sys.h"
132
133 #include "prim.h"
134
135 #include "cus_aci.h"
136
137 #include "mfw_mfw.h"
138 #include "mfw_win.h"
139 #include "mfw_kbd.h"
140 /* SPR#1428 - SH - New Editor changes */
141 #ifndef NEW_EDITOR
142 #include "mfw_edt.h"
143 #endif
144 #include "mfw_lng.h"
145 #include "mfw_tim.h"
146 #include "mfw_icn.h"
147 #include "mfw_mnu.h"
148 #include "mfw_phb.h"
149 #include "mfw_cm.h"
150 #include "mfw_sim.h"
151 #include "mfw_nm.h"
152 #include "mfw_sat.h"
153 #include "mfw_phb.h"
154 #include "ksd.h"
155 #include "psa.h"
156 #include "mfw_sms.h"
157 #include "mfw_cphs.h"
158 #include "mfw_sat.h"
159
160 #include "dspl.h"
161
162
163 #include "MmiMmi.h"
164 #include "MmiDummy.h"
165 #include "MmiDialogs.h"
166 #include "MmiLists.h"
167 #include "MmiIdle.h"
168 #include "MmiSoftKeys.h"
169 #include "Mmiicons.h"
170 #include "MmiMenu.h"
171 #include "MmiMain.h"
172 #include "MmiStart.h"
173 #include "MmiPins.h"
174 #include "MmiSettings.h"
175
176 #include "gdi.h"
177 #include "audio.h"
178 #include "MmiSounds.h"
179 #include "MmiResources.h"
180 #include "mmiColours.h"
181
182 //#include "vmd.h"
183 #include "MmiVoiceMemo.h"
184 #include "mfw_ffs.h"
185
186 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
187 #ifndef NEPTUNE_BOARD
188 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
189 #include "Audio/audio_api.h"
190 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
191 #endif /* NEPTUNE_BOARD*/
192 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
193
194 #include "mfw_aud.h"
195
196 //x0pleela 09 Mar, 2006 ER:OMAPS00067709
197 //Including this header to support number editor
198 #ifdef FF_PCM_VM_VB
199 #include "MmiBookshared.h"
200 #endif
201 /*******************************************************************************
202
203 internal data
204
205 *******************************************************************************/
206
207 /*
208 * Internal events
209 */
210 #define VM_INIT 500
211 #define VM_DESTROY 501
212 #define VM_PLAY 502
213 #define VM_RECORD 503
214 #define VM_DELETE_BUFFER 504
215
216 #define VOICE_MEMO_MAX_DURATION 10 // 10 Secs
217
218 typedef struct
219 {
220 T_MMI_CONTROL mmi_control;
221 T_MFW_HND parent_win;
222 T_MFW_HND info_win;
223 T_MFW_HND info_tim;
224 T_MFW_HND info_kbd;
225 USHORT Identifier;
226 USHORT time;
227 char elapsed_time[7];
228 int play_sk2;
229 } T_voice_memo;
230
231 //x0pleela 09 Mar, 2006 ER:OMAPS00067709
232 #ifdef FF_PCM_VM_VB
233 EXTERN T_voice_buffering voice_buffering_data;
234 EXTERN T_call call_data;
235 #endif
236 /*******************************************************************************
237
238 Local prototypes
239
240 *******************************************************************************/
241
242
243 T_MFW_HND voice_memo_start (T_MFW_HND parent_win, SHORT ID);
244 static T_MFW_HND voice_memo_create (T_MFW_HND parent_win);
245 static void voice_memo_destroy (T_MFW_HND own_window);
246 static void voice_memo (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
247 static int voice_memo_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
248 static T_MFW_CB voice_memo_tim_cb (T_MFW_EVENT event, T_MFW_TIM * tc);
249 static int voice_memo_kbd_cb (T_MFW_EVENT event, T_MFW_KBD * keyboard);
250 static void voice_memo_dialog_create(T_MFW_HND win, int str1, int str2);
251 void voice_memo_dialog_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason);
252 GLOBAL void voice_buffering_playback_start(void );
253 /*
254 ** Rivera Callback functions
255 */
256 static void voice_memo_riv_record_cb(void *parameter);
257 static void voice_memo_riv_play_cb(void *parameter);
258
259 //x0pleela 02 Mar, 2006 ER:OMAPS00067709
260 //Including this header to support number editor
261 #ifdef FF_PCM_VM_VB
262 MfwHnd inputVoiceMemoNumberEditor( MfwHnd parent, void *buffer );
263 void voiceMemoNumberCB( T_MFW_HND win, USHORT Identifier, UBYTE reason );
264 static int voice_buffering_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc);
265 static void voice_buffering_data_reset( void );
266 GLOBAL void voice_buffering_stop_recording(void );
267 #endif
268 /*******************************************************************************
269
270 $Function: voice_memo_init
271
272 $Description:
273
274 $Returns:
275
276 $Arguments:
277
278 *******************************************************************************/
279 GLOBAL void voice_memo_init (void)
280 {
281 TRACE_FUNCTION ("voice_memo_init()");
282
283 #ifdef FF_PCM_VM_VB
284 voice_buffering_data_reset();
285 #endif
286
287 }
288
289 /*******************************************************************************
290
291 $Function: voice_memo_exit
292
293 $Description:
294
295
296 $Returns:
297
298 $Arguments:
299
300 *******************************************************************************/
301 GLOBAL void voice_memo_exit (void)
302 {
303 TRACE_FUNCTION ("voice_memo_exit()");
304
305 }
306
307
308
309
310 /*******************************************************************************
311
312 $Function: voice_memo_play
313
314 $Description:
315
316 $Returns:
317
318 $Arguments:
319
320 *******************************************************************************/
321 GLOBAL int voice_memo_play (MfwMnu* m, MfwMnuItem* i)
322 {
323 T_MFW_HND win = mfw_parent(mfw_header());
324
325 TRACE_FUNCTION ("voice_memo_play()");
326
327 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
328 //Set this variable to VOICE_MEMOwhich indicates voice memo is active
329 #ifdef FF_PCM_VM_VB
330 set_voice_memo_type( AMR_VOICE_MEMO);
331 #endif
332
333 //create a new voice memo dialog
334 voice_memo_start (win, VM_PLAY);
335 return 1; // ADDED BY RAVI - 29-11-2005
336 }
337
338 /*******************************************************************************
339
340 $Function: voice_memo_storeage
341
342 $Description:
343
344
345 $Returns:
346
347 $Arguments:
348
349 *******************************************************************************/
350 GLOBAL int PCM_voice_memo_storeage (MfwMnu* m, MfwMnuItem* i)
351 {
352 T_MFW_HND parent_win = mfwParent(mfw_header());
353 int txtId = TxtFFS;
354
355 TRACE_FUNCTION("mmi_camera_set_storage()");
356
357 switch (m->lCursor[m->level])
358 {
359 case 0:
360 txtId = TxtFFS;
361 FFS_flashData.PCM_voicememo_storage = SNAP_STG_FFS;
362 break;
363
364 case 1:
365 txtId = TxtNORMS;
366 FFS_flashData.PCM_voicememo_storage = SNAP_STG_NORMS;
367 break;
368
369 case 2:
370 txtId = TxtNAND;
371 FFS_flashData.PCM_voicememo_storage = SNAP_STG_NAND;
372 break;
373
374 case 3:
375 txtId = TxtTflash;
376 FFS_flashData.PCM_voicememo_storage = SNAP_STG_MMC;
377 break;
378 }
379
380 flash_write();
381 //Set the Quality Factor.
382 TRACE_EVENT_P1("STorage set to %d ", FFS_flashData.PCM_voicememo_storage);
383 //Display the dialgbox to the user.
384 voice_memo_dialog_create(parent_win,txtId,TxtSelected);
385 return MFW_EVENT_CONSUMED;
386 }
387
388 /*******************************************************************************
389
390 $Function: voice_memo_storeage
391
392 $Description:
393
394
395 $Returns:
396
397 $Arguments:
398
399 *******************************************************************************/
400 GLOBAL int voice_buffer_storeage (MfwMnu* m, MfwMnuItem* i)
401 {
402 T_MFW_HND parent_win = mfwParent(mfw_header());
403 int txtId = TxtFFS;
404
405 TRACE_FUNCTION("mmi_camera_set_storage()");
406
407 switch (m->lCursor[m->level])
408 {
409 case 0:
410 txtId = TxtFFS;
411 FFS_flashData.voicebuffer_storage = SNAP_STG_FFS;
412 break;
413
414 case 1:
415 txtId = TxtNORMS;
416 FFS_flashData.voicebuffer_storage = SNAP_STG_NORMS;
417 break;
418
419 case 2:
420 txtId = TxtNAND;
421 FFS_flashData.voicebuffer_storage = SNAP_STG_NAND;
422 break;
423
424 case 3:
425 txtId = TxtTflash;
426 FFS_flashData.voicebuffer_storage = SNAP_STG_MMC;
427 break;
428 }
429
430 flash_write();
431 //Set the Quality Factor.
432 TRACE_EVENT_P1("STorage set to %d ", FFS_flashData.voicebuffer_storage);
433 //Display the dialgbox to the user.
434 voice_memo_dialog_create(parent_win,txtId,TxtSelected);
435 return MFW_EVENT_CONSUMED;
436 }
437
438 /*******************************************************************************
439
440 $Function: voice_memo_storeage
441
442 $Description:
443
444
445 $Returns:
446
447 $Arguments:
448
449 *******************************************************************************/
450 GLOBAL int voice_memo_storeage (MfwMnu* m, MfwMnuItem* i)
451 {
452 T_MFW_HND parent_win = mfwParent(mfw_header());
453 int txtId = TxtFFS;
454
455 TRACE_FUNCTION("mmi_camera_set_storage()");
456
457 switch (m->lCursor[m->level])
458 {
459 case 0:
460 txtId = TxtFFS;
461 FFS_flashData.voicememo_storage = SNAP_STG_FFS;
462 break;
463
464 case 1:
465 txtId = TxtNORMS;
466 FFS_flashData.voicememo_storage = SNAP_STG_NORMS;
467 break;
468
469 case 2:
470 txtId = TxtNAND;
471 FFS_flashData.voicememo_storage = SNAP_STG_NAND;
472 break;
473
474 case 3:
475 txtId = TxtTflash;
476 FFS_flashData.voicememo_storage = SNAP_STG_MMC;
477 break;
478 }
479
480 flash_write();
481 //Set the Quality Factor.
482 TRACE_EVENT_P1("STorage set to %d ", FFS_flashData.voicememo_storage);
483 //Display the dialgbox to the user.
484 voice_memo_dialog_create(parent_win,txtId,TxtSelected);
485 return MFW_EVENT_CONSUMED;
486 }
487
488
489 /*******************************************************************************
490
491 $Function: voice_memo_record
492
493 $Description:
494
495
496 $Returns:
497
498 $Arguments:
499
500 *******************************************************************************/
501 GLOBAL int voice_memo_record (MfwMnu* m, MfwMnuItem* i)
502 {
503
504 T_MFW_HND win = mfw_parent(mfw_header());
505
506 TRACE_FUNCTION ("voice_memo_record()");
507
508 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
509 //Set this variable to VOICE_MEMOwhich indicates voice memo is active
510 #ifdef FF_PCM_VM_VB
511 set_voice_memo_type( AMR_VOICE_MEMO);
512 #endif
513 //create a new voice memo dialog
514 voice_memo_start (win, VM_RECORD);
515 return 1; // RAVI - 29-11-2005
516 }
517
518
519 /*******************************************************************************
520
521 $Function: voice_memo_start
522
523 $Description: create a new voicememo dialog
524
525 $Returns: Dialogue info win
526
527 $Arguments: parent win, display info
528
529 *******************************************************************************/
530 T_MFW_HND voice_memo_start (T_MFW_HND parent_win, SHORT ID)
531 {
532 T_MFW_HND win;
533
534 win = voice_memo_create (parent_win);
535
536 if (win NEQ NULL)
537 {
538 SEND_EVENT (win, VM_INIT, ID, 0);
539 }
540 return win;
541 }
542
543
544
545 /*******************************************************************************
546
547 $Function: vocie_memo_create
548
549 $Description: Creation of window
550
551 $Returns: Dialogue info win
552
553 $Arguments: parent win
554
555 *******************************************************************************/
556 static T_MFW_HND voice_memo_create (T_MFW_HND parent_win)
557 {
558 T_MFW_WIN * win_data;
559 T_voice_memo * data = (T_voice_memo *)ALLOC_MEMORY (sizeof (T_voice_memo));
560
561 TRACE_FUNCTION ("vocie_memo_create()");
562
563 data->info_win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)voice_memo_win_cb);
564
565 if (data->info_win EQ 0)
566 return 0;
567
568 /*
569 * Create window handler
570 */
571 data->mmi_control.dialog = (T_DIALOG_FUNC)voice_memo;
572 data->mmi_control.data = data;
573 data->parent_win = parent_win;
574 win_data = ((T_MFW_HDR *)data->info_win)->data;
575 win_data->user = (void *)data;
576
577 /*
578 ** Initialise values to safe defualts
579 */
580 data->play_sk2 = TxtSoftBack;
581
582 /*
583 * return window handle
584 */
585 return data->info_win;
586 }
587
588
589 /*******************************************************************************
590
591 $Function: voice_memo_destroy
592
593 $Description: Destruction of an dialog
594
595 $Returns: void
596
597 $Arguments: win
598
599 *******************************************************************************/
600 void voice_memo_destroy (T_MFW_HND own_window)
601 {
602 T_MFW_WIN * win = ((T_MFW_HDR *)own_window)->data;
603 T_voice_memo * data = (T_voice_memo *)win->user;
604
605 TRACE_FUNCTION ("voice_memo_destroy()");
606
607 if (own_window == NULL)
608 {
609 TRACE_EVENT ("Error : Called with NULL Pointer");
610 return;
611 }
612
613 if (data)
614 {
615 /*
616 * Exit TIMER & KEYBOARD Handle
617 */
618 kbd_delete (data->info_kbd);
619 tim_delete (data->info_tim);
620
621 /*
622 * Delete WIN Handler
623 */
624 win_delete (data->info_win);
625 /*
626 * Free Memory
627 */
628 FREE_MEMORY ((void *)data, sizeof (T_voice_memo));
629 }
630
631 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
632 //Set gVoiceMemo to NONE while destroying voice memo dialog
633 #ifdef FF_PCM_VM_VB
634 set_voice_memo_type( NONE);
635 #endif
636 }
637
638
639
640 /*******************************************************************************
641
642 $Function: voice_memo
643
644 $Description: Dialog function for voice memo dialog
645
646 $Returns: void
647
648 $Arguments: win, window handle event, value, parameter
649
650 *******************************************************************************/
651 void voice_memo (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
652 {
653 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
654 T_voice_memo * data = (T_voice_memo *)win_data->user;
655
656 // T_DISPLAY_DATA display_info; // RAVI
657
658 SHORT mfw_aud_retVal = 0; /* x0039928 - Lint warning fix */
659 #ifdef FF_PCM_VM_VB
660 UBYTE vm_type; //to store voice memo type
661 #endif
662
663
664 data->Identifier = value;
665
666 TRACE_FUNCTION ("voice_memo()");
667
668 switch (event)
669 {
670 case VM_INIT:
671 TRACE_EVENT ("VM_INIT()");
672 /*
673 * Initialize dialog
674 */
675
676 /*
677 * Create timer and keyboard handler
678 */
679 data->info_tim = tim_create (win, 1000, (T_MFW_CB)voice_memo_tim_cb);
680 data->info_kbd = kbd_create (win, KEY_ALL, (T_MFW_CB)voice_memo_kbd_cb);
681
682
683 if (value EQ VM_PLAY)
684 {
685 TRACE_EVENT ("VM_PLAY()");
686
687 mfw_aud_retVal = mfw_aud_vm_start_playback(voice_memo_riv_play_cb);
688
689 if (mfw_aud_retVal == MFW_AUD_VM_OK)
690 {
691 //start the second timer
692 data->time = 0;
693 tim_start (data->info_tim);
694
695 //Set the Right Softkey Id
696 data->play_sk2 = TxtStop;
697 }
698 else
699 {
700 if (mfw_aud_retVal == MFW_AUD_VM_MEM_EMPTY)
701 {
702 voice_memo_dialog_create(win, TxtRecording, TxtEmpty);
703 }
704 else
705 {
706 //Display a dialog and exit
707 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_start_playback failed with return value : %d", mfw_aud_retVal);
708
709 voice_memo_dialog_create( win, TxtPlayback, TxtFailed);
710 }
711 }
712 }
713 else if (value EQ VM_RECORD)
714 {
715 TRACE_FUNCTION ("VM_RECORD()");
716 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
717 //Pass 20 secs time out for PCM voice memo and 10 secs for AMR Voice memo
718 #ifdef FF_PCM_VM_VB
719 //get the voice memo type
720 vm_type = get_voice_memo_type();
721
722 if(vm_type EQ PCM_VOICE_MEMO)
723 mfw_aud_retVal = mfw_aud_vm_start_record(PCM_VOICE_MEMO_MAX_DURATION,
724 voice_memo_riv_record_cb);
725 else
726 {
727 if(vm_type EQ AMR_VOICE_MEMO )
728 #endif
729 mfw_aud_retVal = mfw_aud_vm_start_record(VOICE_MEMO_MAX_DURATION, voice_memo_riv_record_cb);
730 #ifdef FF_PCM_VM_VB
731 }
732 #endif
733
734 // If the Riviera call failed
735 if (mfw_aud_retVal == MFW_AUD_VM_OK)
736 {
737 //start the second timer
738 data->time = 0;
739 tim_start (data->info_tim);
740 }
741 else
742 {
743 if (mfw_aud_retVal == MFW_AUD_VM_MEM_FULL)
744 {
745 TRACE_EVENT ("memory full ");
746 /* RAVI - 20-1-2006 */
747 /* Silent Implementation */
748 #ifdef NEPTUNE_BOARD
749 audio_PlaySoundID(0, TONES_KEYBEEP, getCurrentVoulmeSettings(),
750 AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
751 #else
752 /* play Keybeep */
753 audio_PlaySoundID(0, TONES_KEYBEEP, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
754 #endif
755 /* END RAVI */
756
757 voice_memo_dialog_create( win, TxtRecording, TxtFull );
758 }
759 else
760 {
761 //Display a dialog and exit
762 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_start_record failed with return value : %d", mfw_aud_retVal);
763
764 voice_memo_dialog_create( win, TxtRecording, TxtFailed );
765 }
766 }
767 }
768 win_show (win);
769 break;
770
771
772 //if the user selected to clear the Voicememo buffer
773 case VM_DELETE_BUFFER:
774 voice_memo_dialog_create( win, TxtDeleted, TxtNull );
775
776 /*
777 ** Delete the voice memo file
778 */
779 mfw_aud_vm_delete_file();
780 break;
781
782 case VM_DESTROY:
783 voice_memo_destroy(win);
784 break;
785 }
786 return;
787 }
788
789 /*******************************************************************************
790
791 $Function: voice_memo_win_cb
792
793 $Description: Callback function for information dialog
794
795 $Returns: void
796
797 $Arguments: window handle event, win
798 *******************************************************************************/
799 static int voice_memo_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
800 {
801 T_voice_memo * data = (T_voice_memo *)win->user;
802
803 TRACE_FUNCTION ("voice_memo_win_cb()");
804
805 if (data EQ 0)
806 return 1;
807
808 switch (event)
809 {
810 case E_WIN_VISIBLE:
811 if (win->flags & E_WIN_VISIBLE)
812 {
813 /*
814 * Clear Screen
815 */
816 dspl_ClearAll();
817
818 switch (data->Identifier)
819 {
820 case VM_PLAY:
821 /*
822 * Print the information screen
823 */
824 ALIGNED_PROMPT((T_MMI_ALIGN)LEFT,Mmi_layout_line(1),0, TxtPlayback);
825
826 /*
827 * Print the elapsed time
828 */
829 displayAlignedText(LEFT, Mmi_layout_line(2), 0, data->elapsed_time);
830
831 /*
832 * Print softkeys
833 */
834 displaySoftKeys(TxtDelete, data->play_sk2);
835 break;
836
837 case VM_RECORD:
838 /*
839 * Print the information screen
840 */
841 ALIGNED_PROMPT((T_MMI_ALIGN)LEFT,Mmi_layout_line(1),0, TxtRecording);
842
843 /*
844 * Print the elapsed time
845 */
846 displayAlignedText(LEFT, Mmi_layout_line(2), 0, data->elapsed_time);
847
848 /*
849 * Print softkeys
850 */
851 displaySoftKeys(TxtStop, '\0');
852 break;
853 }
854
855 }
856 break;
857
858 default:
859 return 0;
860 }
861 return 1;
862 }
863
864
865 /*******************************************************************************
866
867 $Function: voice_memo_tim_cb
868
869 $Description: Callback function for the voice_memo timer.
870
871
872 $Returns: MFW event handler
873
874 $Arguments: window handle event, timer control block
875
876 *******************************************************************************/
877 static T_MFW_CB voice_memo_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc)
878 {
879 T_MFW_HND win = mfw_parent (mfw_header());
880 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
881 T_voice_memo * data = (T_voice_memo *)win_data->user;
882
883 SHORT mfw_aud_retVal;
884 //x0pleela 27 Feb, 2006 ER:OMAPS00067709
885 //to store PCM/AMR voice memo record/play duration
886 USHORT vm_duration = 0; /* x0039928 - Lint warning fix */
887 // char buf[40]; // RAVI
888
889 //x0pleela 08 Mar, 2006 ER:OMAPS00067709
890 #ifdef FF_PCM_VM_VB
891 UBYTE vm_type; //to store voice memo type
892 #endif
893
894 TRACE_FUNCTION ("voice_memo_tim_cb()");
895
896 //x0pleela 27 Feb, 2006 ER:OMAPS00067709
897 #ifdef FF_PCM_VM_VB
898 //x0pleela 06 Mar, 2006 ER:OMAPS00067709
899 //get the voice memo type
900 vm_type = get_voice_memo_type();
901
902 if(vm_type EQ PCM_VOICE_MEMO)
903 vm_duration = PCM_VOICE_MEMO_MAX_DURATION;
904 else
905 {
906 if (vm_type EQ AMR_VOICE_MEMO)
907 #endif
908 vm_duration = VOICE_MEMO_MAX_DURATION;
909 #ifdef FF_PCM_VM_VB
910 }
911 #endif
912
913 switch (data->Identifier)
914 {
915 case VM_PLAY:
916 //the max. playback time is 10 second
917 if (data->time < mfw_aud_vm_get_duration())
918 {
919 TRACE_EVENT ("continue the second timer");
920
921 data->time ++;
922 // it shows here the elapsed time
923 sprintf(data->elapsed_time,"%02d sec", data->time);
924
925 TRACE_EVENT (data->elapsed_time);
926
927 //continue the second timer
928 tim_start (data->info_tim);
929 }
930 else
931 {
932 data->play_sk2 = TxtSoftBack;
933 #ifndef _SIMULATION_
934 /*
935 ** Stop playing the Voice Memo.
936 */
937 mfw_aud_retVal = mfw_aud_vm_stop_playback(voice_memo_riv_play_cb);
938
939 if (mfw_aud_retVal != MFW_AUD_VM_OK)
940 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_playback failed with return value : %d", mfw_aud_retVal);
941 #else
942 TRACE_EVENT("call mfw_aud_vm_stop_playback()");
943 #endif
944 }
945 break;
946
947
948 case VM_RECORD:
949
950 data->time++;
951
952 if (data->time < vm_duration)
953 {
954 TRACE_EVENT ("continue the second timer");
955 //x0pleela 27 Feb, 2006 ER:OMAPS00067709
956 //changed from Macro VOICE_MEMO_MAX_DURATION to local variable vm_duration
957 // it shows here the remainig time
958 sprintf(data->elapsed_time,"%02d sec", (vm_duration - data->time));
959
960 TRACE_EVENT (data->elapsed_time);
961
962 //continue the second timer
963 tim_start (data->info_tim);
964 }
965 else
966 {
967 //x0pleela 27 Feb, 2006 ER:OMAPS00067709
968 //changed from Macro VOICE_MEMO_MAX_DURATION to local variable vm_duration
969 mfw_aud_vm_set_duration(vm_duration);
970
971 #ifndef _SIMULATION_
972 /*
973 ** Stop recording the Voice Memo.
974 */
975 mfw_aud_retVal = mfw_aud_vm_stop_record(voice_memo_riv_record_cb);
976
977 if (mfw_aud_retVal != MFW_AUD_VM_OK)
978 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_record failed with return value : %d", mfw_aud_retVal);
979 /* RAVI - 20-1-2006 */
980 #ifdef NEPTUNE_BOARD
981 audio_PlaySoundID(0, TONES_KEYBEEP, getCurrentVoulmeSettings(),
982 AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
983 #else
984 /*the voice memo is now full, show "memory full" */
985 audio_PlaySoundID(0, TONES_KEYBEEP, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
986 #endif
987 /* END RAVI */
988
989 voice_memo_dialog_create( win, TxtRecording, TxtFull );
990 #else
991 TRACE_EVENT("call mfw_aud_vm_stop_record()");
992 #endif
993 }
994 break;
995 }
996
997 //Update the screen
998 winShow(win);
999
1000 return 0;
1001 }
1002
1003
1004 /*******************************************************************************
1005
1006 $Function: voice_memo_kbd_cb
1007
1008 $Description: Keyboard event handler
1009
1010 $Returns: status int
1011
1012 $Arguments: window handle event, keyboard control block
1013
1014 *******************************************************************************/
1015
1016 static int voice_memo_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
1017 {
1018 T_MFW_HND win = mfw_parent (mfw_header());
1019 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1020 T_voice_memo * data = (T_voice_memo *)win_data->user;
1021
1022 USHORT Identifier = data->Identifier;
1023 SHORT mfw_aud_retVal;
1024
1025
1026 TRACE_FUNCTION("voice_memo_kbd_cb");
1027
1028 switch (keyboard->code)
1029 {
1030 case KCD_HUP:
1031 case KCD_LEFT:
1032 if (Identifier EQ VM_PLAY)
1033 {
1034 #ifndef _SIMULATION_
1035 /*
1036 ** Stop playing the Voice Memo and Delete it.
1037 */
1038 mfw_aud_retVal = mfw_aud_vm_stop_playback(voice_memo_riv_play_cb);
1039
1040 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1041 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_playback failed with return value : %d", mfw_aud_retVal);
1042 #else
1043 TRACE_EVENT("call mfw_aud_vm_stop_playback()");
1044 #endif
1045 //delete the voicememo buffer
1046 /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */
1047 /* Fix: Commented duration reset */
1048 /* mfw_aud_vm_set_duration(0); */
1049
1050 //user selected the delete-key
1051 SEND_EVENT (win, VM_DELETE_BUFFER, 0, 0);
1052 }
1053 else if (Identifier EQ VM_RECORD)
1054 {
1055 mfw_aud_vm_set_duration(data->time);
1056
1057 #ifndef _SIMULATION_
1058 /*
1059 ** Stop recording the Voice Memo.
1060 */
1061 mfw_aud_retVal = mfw_aud_vm_stop_record(voice_memo_riv_record_cb);
1062
1063 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1064 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_record failed with return value : %d", mfw_aud_retVal);
1065
1066 //go back to the previous dialog
1067 SEND_EVENT (win, VM_DESTROY, 0, 0);
1068 #else
1069 TRACE_EVENT("call mfw_aud_vm_stop_record()");
1070 #endif
1071 }
1072 break;
1073
1074 case KCD_RIGHT:
1075 if (Identifier EQ VM_PLAY)
1076 {
1077
1078 #ifndef _SIMULATION_
1079 /*
1080 ** Stop playing the Voice Memo.
1081 */
1082 mfw_aud_retVal = mfw_aud_vm_stop_playback(voice_memo_riv_play_cb);
1083
1084 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1085 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_playback failed with return value : %d", mfw_aud_retVal);
1086 #else
1087 TRACE_EVENT("call mfw_aud_vm_stop_playback()");
1088 #endif
1089
1090 //go back to the previous dialog
1091 SEND_EVENT (win, VM_DESTROY, 0, 0);
1092 }
1093 else if (Identifier EQ VM_RECORD)
1094 {
1095 //nothing
1096 }
1097 break;
1098
1099 default:
1100 break;
1101 }
1102 return MFW_EVENT_CONSUMED;
1103 }
1104
1105
1106 /*******************************************************************************
1107
1108 $Function: voice_memo_dialog_cb
1109
1110 $Description:
1111
1112 $Returns:
1113
1114 $Arguments:
1115
1116 *******************************************************************************/
1117 void voice_memo_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
1118 {
1119 TRACE_FUNCTION ("voice_memo_dialog_cb()");
1120
1121 switch (reason)
1122 {
1123 case INFO_KCD_LEFT:
1124 /* no break; */
1125 case INFO_TIMEOUT:
1126 /* no break; */
1127 case INFO_KCD_HUP:
1128 /* no break; */
1129 case INFO_KCD_RIGHT:
1130 /* no break; */
1131 case INFO_KCD_CLEAR:
1132
1133 //go back to the previous dialog
1134 SEND_EVENT (win, VM_DESTROY,0, 0);
1135
1136 break;
1137 }
1138 }
1139
1140
1141 /*******************************************************************************
1142
1143 $Function: voice_memo_dialog_create
1144
1145 $Description:
1146
1147 $Returns:
1148
1149 $Arguments:
1150
1151 *******************************************************************************/
1152 static void voice_memo_dialog_create(T_MFW_HND win, int str1, int str2)
1153 {
1154 T_DISPLAY_DATA display_info;
1155
1156 TRACE_FUNCTION ("voice_memo_dialog_create()");
1157
1158 dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1, str2, COLOUR_STATUS);
1159 dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)voice_memo_dialog_cb, THREE_SECS, KEY_CLEAR | KEY_RIGHT | KEY_LEFT );
1160 /*
1161 * Call Info Screen
1162 */
1163 info_dialog (win, &display_info);
1164 }
1165
1166 static void voice_memo_riv_record_cb(void *parameter)
1167 {
1168 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
1169 #ifndef NEPTUNE_BOARD
1170 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
1171
1172 //x0pleela 16 Mar, 2006 ER:OMAPS00067709
1173 #ifdef FF_PCM_VM_VB
1174 UBYTE vm_type; //to store voice memo type
1175 #endif
1176
1177
1178 //x0pleela 16 Mar, 2006 ER:OMAPS00067709
1179 #ifdef FF_PCM_VM_VB
1180 vm_type = get_voice_memo_type();
1181 switch( vm_type )
1182 {
1183 case AMR_VOICE_MEMO:
1184 {
1185 #endif /* FF_PCM_VM_VB */
1186 T_AUDIO_VM_RECORD_STATUS *record_status;
1187 record_status = (T_AUDIO_VM_RECORD_STATUS *)parameter;
1188 if (record_status->status != AUDIO_OK)
1189 {
1190 TRACE_EVENT_P1("ERROR : voice_memo_riv_record_cb received AUDIO_ERROR, recorded duration is %d",
1191 record_status->recorded_duration);
1192 }
1193 else
1194 {
1195 TRACE_EVENT_P1("INFO : voice_memo_riv_record_cb received AUDIO_OK, recorded duration is %d",
1196 record_status->recorded_duration);
1197 mfw_aud_vm_set_duration((UINT8)record_status->recorded_duration);
1198 }
1199 #ifdef FF_PCM_VM_VB
1200 }
1201 break;
1202
1203 case PCM_VOICE_MEMO:
1204 {
1205 T_AUDIO_VM_PCM_RECORD_STATUS *pcm_vm_record_status;
1206
1207 pcm_vm_record_status = (T_AUDIO_VM_PCM_RECORD_STATUS *)parameter;
1208 if (pcm_vm_record_status->status != AUDIO_OK)
1209 {
1210 TRACE_EVENT_P1("ERROR : voice_memo_riv_record_cb received AUDIO_ERROR, recorded duration is %d",
1211 pcm_vm_record_status->recorded_duration);
1212 }
1213 else
1214 {
1215 TRACE_EVENT_P1("INFO : voice_memo_riv_record_cb received AUDIO_OK, recorded duration is %d",
1216 pcm_vm_record_status->recorded_duration);
1217 mfw_aud_vm_set_duration((UINT8)pcm_vm_record_status->recorded_duration);
1218 }
1219 }
1220 break;
1221
1222 case VOICE_BUFFERING:
1223 {
1224 T_AUDIO_VBUF_PCM_RECORD_STATUS *vbuf_pcm_record_status;
1225
1226 vbuf_pcm_record_status = (T_AUDIO_VBUF_PCM_RECORD_STATUS *)parameter;
1227
1228 if (vbuf_pcm_record_status->status != AUDIO_OK)
1229 {
1230 TRACE_EVENT_P1("ERROR : voice_memo_riv_record_cb received AUDIO_ERROR, recorded duration is %d",
1231 vbuf_pcm_record_status->recorded_duration);
1232 }
1233 else
1234 {
1235 TRACE_EVENT_P1("INFO : voice_memo_riv_record_cb received AUDIO_OK, recorded duration is %d",
1236 vbuf_pcm_record_status->recorded_duration);
1237 //x0pleela 13 Mar, 2006 ER:OMAPS00067709
1238 //check for reason to call record_stop
1239 switch( voice_buffering_data.rec_stop_reason)
1240 {
1241 case CALLING_PARTY_END_CALL: //calling party hangs up
1242 case CALLED_PARTY_END_CALL: //called party hangs up
1243 voice_buffering_data.call_active = FALSE;
1244 break;
1245
1246 case PLAY_ERROR: //recording timeout while playing
1247 voice_buffering_data.buffering_phase = FALSE;
1248 break;
1249
1250 case CALL_END_BEF_SETUP: //calling party hangs up before call setup
1251 case USER_SEL_STOP: //user selected "STOP" option, then just return
1252 case RECORDING_TIMEOUT: //recording timeout
1253 case CALLED_PARTY_NOT_AVAILABLE: //not reachable
1254 default:
1255 break;
1256 }
1257 voice_buffering_data.recording_possible = TRUE;
1258 voice_buffering_data.incoming_call_discon = FALSE;
1259 //destroy timer
1260 timDelete(voice_buffering_data.voice_buffering_tim);
1261 }
1262 //x0pleela 03 Apr, 2006 ER: OMAPS00067709
1263 //Set voice memo type to NONE
1264 set_voice_memo_type(NONE);
1265 }
1266
1267 break;
1268
1269 default:
1270 break;
1271 }
1272
1273
1274
1275 #endif /* FF_PCM_VM_VB */
1276
1277 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
1278 #endif /* NEPTUNE_BOARD */
1279 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
1280
1281 }
1282
1283 static void voice_memo_riv_play_cb(void *parameter)
1284 {
1285 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
1286 #ifndef NEPTUNE_BOARD
1287 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
1288
1289 //x0pleela 16 Mar, 2006 ER:OMAPS00067709
1290 #ifdef FF_PCM_VM_VB
1291 UBYTE vm_type; //to store voice memo type
1292 #endif
1293
1294 //x0pleela 16 Mar, 2006 ER:OMAPS00067709
1295 #ifdef FF_PCM_VM_VB
1296 vm_type = get_voice_memo_type();
1297 switch( vm_type )
1298 {
1299 case AMR_VOICE_MEMO:
1300 {
1301 #endif /* FF_PCM_VM_VB */
1302
1303 T_AUDIO_VM_PLAY_STATUS *play_status;
1304 play_status = (T_AUDIO_VM_PLAY_STATUS *)parameter;
1305 if (play_status->status != AUDIO_OK)
1306 {
1307 TRACE_EVENT("ERROR : voice_memo_riv_play_cb received AUDIO_ERROR");
1308 }
1309 else
1310 {
1311 TRACE_EVENT("INFO : voice_memo_riv_play_cb received AUDIO_OK");
1312 }
1313
1314 #ifdef FF_PCM_VM_VB
1315 }
1316 break;
1317
1318 case PCM_VOICE_MEMO:
1319 {
1320 T_AUDIO_VM_PCM_PLAY_STATUS *pcm_vm_play_status;
1321 pcm_vm_play_status = (T_AUDIO_VM_PCM_PLAY_STATUS *)parameter;
1322 if (pcm_vm_play_status->status != AUDIO_OK)
1323 {
1324 TRACE_EVENT("ERROR : voice_memo_riv_play_cb received AUDIO_ERROR");
1325 }
1326 else
1327 {
1328 TRACE_EVENT("INFO : voice_memo_riv_play_cb received AUDIO_OK");
1329 }
1330 }
1331 break;
1332
1333 case VOICE_BUFFERING:
1334 {
1335 T_AUDIO_VBUF_PCM_PLAY_STATUS *voice_buffering_play_status;
1336 voice_buffering_play_status = (T_AUDIO_VBUF_PCM_PLAY_STATUS *)parameter;
1337
1338 if (voice_buffering_play_status->status != AUDIO_OK)
1339 {
1340 TRACE_EVENT("ERROR : voice_memo_riv_play_cb received AUDIO_ERROR");
1341 }
1342 else
1343 {
1344 TRACE_EVENT("INFO : voice_memo_riv_play_cb received AUDIO_OK");
1345 voice_buffering_data.buffering_phase = FALSE;
1346 voice_buffering_data.play_stopped = TRUE;
1347 }
1348
1349 //x0pleela 06 Jul, 2006 DR: OMAPS00067709
1350 //Fix from AS team
1351 vocoder_mute_ul(0);
1352
1353 //x0pleela 03 Apr, 2006 ER: OMAPS00067709
1354 //Set voice memo type to NONE
1355 set_voice_memo_type(NONE);
1356 }
1357
1358 break;
1359
1360 default:
1361 break;
1362 }
1363
1364
1365
1366 #endif /* FF_PCM_VM_VB */
1367
1368 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */
1369 #endif /* NEPTUNE_BOARD*/
1370 /* END ADD: Req ID: : Sumit : 14-Mar-05 */
1371
1372 }
1373
1374 //x0pleela 24 Feb, 2006 ER OMAPS00067709
1375 #ifdef FF_PCM_VM_VB
1376
1377 /*******************************************************************************
1378
1379 $Function: pcm_voice_memo_play
1380
1381 $Description: Sets voice memo type to PCM_VOICE_MEMO which indicates PCM voice memo is
1382 active and start playing the voice
1383
1384 $Returns:
1385
1386 $Arguments:
1387
1388 *******************************************************************************/
1389 GLOBAL int pcm_voice_memo_play (MfwMnu* m, MfwMnuItem* i)
1390 {
1391 T_MFW_HND win = mfw_parent(mfw_header());
1392
1393 TRACE_FUNCTION ("pcm_voice_memo_play()");
1394
1395 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
1396 //Set this variable to PCM_VOICE_MEMO which indicates PCM voice memo is active
1397 set_voice_memo_type( PCM_VOICE_MEMO);
1398 //create a new voice memo dialog
1399 voice_memo_start (win, VM_PLAY);
1400 return 1;
1401 }
1402
1403 /*******************************************************************************
1404
1405 $Function: pcm_voice_memo_record
1406
1407 $Description: Sets voice memo type to PCM_VOICE_MEMO which indicates PCM voice memo is
1408 active and start recording the voice
1409
1410
1411 $Returns:
1412
1413 $Arguments:
1414
1415 *******************************************************************************/
1416 GLOBAL int pcm_voice_memo_record (MfwMnu* m, MfwMnuItem* i)
1417 {
1418 T_MFW_HND win = mfw_parent(mfw_header());
1419
1420 TRACE_FUNCTION ("pcm_voice_memo_record()");
1421
1422 //x0pleela 27 Feb, 2006 ER: OMAPA00067709
1423 //Set this variable to PCM_VOICE_MEMO which indicates PCM voice memo is active
1424 set_voice_memo_type( PCM_VOICE_MEMO);
1425 //create a new voice memo dialog
1426 voice_memo_start (win, VM_RECORD);
1427 return 1;
1428 }
1429
1430 /*******************************************************************************
1431
1432 $Function: voice_buffering_edit_num
1433
1434 $Description: Opens an edtor for the user to enter PTT number. Also resets voice buffering data
1435 with default values
1436
1437 $Returns:
1438
1439 $Arguments:
1440
1441 *******************************************************************************/
1442 GLOBAL int voice_buffering_edit_num (MfwMnu* m, MfwMnuItem* i)
1443 {
1444 T_MFW_HND win = mfw_parent(mfw_header());
1445 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data;
1446 tBookStandard *data = (tBookStandard *) win_data->user;
1447 T_phbk *Phbk = data->phbk;
1448
1449 TRACE_FUNCTION ("voice_buffering_edit_num()");
1450
1451 set_voice_memo_type( VOICE_BUFFERING );
1452
1453 memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );
1454 Phbk->input_number_win = inputVoiceMemoNumberEditor( win, Phbk->edt_buf_number );
1455
1456 //Reset voice buffering data with default values
1457 voice_buffering_data_reset();
1458
1459 /* Always return event consumed */
1460 return MFW_EVENT_CONSUMED;
1461 }
1462
1463 /*******************************************************************************
1464
1465 $Function: voiceMemoNumberCB
1466
1467 $Description: Call back for number entry
1468
1469 $Returns: None
1470
1471 $Arguments: win, parent window, reason, for call back
1472
1473 *******************************************************************************/
1474
1475 void voiceMemoNumberCB( T_MFW_HND win, USHORT Identifier, UBYTE reason )
1476 {
1477 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data;
1478 tBookStandard *data = (tBookStandard *) win_data->user;
1479
1480 TRACE_FUNCTION("voiceMemoNumberCB()");
1481
1482 switch ( reason )
1483 {
1484 case INFO_KCD_LEFT:
1485 {
1486 //copy phone number to global
1487 memset( voice_buffering_data.vb_PTTnum, 0, PHB_MAX_LEN );
1488 memcpy( voice_buffering_data.vb_PTTnum, data->phbk->edt_buf_number, strlen(data->phbk->edt_buf_number) );
1489 SEND_EVENT( data->phbk->input_number_win, E_ED_DESTROY, 0, 0 );
1490 data->phbk->input_number_win = 0;
1491 }
1492 break;
1493
1494 case INFO_KCD_RIGHT:
1495 case INFO_KCD_HUP:
1496 {
1497 AUI_edit_Destroy( data->phbk->input_number_win );
1498 data->phbk->input_number_win = 0;
1499 }
1500 break;
1501
1502 default:
1503 {
1504 /* otherwise no action to be performed
1505 */
1506 break;
1507 }
1508 }
1509 }
1510 /*******************************************************************************
1511
1512 $Function: inputVoiceMemoNumberEditor
1513
1514 $Description: Settings of Editor
1515
1516 $Returns:
1517
1518 $Arguments:
1519
1520 *******************************************************************************/
1521 MfwHnd inputVoiceMemoNumberEditor( MfwHnd parent, void *buffer )
1522 {
1523 T_AUI_EDITOR_DATA editor_data;
1524
1525 TRACE_FUNCTION ("inputVoiceMemoNumberEditor()");
1526
1527 AUI_edit_SetDefault(&editor_data);
1528 AUI_edit_SetDisplay(&editor_data, NUMBER_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT);
1529 AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)voiceMemoNumberCB);
1530 AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtEnterNumber, NULL);
1531 AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack);
1532 AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, NUMBER_LENGTH);
1533 AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE);
1534
1535 return AUI_edit_Start(parent, &editor_data);
1536 }
1537
1538 /*******************************************************************************
1539 $Function: voice_buffering_record_start
1540
1541 $Description: Starts recording voice and conects to the PTT number if the call is not active.
1542 If in call, then start playing the voice
1543
1544 $Returns:
1545
1546 $Arguments:
1547
1548 *******************************************************************************/
1549 GLOBAL int voice_buffering_record_start (MfwMnu* m, MfwMnuItem* i)
1550 {
1551 T_MFW_HND win = mfw_parent(mfw_header());
1552 SHORT mfw_aud_retVal;
1553
1554 TRACE_FUNCTION ("voice_buffering_record_start()");
1555 TRACE_EVENT_P1("PTT#: %s", voice_buffering_data.vb_PTTnum);
1556
1557 set_voice_memo_type( VOICE_BUFFERING );
1558
1559 //store window handler
1560 voice_buffering_data.win_hnd = win;
1561
1562 if( voice_buffering_data.recording_possible )
1563 {
1564 //create timer
1565 voice_buffering_data.voice_buffering_tim= tim_create (win, 20000,
1566 (T_MFW_CB)voice_buffering_tim_cb);
1567 //start timer
1568 timStart(voice_buffering_data.voice_buffering_tim);
1569 voice_buffering_data.buffering_phase = TRUE;
1570 voice_buffering_data.recording_possible = FALSE;
1571
1572 mfw_aud_retVal = mfw_aud_vm_start_record(PCM_VOICE_MEMO_MAX_DURATION,
1573 voice_memo_riv_record_cb);
1574 if(voice_buffering_data.call_active )
1575 {
1576 //start playing the recorded voice
1577 voice_buffering_playback_start();
1578 }
1579 else
1580 {
1581 //call PTT number
1582 callNumber((UBYTE*)voice_buffering_data.vb_PTTnum);
1583 }
1584
1585 // If the Riviera call failed
1586 if (mfw_aud_retVal EQ MFW_AUD_VM_OK)
1587 {
1588 //no action to be performed
1589 }
1590 else
1591 {
1592 if (mfw_aud_retVal == MFW_AUD_VM_MEM_FULL)
1593 {
1594 TRACE_EVENT ("memory full ");
1595 /* Silent Implementation */
1596 /* play Keybeep */
1597 audio_PlaySoundID(0, TONES_KEYBEEP, 200, AUDIO_PLAY_ONCE ); /* GW#2355 /CQ11341 */
1598
1599 voice_memo_dialog_create( win, TxtRecording, TxtFull );
1600 }
1601 else
1602 {
1603 //Display a dialog and exit
1604 TRACE_EVENT_P1 ("ERROR : voice_buffering_record_start failed with return value : %d", mfw_aud_retVal);
1605
1606 voice_memo_dialog_create( win, TxtRecording, TxtFailed );
1607 }
1608 }
1609 }
1610 else
1611 {
1612 //Display a dialog saying "Already Recording"
1613 voice_memo_dialog_create(win, TxtAlready, TxtRecording);
1614 }
1615 win_show (win);
1616 return 1;
1617 }
1618
1619 /*******************************************************************************
1620
1621 $Function: voice_buffering_record_stop
1622
1623 $Description: Stops the timer and recording. If call is not active the disconnects the call
1624
1625 $Returns:
1626
1627 $Arguments:
1628
1629 *******************************************************************************/
1630 GLOBAL int voice_buffering_record_stop (MfwMnu* m, MfwMnuItem* i)
1631 {
1632 T_MFW_HND win = mfw_parent(mfw_header());
1633
1634 TRACE_FUNCTION ("voice_buffering_record_stop()");
1635
1636 set_voice_memo_type ( VOICE_BUFFERING );
1637
1638 //store window handler
1639 voice_buffering_data.win_hnd = win;
1640
1641 voice_buffering_data.rec_stop_reason = USER_SEL_STOP;
1642 voice_buffering_data.recording_possible = TRUE;
1643
1644 if(!voice_buffering_data.call_active )
1645 {
1646 //stop the timer, if recording
1647 timStop(voice_buffering_data.voice_buffering_tim);
1648
1649 /* destroy the redial windows if exit*/
1650 cm_redial_abort();
1651 cm_disconnect(call_data.outCall);
1652
1653 if (!call_data.calls.numCalls)
1654 {
1655 call_data.ignore_disconnect = TRUE;
1656 call_destroy(call_data.win);
1657 }
1658 }
1659 else
1660 {
1661 //Stop recording
1662 voice_buffering_stop_recording();
1663 }
1664
1665 return 1;
1666 }
1667
1668 /*******************************************************************************
1669
1670 $Function: voice_buffering_playback_start
1671
1672 $Description: Starts playing the voice. If any error while playing, stops timer and recording
1673
1674 $Returns:
1675
1676 $Arguments:
1677
1678 *******************************************************************************/
1679 GLOBAL void voice_buffering_playback_start(void )
1680 {
1681 SHORT mfw_aud_retVal;
1682
1683 TRACE_FUNCTION ("voice_buffering_playback_start()");
1684
1685 voice_buffering_data.buffering_phase = TRUE;
1686 mfw_aud_retVal = mfw_aud_vm_start_playback(voice_memo_riv_play_cb);
1687 if (mfw_aud_retVal == MFW_AUD_VM_OK)
1688 {
1689 //no action to be performed
1690 }
1691 else
1692 {
1693 if (mfw_aud_retVal == MFW_AUD_VM_MEM_EMPTY)
1694 {
1695 voice_memo_dialog_create(voice_buffering_data.win_hnd, TxtRecording, TxtEmpty);
1696 }
1697 else
1698 {
1699 //Display a dialog and exit
1700 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_start_playback failed with return value : %d", mfw_aud_retVal);
1701 voice_memo_dialog_create( voice_buffering_data.win_hnd, TxtPlayback, TxtFailed);
1702
1703 //update the reason to stop recording
1704 voice_buffering_data.rec_stop_reason = PLAY_ERROR;
1705
1706 //stop recording
1707 voice_buffering_stop_recording();
1708 }
1709 }
1710 return;
1711 }
1712
1713 /*******************************************************************************
1714
1715 $Function: voice_buffering_stop_recording
1716
1717 $Description: A wrapper function for record stop to invoke from other modules.
1718 Stops the timer and recording
1719
1720 $Returns:
1721
1722 $Arguments:
1723
1724 *******************************************************************************/
1725 GLOBAL void voice_buffering_stop_recording(void )
1726 {
1727 SHORT mfw_aud_retVal;
1728
1729 TRACE_FUNCTION ("voice_buffering_stop_recording()");
1730
1731 //stop the timer, if recording
1732 timStop(voice_buffering_data.voice_buffering_tim);
1733
1734 mfw_aud_retVal = mfw_aud_vm_stop_record(voice_memo_riv_record_cb);
1735
1736 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1737 {
1738 TRACE_EVENT_P1 ("ERROR : voice_buffering_record_stop failed with return value : %d", mfw_aud_retVal);
1739
1740 //display dialog saying "Recording Stop Failed"
1741 voice_memo_dialog_create( voice_buffering_data.win_hnd, TxtRecord, TxtStopFailed );
1742 }
1743 return;
1744 }
1745
1746 /*******************************************************************************
1747
1748 $Function: voice_buffering_stop_playing
1749
1750 $Description: A wrapper function for play stop to invoke from other modules.
1751
1752 $Returns:
1753
1754 $Arguments:
1755
1756 *******************************************************************************/
1757 GLOBAL void voice_buffering_stop_playing(void )
1758 {
1759 SHORT mfw_aud_retVal;
1760
1761 TRACE_FUNCTION ("voice_buffering_stop_playing()");
1762
1763 mfw_aud_retVal = mfw_aud_vm_stop_playback(voice_memo_riv_play_cb);
1764
1765 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1766 {
1767 TRACE_EVENT_P1 ("ERROR : voice_buffering_record_stop failed with return value : %d", mfw_aud_retVal);
1768
1769 //display dialog saying "Recording Stop Failed"
1770 voice_memo_dialog_create( voice_buffering_data.win_hnd, TxtPlay, TxtStopFailed );
1771 }
1772 return;
1773 }
1774
1775
1776 /*******************************************************************************
1777
1778 $Function: voice_memo_tim_cb
1779
1780 $Description: Timer callback. Stops the timer. If PTT call is not setup disconnect the call,
1781 else call record stop
1782
1783 $Returns:
1784
1785 $Arguments:
1786
1787 *******************************************************************************/
1788 static int voice_buffering_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc)
1789 {
1790 T_MFW_HND win = mfw_parent (mfw_header());
1791 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1792 T_voice_buffering * data = (T_voice_buffering *)win_data->user;
1793 SHORT mfw_aud_retVal;
1794
1795 TRACE_FUNCTION("voice_buffering_tim_cb()");
1796 //get the voice memo type
1797 if( ( get_voice_memo_type() EQ VOICE_BUFFERING ) AND ( data->voice_buffering_tim ) )
1798 {
1799 timStop(voice_buffering_data.voice_buffering_tim);
1800 }
1801 voice_buffering_data.rec_stop_reason = RECORDING_TIMEOUT;
1802
1803 if( !voice_buffering_data.call_active ) //timeout before call setup
1804 {
1805 cm_disconnect(call_data.outCall);
1806
1807 if (!call_data.calls.numCalls)
1808 {
1809 call_data.ignore_disconnect = TRUE;
1810 call_destroy(call_data.win);
1811 }
1812 }
1813 else //timeout after call setup
1814 {
1815 mfw_aud_retVal = mfw_aud_vm_stop_record(voice_memo_riv_record_cb);
1816
1817 if (mfw_aud_retVal != MFW_AUD_VM_OK)
1818 {
1819 TRACE_EVENT_P1 ("ERROR : mfw_aud_vm_stop_record failed with return value : %d", mfw_aud_retVal);
1820
1821 //display dialog saying "Recording Stop Failed"
1822 voice_memo_dialog_create( voice_buffering_data.win_hnd, TxtRecording, TxtStopFailed );
1823 }
1824 }
1825
1826 return MFW_EVENT_CONSUMED;
1827 }
1828
1829 /*******************************************************************************
1830
1831 $Function: voice_buffering_data_reset
1832
1833 $Description: Resets voice buffering data to default values
1834
1835 $Returns:
1836
1837 $Arguments:
1838
1839 *******************************************************************************/
1840 static void voice_buffering_data_reset( void )
1841 {
1842 TRACE_FUNCTION("voice_buffering_data_reset()");
1843
1844 voice_buffering_data.win_hnd = 0;
1845 voice_buffering_data.voice_buffering_tim = 0;
1846 memset( voice_buffering_data.vb_PTTnum, 0, PTT_NUM_LEN );
1847 voice_buffering_data.rec_stop_reason = VB_NONE;
1848 voice_buffering_data.call_active = FALSE;
1849 voice_buffering_data.recording_possible = TRUE;
1850 voice_buffering_data.buffering_phase = FALSE;
1851 voice_buffering_data.incoming_call_discon = FALSE;
1852 voice_buffering_data.play_stopped = FALSE;
1853
1854 }
1855 #endif