FreeCalypso > hg > fc-tourmaline
diff src/ui/mfw/mfw_aud.c @ 3:67bfe9f274f6
src/ui: import of src/ui3 from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:33:10 +0000 |
parents | |
children | 92abb46dc1ba |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui/mfw/mfw_aud.c Fri Oct 16 06:33:10 2020 +0000 @@ -0,0 +1,1357 @@ +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) $Workfile:: mfw_aud.c $| +| $Author:: NDH $Revision:: 1 $| +| CREATED: 04.02.03 $Modtime:: 10.04.00 14:58 $| +| STATE : code | ++--------------------------------------------------------------------+ + + MODULE : MFW_AUD + + PURPOSE : This module contains Audio Riveria Interface functions. + + HISTORY: + + Mar 28, 2007 DR: OMAPS00122762 x0039928 + Description: MM: Deleting a PCM Voice Memo message in one particular memory, + delete them in all memories + Solution: voice memo position and pcm voice memo position is provided for all the devices. + + July 03,2006 REF :OMAPS00083150 x0047075 + Description :Audio muted on call swap / hold + Solution :Function call hl_drv_enable_vocoder() and hl_drv_disable_vocoder() are replaced with hl_drv_set_vocoder_state() + Mar 15, 2006 ER: OMAPS00067709 x0pleela + Description: Voice Buffering implementation on C+ for PTT via PCM API + Solution: Defined new macros of folder and file names for PCM voice memo and Voice buffering + Defined new macros for Microphone and network gain of PCM VM and Voice buffering + Defined new functions set_voice_memo_type, get_voice_memo_type, set_voice_buffering_rec_stop_reason + Function: mfw_aud_vm_delete_file + Changes:Handling file deletion forPCM voice memo also + + Function: mfw_aud_vm_start_playback, mfw_aud_vm_stop_playback, mfw_aud_vm_start_record, + mfw_aud_vm_stop_record, mfw_aud_vm_get_duration, mfw_aud_vm_set_duration + Changes: Added code to call respective audio APIs for PCM voice memo and voice buffering + + Feb 24, 2006 ER: OMAPS00067709 x0pleela + Description: Voice Buffering implementation on C+ for PTT via PCM API + Solution: Defined a global variable gPcm_voice_Memo which indicates which Voice memo is active + and corresponding audio APIs will be invoked and duplication of code is avoided + + Feb 24, 2006 ER: OMAPS00067709 x0pleela + Description: Voice Buffering implementation on C+ for PTT via PCM API + Solution: Adding new macros PCM_VM_FILE_NAME, PCM_VM_FOLDER to define new files for PCM voice memo + Following functions are implemented to support PCM voice memo feature + mfw_aud_vm_pcm_delete_file: Delete the file which held the PCM Voice Memo + mfw_aud_vm_pcm_start_playback: Start playback of a previously recorded PCM Voice Memo + mfw_aud_vm_pcm_stop_playback: Stop playback of a previously recorded PCM Voice Memo + mfw_aud_vm_pcm_start_record: Configure Riviera and start recording a PCM Voice Memo + mfw_aud_vm_pcm_stop_record: Stop recording a PCM Voice Memo + mfw_aud_vm_pcm_get_duration: Get the duration of the previously recorded PCM Voice Memo + mfw_aud_vm_pcm_set_duration: Set the duration of the previously recorded PCM Voice Memo + + Apr 06, 2006 ERT: OMAPS00070660 x0039928(sumanth) + Description: Need to reduce flash foot-print for Locosto Lite + Solution: Voice Memo feature is put under the flag #ifndef FF_NO_VOICE_MEMO to compile + out voice memo feature if the above flag is enabled. + + Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar + Description: RE: Vocoder interface change + Solution: Function call 'enable_tch_vocoder()' is replaced with new functions 'hl_drv_enable_vocoder()' + and 'hl_drv_disable_vocoder()' + + Aug 25, 2004 REF: CRR 20655 xnkulkar + Description: Voice Memo functionality not working + Solution: The voice recording functionality was failing because + " mmi" folder is not present. As a solution, we create the + "mmi" folder and then proceed with recording. +*/ + + +/* +** Include Files +*/ + +#define ENTITY_MFW + +/* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */ +#ifndef NEPTUNE_BOARD +/* END ADD: Req ID: : Sumit : 14-Mar-05 */ + +/* includes */ +#include <string.h> + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#include "mfw_ffs.h" +#include "mfw_aud.h" +#if 0 /* FreeCalypso */ +#include "mfw_fm.h" +#endif +#ifndef FF_NO_VOICE_MEMO +#include "Audio/audio_api.h" +#endif + +// Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar +#include "hl_audio_drv.h" + +//x0pleela 06 Jul, 2006 DR: OMAPS00067709 +//fix from AS team +#ifdef FF_PCM_VM_VB +#include "l1audio_cust.h" +#endif +/* +** Local Variable Definitions +*/ + +#ifndef FF_NO_VOICE_MEMO +static T_RV_RETURN_PATH voice_memo_return_path; + + +/* +** Local Macro Definitions +*/ + +#define VM_FILE_NAME "vmfile" // FFS File Name +#define VM_FOLDER "/mmi/vm" + +//x0pleela 24 Feb, 2006 ER OMAPS00067709 +#ifdef FF_PCM_VM_VB +#define PCM_VM_FILE_NAME "pcmvm" // FFS PCM voice memo File Name +#define PCM_VM_FOLDER "/mmi/pcmvm" //PCM oice memo folder + +//x0pleela 09 Mar, 2006 ER OMAPS00067709 +#define VOICE_BUFF_FILE_NAME "vbfile" // FFS Voice buffering File Name +#define VOICE_BUFF_FOLDER "/mmi/vb" //Voice buffering folder + +//x0pleela 01 Mar, 2006 ER OMAPS00067709 +//Microphone and network gain for PCM VM and Voice buffering +#define PCM_VM_MICROPHONE_GAIN (0x20) // Enable recording from microphone +#define PCM_VM_NETWORK_GAIN (0x20) // Enable recording from network +#endif + +#define VM_MICROPHONE_GAIN (0x0100) // Default Gain of 1 +#define VM_NETWORK_GAIN (0x0100) // Default Gain of 1 + +#define VM_TONE_DURATION (50) +#define VM_TONE_INTERVAL (50) +#define VM_TONE_AMPLITUDE (-24) // Default Amplitude of -24dB + +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB +static T_VOICEMEMO VoiceMemoType; /* Voice memo type*/ + +//x0pleela 09 Mar, 2006 ER OMAPS00067709 +GLOBAL T_voice_buffering voice_buffering_data; /* Voice buffering data */ +#endif + + +/* +** Local Function Prototypes +*/ + +static void mfw_aud_vm_create_file(const char *folder, const char *fname, UBYTE index); +static void configure_callback_fn(void (*callback_fn)(void *)); +#ifdef FF_MMI_FILEMANAGER +static void configure_vm_filename(UINT16 *vm_filename, const char *folder, const char *fname, UBYTE index); +#else +static void configure_vm_filename(char *vm_filename, const char *folder, const char *fname, UBYTE index); +#endif + +/* +** Public function Definitions +*/ + +#ifdef FF_PCM_VM_VB +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: set_voice_memo_type | ++--------------------------------------------------------------------+ + + PURPOSE : Function to set the type of voice memo +*/ +//x0pleela 09 Mar, 2006 ER:OMAPS00067709 + +void set_voice_memo_type( T_VOICEMEMO voice_memo_type) +{ + TRACE_FUNCTION("set_voice_memo_type()"); + VoiceMemoType = voice_memo_type; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: get_voice_memo_type | ++--------------------------------------------------------------------+ + + PURPOSE : Function to get the type of voice memo +*/ +//x0pleela 08 Mar, 2006 ER:OMAPS00067709 + +GLOBAL T_VOICEMEMO get_voice_memo_type( void) +{ + TRACE_FUNCTION("get_voice_memo_type()"); + return VoiceMemoType; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: set_voice_buffering_rec_stop_reason | ++--------------------------------------------------------------------+ + + PURPOSE : Function to set the reason to call record stop +*/ +//x0pleela 07 Mar, 2006 ER:OMAPS00067709 +GLOBAL void set_voice_buffering_rec_stop_reason( T_VOICE_BUFFERING_STATUS reason) +{ + TRACE_FUNCTION("set_voice_memo_type()"); + voice_buffering_data.rec_stop_reason = reason; +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_delete_file | ++--------------------------------------------------------------------+ + + + PURPOSE : Delete the file which held the Voice Memo + +*/ +SHORT mfw_aud_vm_delete_file(void) +{ +#ifdef FF_MMI_FILEMANAGER + UINT16 tmpFile[AUDIO_PATH_NAME_MAX_SIZE]; + char path[AUDIO_PATH_NAME_MAX_SIZE]; +#else + char tmpFile[AUDIO_PATH_NAME_MAX_SIZE]; +#endif + + TRACE_FUNCTION("mfw_aud_vm_delete_file"); + memset(tmpFile, 0x00, AUDIO_PATH_NAME_MAX_SIZE); +#ifdef FF_PCM_VM_VB + //x0pleela 06 Mar, 2006 ER:OMAPS00067709 + //deleting PCM Voice memo file + if( get_voice_memo_type() EQ PCM_VOICE_MEMO) +#ifdef FF_MMI_FILEMANAGER +{ + switch(FFS_flashData.PCM_voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, PCM_VM_FOLDER); + configure_vm_filename(tmpFile, path, PCM_VM_FILE_NAME, 0); +} +#else + configure_vm_filename(tmpFile, PCM_VM_FOLDER, PCM_VM_FILE_NAME, 0); +#endif + else + { + if (get_voice_memo_type() EQ AMR_VOICE_MEMO) +#endif + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, VM_FOLDER); + configure_vm_filename(tmpFile, path, VM_FILE_NAME, 0); + } +#else + configure_vm_filename(tmpFile, VM_FOLDER, VM_FILE_NAME, 0); +#endif + +#ifdef FF_PCM_VM_VB + } +#endif +#ifdef FF_MMI_FILEMANAGER + rfs_remove(tmpFile); +#else + ffs_remove(tmpFile); +#endif + + return MFW_AUD_VM_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_start_playback | ++--------------------------------------------------------------------+ + + + PURPOSE : Start playback of a previously recorded Voice Memo + +*/ +SHORT mfw_aud_vm_start_playback(void (*callback_fn)(void *)) +{ + T_AUDIO_RET audio_riv_retVal=AUDIO_ERROR; + T_AUDIO_VM_PLAY_PARAMETER mfw_vm_play_param; + + #ifdef FF_MMI_FILEMANAGER + char path[AUDIO_PATH_NAME_MAX_SIZE]; + T_RFS_STAT fstat; /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ + #endif + //x0pleela 01 Mar, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + T_AUDIO_VM_PCM_PLAY_PARAMETER mfw_vm_pcm_play_param; /* Defined new variable for pcm VM */ + T_AUDIO_VBUF_PCM_PLAY_PARAMETER mfw_vbuf_pcm_play_param; /* Defined new variable for voice buffering*/ + UBYTE vm_type; /*to store voice memo type */ +#endif + + TRACE_FUNCTION("mfw_aud_vm_start_playback"); +#ifndef FF_MMI_FILEMANAGER /* Mar 28, 2007 DR: OMAPS00122762 x0039928*/ +#ifdef FF_PCM_VM_VB + //x0pleela 23 Mar, 2006 ER:OMAPS00067709 + switch( get_voice_memo_type() ) + { + case AMR_VOICE_MEMO: +#endif /* FF_PCM_VM_VB */ + if (FFS_flashData.voice_memo_position EQ 0) + { + return MFW_AUD_VM_MEM_EMPTY; + } +#ifdef FF_PCM_VM_VB + break; + + case PCM_VOICE_MEMO: + if (FFS_flashData.pcm_voice_memo_position EQ 0) + { + return MFW_AUD_VM_MEM_EMPTY; + } + break; + default: + break; + } +#endif /* FF_PCM_VM_VB */ +#endif + +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +//Set up the PCM Voice Memo filename in FFS +#ifdef FF_PCM_VM_VB + //get the voice memo type + vm_type = get_voice_memo_type(); + if( vm_type EQ PCM_VOICE_MEMO ) + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.PCM_voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, PCM_VM_FOLDER); + configure_vm_filename(mfw_vm_pcm_play_param.memo_name, path, PCM_VM_FILE_NAME, 0); +/* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ +/* Fix: File empty is returned if the file desnot exist */ +#ifdef FF_MMI_FILEMANAGER +if(rfs_stat(mfw_vm_pcm_play_param.memo_name,&fstat) != RFS_EOK) +{ + return MFW_AUD_VM_MEM_EMPTY; +} +#endif + } +#else + configure_vm_filename(mfw_vm_pcm_play_param.memo_name, PCM_VM_FOLDER, PCM_VM_FILE_NAME, 0); +#endif + //x0pleela 09 Mar, 2006 ER:OMAPS00067709 + //Set up the Voice buffering filename in FFS + else if (vm_type EQ VOICE_BUFFERING ) + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.voicebuffer_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, VOICE_BUFF_FOLDER); + configure_vm_filename(mfw_vbuf_pcm_play_param.memo_name, path, VOICE_BUFF_FILE_NAME, 0); + } +#else + configure_vm_filename(mfw_vbuf_pcm_play_param.memo_name, VOICE_BUFF_FOLDER, VOICE_BUFF_FILE_NAME, 0); +#endif + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, VM_FOLDER); + configure_vm_filename(mfw_vm_play_param.memo_name, path, VM_FILE_NAME, 0); +/* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ +/* Fix: File empty is returned if the file desnot exist */ +#ifdef FF_MMI_FILEMANAGER +if(rfs_stat(mfw_vm_play_param.memo_name,&fstat) != RFS_EOK) +{ + return MFW_AUD_VM_MEM_EMPTY; +} +#endif + } +#else + //Set up the Voice Memo filename in FFS + configure_vm_filename(mfw_vm_play_param.memo_name, VM_FOLDER, VM_FILE_NAME, 0); +#endif +#ifdef FF_PCM_VM_VB + } +#endif + // Call Riviera function to start playback. +#ifndef WIN32 // only if not in Windows +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 + +configure_callback_fn(callback_fn); +#ifdef FF_PCM_VM_VB + //x0pleela 06 Mar, 2006 ER:OMAPS00067709 + if( vm_type EQ PCM_VOICE_MEMO ) + { + //update mfw_vm_pcm_play_param + mfw_vm_pcm_play_param.memo_duration = mfw_aud_vm_get_duration(); + mfw_vm_pcm_play_param.speaker_gain = PCM_VM_MICROPHONE_GAIN; + mfw_vm_pcm_play_param.network_gain= 0; + + //Start playing PCM Voice memo + audio_riv_retVal = audio_vm_pcm_play_start(&mfw_vm_pcm_play_param, + voice_memo_return_path); + } + else if ( vm_type EQ VOICE_BUFFERING ) + { + //update mfw_vbuf_pcm_play_param + mfw_vbuf_pcm_play_param.memo_duration = PCM_VOICE_MEMO_MAX_DURATION; + mfw_vbuf_pcm_play_param.speaker_gain = 0; + mfw_vbuf_pcm_play_param.network_gain= PCM_VM_NETWORK_GAIN; + + //x0pleela 06 Jul, 2006 DR: OMAPS00067709 + //Fix from AS team + vocoder_mute_ul(1); + + //Set up the Voice buffering filename in FFS + audio_riv_retVal = audio_voice_buffering_pcm_play_start (&mfw_vbuf_pcm_play_param, + voice_memo_return_path); + } + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif + audio_riv_retVal = audio_vm_play_start(&mfw_vm_play_param, + voice_memo_return_path); +#ifdef FF_PCM_VM_VB + } +#endif + // If the Riviera call failed + if (audio_riv_retVal != RV_OK) + return MFW_AUD_VM_RIVIERA_FAILED; +#endif + return MFW_AUD_VM_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_stop_playback | ++--------------------------------------------------------------------+ + + + PURPOSE : Stop playback of a previously recorded Voice Memo + +*/ +SHORT mfw_aud_vm_stop_playback(void (*callback_fn)(void *)) +{ + T_AUDIO_RET audio_riv_retVal=AUDIO_ERROR; +//x0pleela 06 Mar, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + UBYTE vm_type; //to store voice memo type +#endif + + TRACE_FUNCTION("mfw_aud_vm_stop_playback"); + configure_callback_fn(callback_fn); + +#ifndef WIN32 // only if not in Windows +#ifdef FF_PCM_VM_VB + //x0pleela 06 Mar, 2006 ER:OMAPS00067709 + //get the voice memo type + vm_type = get_voice_memo_type(); + + //x0pleela 27 Feb, 2006 ER:OMAPS00067709 + //Stop playing PCM Voice memo + if( vm_type EQ PCM_VOICE_MEMO ) + audio_riv_retVal = audio_vm_pcm_play_stop(voice_memo_return_path); + //Stop playing + else if ( vm_type EQ VOICE_BUFFERING ) + { + audio_riv_retVal = audio_voice_buffering_pcm_play_stop (voice_memo_return_path); + //x0pleela 06 Jul, 2006 DR: OMAPS00067709 + //Fix from AS team + vocoder_mute_ul(0); + } + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif + audio_riv_retVal = audio_vm_play_stop(voice_memo_return_path); +#ifdef FF_PCM_VM_VB + } +#endif + // If the Riviera call failed + if (audio_riv_retVal != RV_OK) + return MFW_AUD_VM_RIVIERA_FAILED; + +#endif + + return MFW_AUD_VM_OK; +} + + +#ifdef FF_MMI_FILEMANAGER +void path_init(UBYTE vmtype) +{ + T_RFS_RET ffsResult; + T_RFS_DIR f_dir, f_dir1; + char dir_path[FM_MAX_DIR_PATH_LENGTH]; + UINT16 dir_path_uc[FM_MAX_DIR_PATH_LENGTH]; + + memset(dir_path, 0, FM_MAX_DIR_PATH_LENGTH); + switch(vmtype) + { + case AMR_VOICE_MEMO: + switch(FFS_flashData.voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(dir_path, "/FFS/mmi"); + break; + + case SNAP_STG_NORMS: + strcpy(dir_path, "/NOR/mmi"); + break; + + case SNAP_STG_NAND: + strcpy(dir_path, "/NAND/mmi"); + break; + + case SNAP_STG_MMC: + strcpy(dir_path, "/MMC/mmi"); + break; + } + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + if(ffsResult == 0) + { + strcat(dir_path, "/vm"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + } + else if(ffsResult > 0) + { + strcat(dir_path, "/vm"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir1); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + else if (ffsResult > 0) + rfs_closedir(&f_dir1); + + rfs_closedir(&f_dir); + } + break; + + case PCM_VOICE_MEMO: + switch(FFS_flashData.PCM_voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(dir_path, "/FFS/mmi"); + break; + + case SNAP_STG_NORMS: + strcpy(dir_path, "/NOR/mmi"); + break; + + case SNAP_STG_NAND: + strcpy(dir_path, "/NAND/mmi"); + break; + + case SNAP_STG_MMC: + strcpy(dir_path, "/MMC/mmi"); + break; + } + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + if(ffsResult == 0) + { + strcat(dir_path, "/pcmvm"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir1); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + else if (ffsResult > 0) + rfs_closedir(&f_dir1); + + rfs_closedir(&f_dir); + } + + } + else if(ffsResult > 0) + { + strcat(dir_path, "/pcmvm"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir1); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + } + + break; + + case VOICE_BUFFERING: + switch(FFS_flashData.voicebuffer_storage) + { + case SNAP_STG_FFS: + strcpy(dir_path, "/FFS/mmi"); + break; + + case SNAP_STG_NORMS: + strcpy(dir_path, "/NOR/mmi"); + break; + + case SNAP_STG_NAND: + strcpy(dir_path, "/NAND/mmi"); + break; + + case SNAP_STG_MMC: + strcpy(dir_path, "/MMC/mmi"); + break; + } + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(ffsResult == 0) + { + strcat(dir_path, "/vb"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir1); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + } + } + else if(ffsResult > 0) + { + strcat(dir_path, "/vb"); + convert_u8_to_unicode(dir_path, dir_path_uc); + ffsResult = rfs_opendir(dir_path_uc,&f_dir1); + TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); + + if(RFS_ENOENT == ffsResult) + { + ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); + TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); + } + else if (ffsResult > 0) + rfs_closedir(&f_dir1); + + rfs_closedir(&f_dir); + } + break; + } +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_start_record | ++--------------------------------------------------------------------+ + + + PURPOSE : Configure Riviera and start recording a Voice Memo + +*/ +SHORT mfw_aud_vm_start_record(UBYTE max_duration, void (*callback_fn)(void *)) +{ + T_AUDIO_RET audio_riv_retVal=AUDIO_ERROR; + T_AUDIO_VM_RECORD_PARAMETER mfw_vm_record_param; + T_AUDIO_TONES_PARAMETER mfw_vm_tones_param; + + #ifdef FF_MMI_FILEMANAGER + char path[FM_MAX_DIR_PATH_LENGTH]; + #else + char * mmiDir = "/mmi"; // Aug 25, 2004 REF: CRR 20655 xnkulkar + #endif + +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +//defining new variable for PCM recording +#ifdef FF_PCM_VM_VB + T_AUDIO_VM_PCM_RECORD_PARAMETER mfw_vm_pcm_record_param; + T_AUDIO_VBUF_PCM_RECORD_PARAMETER mfw_vbuf_pcm_record_param; + UBYTE vm_type; //to store voice memo type +#endif + TRACE_FUNCTION("mfw_aud_vm_start_record"); + configure_callback_fn(callback_fn); + +#ifdef FF_MMI_FILEMANAGER + memset(path, 0, FM_MAX_DIR_PATH_LENGTH); +#endif +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + //x0pleela 06 Mar, 2006 ER:OMAPS00067709 + //get the voice memo type + vm_type = get_voice_memo_type(); + + // We now create the "mmi" folder and then proceed with recording. + #ifdef FF_MMI_FILEMANAGER + path_init(vm_type); + #else + flash_makedir(mmiDir); + #endif + + if( vm_type EQ PCM_VOICE_MEMO ) + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.PCM_voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + strcat(path, PCM_VM_FOLDER); + configure_vm_filename(mfw_vm_pcm_record_param.memo_name, path, PCM_VM_FILE_NAME, 0); + } +#else + //Set up, and create, the PCM Voice Memo filename in FFS + configure_vm_filename(mfw_vm_pcm_record_param.memo_name, PCM_VM_FOLDER, PCM_VM_FILE_NAME, 0); +#endif + //x0pleela 09 Mar, 2006 ER:OMAPS00067709 + else if( vm_type EQ VOICE_BUFFERING) + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.voicebuffer_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, VOICE_BUFF_FOLDER); + configure_vm_filename(mfw_vbuf_pcm_record_param.memo_name, path, VOICE_BUFF_FILE_NAME, 0); + } +#else + //Set up, and create, the Voice Buffering filename in FFS + configure_vm_filename(mfw_vbuf_pcm_record_param.memo_name, VOICE_BUFF_FOLDER, VOICE_BUFF_FILE_NAME, 0); +#endif + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif /* FF_PCM_VM_VB */ + #ifdef FF_MMI_FILEMANAGER + { + switch(FFS_flashData.voicememo_storage) + { + case SNAP_STG_FFS: + strcpy(path, "/FFS"); + break; + + case SNAP_STG_NORMS: + strcpy(path, "/NOR"); + break; + + case SNAP_STG_NAND: + strcpy(path, "/NAND"); + break; + + case SNAP_STG_MMC: + strcpy(path, "/MMC"); + break; + } + + strcat(path, VM_FOLDER); + configure_vm_filename(mfw_vm_record_param.memo_name, path, VM_FILE_NAME, 0); + } +#else + //Set up, and create, the Voice Memo filename in FFS + configure_vm_filename(mfw_vm_record_param.memo_name, VM_FOLDER, VM_FILE_NAME, 0); +#endif +#ifdef FF_PCM_VM_VB + } +#endif /* FF_PCM_VM_VB */ + //Aug 25, 2004 REF: CRR 20655 xnkulkar + + +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + if( vm_type EQ PCM_VOICE_MEMO ) + //create PCM Voice memo file + #ifdef FF_MMI_FILEMANAGER + mfw_aud_vm_create_file(path, PCM_VM_FILE_NAME, 0); + #else + mfw_aud_vm_create_file(PCM_VM_FOLDER, PCM_VM_FILE_NAME, 0); + #endif + //x0pleela 09 Mar, 2006 ER:OMAPS00067709 + else if( vm_type EQ VOICE_BUFFERING ) + //create Voice Buffering file + #ifdef FF_MMI_FILEMANAGER + mfw_aud_vm_create_file(path, VOICE_BUFF_FILE_NAME, 0); + #else + mfw_aud_vm_create_file(VOICE_BUFF_FOLDER, VOICE_BUFF_FILE_NAME, 0); + #endif + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif /* FF_PCM_VM_VB */ + #ifdef FF_MMI_FILEMANAGER + mfw_aud_vm_create_file(path, VM_FILE_NAME, 0); + #else + mfw_aud_vm_create_file(VM_FOLDER, VM_FILE_NAME, 0); + #endif +#ifdef FF_PCM_VM_VB + } +#endif /* FF_PCM_VM_VB */ + +#ifndef WIN32 // only if not in Windows +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +//updating fields of structure T_AUDIO_VM_PCM_RECORD_PARAMETER for PCM VM recording +#ifdef FF_PCM_VM_VB + if( vm_type EQ PCM_VOICE_MEMO ) + { + mfw_vm_pcm_record_param.memo_duration = (UINT32)max_duration; + mfw_vm_pcm_record_param.microphone_gain = PCM_VM_MICROPHONE_GAIN; + mfw_vm_pcm_record_param.network_gain = 0; + + audio_riv_retVal = audio_vm_pcm_record_start(&mfw_vm_pcm_record_param, + voice_memo_return_path); + } + else if( vm_type EQ VOICE_BUFFERING ) + { + mfw_vbuf_pcm_record_param.memo_duration = (UINT32)max_duration; + mfw_vbuf_pcm_record_param.microphone_gain = PCM_VM_MICROPHONE_GAIN; + mfw_vbuf_pcm_record_param.network_gain = 0; + + audio_riv_retVal = audio_voice_buffering_pcm_record_start( &mfw_vbuf_pcm_record_param, + voice_memo_return_path); + } + else + { + if (vm_type EQ AMR_VOICE_MEMO ) + { +#endif /* FF_PCM_VM_VB */ + + // Setup the Voice Memo Tones + mfw_vm_record_param.memo_duration = (UINT32)max_duration; + mfw_vm_record_param.compression_mode = FALSE; // No Compression + mfw_vm_record_param.microphone_gain = VM_MICROPHONE_GAIN; + mfw_vm_record_param.network_gain = VM_NETWORK_GAIN; + + mfw_vm_tones_param.tones[0].start_tone = 0; + mfw_vm_tones_param.tones[0].stop_tone = VM_TONE_DURATION; + mfw_vm_tones_param.tones[0].frequency_tone = 520; // Tone 1 Frequecny in Hz + mfw_vm_tones_param.tones[0].amplitude_tone = VM_TONE_AMPLITUDE; + + mfw_vm_tones_param.tones[1].start_tone = mfw_vm_tones_param.tones[0].stop_tone + VM_TONE_INTERVAL; + mfw_vm_tones_param.tones[1].stop_tone = mfw_vm_tones_param.tones[1].start_tone + VM_TONE_DURATION; + mfw_vm_tones_param.tones[1].frequency_tone = 643; // Tone 2 Frequecny in Hz + mfw_vm_tones_param.tones[1].amplitude_tone = VM_TONE_AMPLITUDE; + + mfw_vm_tones_param.tones[2].start_tone = mfw_vm_tones_param.tones[1].stop_tone + VM_TONE_INTERVAL; + mfw_vm_tones_param.tones[2].stop_tone = mfw_vm_tones_param.tones[2].start_tone + VM_TONE_DURATION; + mfw_vm_tones_param.tones[2].frequency_tone = 775; // Tone 3 Frequecny in Hz + mfw_vm_tones_param.tones[2].amplitude_tone = VM_TONE_AMPLITUDE; + + mfw_vm_tones_param.frame_duration = mfw_vm_tones_param.tones[2].stop_tone * 2; + mfw_vm_tones_param.sequence_duration = mfw_vm_tones_param.frame_duration * 2; + mfw_vm_tones_param.period_duration = mfw_vm_tones_param.sequence_duration; + mfw_vm_tones_param.repetition = TONE_INFINITE; + // Call Riviera function to start recording. + // If the Riviera call failed + audio_riv_retVal = audio_vm_record_start(&mfw_vm_record_param, + &mfw_vm_tones_param, + voice_memo_return_path); +#ifdef FF_PCM_VM_VB + } + } +#endif /* FF_PCM_VM_VB */ + if (audio_riv_retVal != RV_OK) + return MFW_AUD_VM_RIVIERA_FAILED; + +#endif + + return MFW_AUD_VM_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_stop_record | ++--------------------------------------------------------------------+ + + + PURPOSE : Stop recording a Voice Memo + +*/ +SHORT mfw_aud_vm_stop_record(void (*callback_fn)(void *)) +{ + T_AUDIO_RET audio_riv_retVal=AUDIO_ERROR; + +//x0pleela 06 Mar, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + UBYTE vm_type; //to store voice memo type +#endif + TRACE_FUNCTION("mfw_aud_vm_stop_record"); + configure_callback_fn(callback_fn); + +#ifndef WIN32 // only if not in Windows +//x0pleela 27 Feb, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + //x0pleela 06 Mar, 2006 ER:OMAPS00067709 + //get the voice memo type + vm_type = get_voice_memo_type(); + + if( vm_type EQ PCM_VOICE_MEMO ) + audio_riv_retVal = audio_vm_pcm_record_stop (voice_memo_return_path); + //x0pleela 09 Mar, 2006 ER:OMAPS00067709 + else if( vm_type EQ VOICE_BUFFERING) + audio_riv_retVal = audio_voice_buffering_pcm_record_stop (voice_memo_return_path); + else + { + if (vm_type EQ AMR_VOICE_MEMO) +#endif + audio_riv_retVal = audio_vm_record_stop(voice_memo_return_path); +#ifdef FF_PCM_VM_VB + } +#endif + // If the Riviera call failed + if (audio_riv_retVal != RV_OK) + return MFW_AUD_VM_RIVIERA_FAILED; +#endif + + return MFW_AUD_VM_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_get_duration | ++--------------------------------------------------------------------+ + + + PURPOSE : Get the duration of the previously recorded Voice Memo + +*/ +UBYTE mfw_aud_vm_get_duration(void) +{ + TRACE_FUNCTION("mfw_aud_vm_get_duration"); +//x0pleela 06 Mar, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + //x0pleela 27 Feb, 2006 ER:OMAPS00067709 + if( get_voice_memo_type() EQ PCM_VOICE_MEMO ) + //get PCM Voice memo recorded duration + #ifdef FF_MMI_FILEMANAGER + /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ + return FFS_flashData.pcm_voice_memo_position[FFS_flashData.PCM_voicememo_storage]; + #else + return FFS_flashData.pcm_voice_memo_position; + #endif + else + { + if (get_voice_memo_type() EQ AMR_VOICE_MEMO) +#endif + #ifdef FF_MMI_FILEMANAGER + /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ + return FFS_flashData.voice_memo_position[FFS_flashData.voicememo_storage]; + #else + return FFS_flashData.voice_memo_position; + #endif +#ifdef FF_PCM_VM_VB + } + return 0; +#endif +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_get_duration | ++--------------------------------------------------------------------+ + + + PURPOSE : Set the duration of the previously recorded Voice Memo + +*/ +void mfw_aud_vm_set_duration(UBYTE duration) +{ + TRACE_FUNCTION("mfw_aud_vm_set_duration"); +//x0pleela 06 Mar, 2006 ER:OMAPS00067709 +#ifdef FF_PCM_VM_VB + if( get_voice_memo_type() EQ PCM_VOICE_MEMO ) + //Set PCM Voice memo recorded duration + #ifdef FF_MMI_FILEMANAGER + /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ + FFS_flashData.pcm_voice_memo_position[FFS_flashData.PCM_voicememo_storage] = duration; + #else + FFS_flashData.pcm_voice_memo_position = duration; + #endif + else + { + if ( get_voice_memo_type() EQ AMR_VOICE_MEMO) +#endif + #ifdef FF_MMI_FILEMANAGER + /* Mar 28, 2007 DR: OMAPS00122762 x0039928 */ + FFS_flashData.voice_memo_position[FFS_flashData.voicememo_storage] = duration; + #else + FFS_flashData.voice_memo_position = duration; + #endif +#ifdef FF_PCM_VM_VB + } +#endif + + flash_write(); + return; +} + +#if 0 /* FreeCalypso */ + void rfs_data_write(const char* dir_name, const char* file_name, void* data_pointer, int data_size) +{ + T_RFS_FD fd; + char file[FM_MAX_DIR_PATH_LENGTH]; + UINT16 file_uc[FM_MAX_DIR_PATH_LENGTH]; +// Need to check if already flash is formatted + + sprintf(file, "%s/%s", dir_name, file_name); + convert_u8_to_unicode(file, file_uc); + fd = rfs_open(file_uc, + RFS_O_CREAT | RFS_O_WRONLY | RFS_O_TRUNC | RFS_O_APPEND, 0x777); + rfs_write(fd, data_pointer, data_size); + + rfs_close(fd); + return; +} +#endif + +/* +** Local Function Definitions +*/ + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: mfw_aud_vm_create_file | ++--------------------------------------------------------------------+ + + + PURPOSE : Create the FFS file required for the Riviera Voice Memo + +*/ +static void mfw_aud_vm_create_file(const char *folder, const char *fname, UBYTE index) +{ + +#ifdef FF_MMI_FILEMANAGER + UINT16 dummy = 0x00; + rfs_data_write(folder,fname, &dummy,sizeof(dummy)); +#else + UBYTE dummy = 0x00; + flash_data_write(folder, fname, &dummy, sizeof(dummy)); +#endif + TRACE_FUNCTION("mfw_aud_vm_create_file"); + return; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: configure_callback_fn | ++--------------------------------------------------------------------+ + + + PURPOSE : Configure the Riviera Return PAth + +*/ +static void configure_callback_fn(void (*callback_fn)(void *)) +{ + TRACE_FUNCTION("configure_callback_fn"); + voice_memo_return_path.addr_id = 0; + voice_memo_return_path.callback_func = callback_fn; + + return; +} + + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | +| STATE : code ROUTINE: configure_vm_filename | ++--------------------------------------------------------------------+ + + + PURPOSE : Create the Voice memo filename from the incoming parameters + +*/ +#ifdef FF_MMI_FILEMANAGER +static void configure_vm_filename(UINT16 *vm_filename, const char *folder, const char *fname, UBYTE index) +#else +static void configure_vm_filename(char *vm_filename, const char *folder, const char *fname, UBYTE index) +#endif +{ +#ifdef FF_MMI_FILEMANAGER + char vm_filename_ascii[FM_MAX_DIR_PATH_LENGTH]; +// convert_unicode_to_u8(vm_filename, vm_filename_ascii); +// memset(vm_filename_ascii, 0x00, AUDIO_PATH_NAME_MAX_SIZE); + strcpy(vm_filename_ascii, folder); + strcat(vm_filename_ascii, "/"); + strcat(vm_filename_ascii, fname); + convert_u8_to_unicode(vm_filename_ascii, vm_filename); +#else + TRACE_FUNCTION("configure_vm_filename"); + memset(vm_filename, 0x00, AUDIO_PATH_NAME_MAX_SIZE); + strcpy(vm_filename, folder); + strcat(vm_filename, "/"); + strcat(vm_filename, fname); +#endif + return; +} +#endif + +// Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar +// Commented as we are no more using 'enable_tch_vocoder()' from MFW +/* +#ifndef _SIMULATION_ +void enable_tch_vocoder(BOOL enabled); +#endif +*/ + +/********************************************************************** +** +** MFW Riviera Vocoder Interface functions +** +**********************************************************************/ + +void mfw_aud_l1_enable_vocoder ( void ) +{ +#ifndef _SIMULATION_ +// Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar +// Call 'hl_drv_enable_vocoder()' instead of 'enable_tch_vocoder(TRUE)' +// enable_tch_vocoder(TRUE); + +// July 03, 2006 REF:DR OMAPS00083150 x0047075 +//Fix:Use hl_drv_set_vocoder_state(TRUE) function instead of hl_drv_enable_vocoder() to enable the vocoder + hl_drv_set_vocoder_state(TRUE); +#endif + return; +} + +void mfw_aud_l1_disable_vocoder ( void ) +{ +#ifndef _SIMULATION_ +// Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar +// Call 'hl_drv_disable_vocoder()' instead of 'enable_tch_vocoder(FALSE)' +// enable_tch_vocoder(FALSE); + +//July 03, 2006 REF:DR OMAPS00083150 x0047075 +//Fix:Use hl_drv_set_vocoder_state(FALSE) instead of hl_drv_disable_vocoder() to disable the vocoder + hl_drv_set_vocoder_state(FALSE); +#endif + return; +} + +/****************************************************************/ +/* NEPTUNE DEFINITIONS START HERE */ +/* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */ +#else /* NEPTUNE_BOARD */ +#include "typedefs.h" +#include "mfw_aud.h" + +SHORT mfw_aud_vm_delete_file(void) +{ + return MFW_AUD_VM_OK; +} + +SHORT mfw_aud_vm_start_playback(void (*callback_fn)(void *)) +{ + return MFW_AUD_VM_OK; +} + +SHORT mfw_aud_vm_stop_playback(void (*callback_fn)(void *)) +{ + return MFW_AUD_VM_OK; +} + +SHORT mfw_aud_vm_start_record(UBYTE max_duration, void (*callback_fn)(void *)) +{ + return MFW_AUD_VM_OK; +} + +SHORT mfw_aud_vm_stop_record(void (*callback_fn)(void *)) +{ + return MFW_AUD_VM_OK; +} + +UBYTE mfw_aud_vm_get_duration(void) +{ + return 0; +} + +void mfw_aud_vm_set_duration(UBYTE duration) +{ + return; +} + +/* +** Layer1 Audio interface functions +*/ +void mfw_aud_l1_enable_vocoder ( void ) +{ +} + +void mfw_aud_l1_disable_vocoder ( void ) +{ +} + +#endif /* NEPTUNE_BOARD*/ +/* END ADD: Req ID: : Sumit : 14-Mar-05 */ +