📄 aud_vm.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*******************************************************************************
* Filename:
* ---------
* aud_vm.c
*
* Project:
* --------
* Maui
*
* Description:
* ------------
* This file includes voice memo related functions of audio manager task.
*
* Author:
* -------
* -------
*
*==============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
/******************************************************************
* MODULE
* AUD_VM
* DESCRIPTION
* This module defines the voice memo related function for Audio Manager.
*
******************************************************************/
#ifndef MED_NOT_PRESENT
/*==== INCLUDES ========*/
#include "med_global.h"
#if defined(VM_SUPPORT) && defined(VM_LOG)
#include "kal_release.h"
#include "kal_trace.h"
#include "stack_common.h"
#include "stack_msgs.h"
#include "app_ltlcom.h" /* Task message communiction */
#include "syscomp_config.h"
#include "task_config.h" /* Task creation */
#include "stacklib.h" /* Basic type for dll, evshed, stacktimer */
#include "event_shed.h" /* Event scheduler */
#include "stack_timer.h" /* Stack timer */
/* global includes */
#include "l1audio.h"
#include "device.h"
#include "resource_audio.h"
/* for FAT FS */
#include "fat_fs.h"
#include "rtc_sw.h"
#include "nvram_enums.h"
#include "nvram_struct.h"
#include "nvram_user_defs.h"
#include "nvram_data_items.h"
#include "custom_nvram_editor_data_item.h"
/* local includes */
#include "med_global.h"
#include "aud_defs.h"
#include "med_struct.h"
#include "med_api.h"
#include "med_context.h"
#include "aud_main.h"
#include "med_main.h"
#ifdef __AUD_TRACE_ON__
#include "med_trc.h"
#endif
#define RANDOM_POS (8)
#define MAX_VM_DIR_LEN 20
#define FULL_NAME_LEN (MAX_VM_FILE_NAME+MAX_VM_DIR_LEN)
kal_wchar vm_file_name[FULL_NAME_LEN];
kal_wchar vm_file_string[MAX_NUM_OF_VM_FILE][MAX_VM_FILE_NAME];
#ifdef VM_DIR
#undef VM_DIR
#endif
#define VM_PATH (L"Audio")
kal_wchar VM_DIR[MAX_VM_DIR_LEN];
kal_uint8 file_count;
/*****************************************************************************
* FUNCTION
* aud_vm_init
* DESCRIPTION
* This function is used to init aud_vm module
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
kal_bool aud_vm_init(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint16 i;
kal_int16 drv_letter;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
aud_context_p->vm_rec_dir = AUD_VM_DIR_UL;
#ifdef VOICE_RECOGNITION_TEST
aud_context_p->vm_sp_type = MEDIA_FORMAT_PCM_8K; /* MEDIA_FORMAT_GSM_EFR; */
#else
aud_context_p->vm_sp_type = MEDIA_FORMAT_GSM_EFR;
#endif
aud_context_p->current_file_name[0] = 0;
aud_context_p->current_file_handle = -1;
aud_context_p->disc_full = KAL_FALSE;
aud_context_p->delete_all = KAL_FALSE;
aud_context_p->play_mode = AUD_MEDIA_PLAY_MODE_NONE;
aud_context_p->vm_info.num_of_vm = 0;
aud_context_p->vm_info.free_space = MAX_VM_SIZE;
aud_context_p->offset = 0;
for (i = 0; i < MAX_NUM_OF_VM_FILE; i++)
{
aud_context_p->vm_info.file_name_list[i] = vm_file_string[i];
}
drv_letter = FS_GetDrive(FS_DRIVE_V_NORMAL, 2, FS_DRIVE_I_SYSTEM | FS_DRIVE_V_NORMAL);
kal_wsprintf((kal_wchar*) VM_DIR, "%c:\\%w", drv_letter, VM_PATH);
kal_wsprintf(vm_file_name, "%w\\*%s", VM_DIR, ".vm");
#ifdef VM_LOG
aud_context_p->vm_logging = KAL_FALSE;
aud_context_p->vm_id = 0;
#endif /* VM_LOG */
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* aud_vm_scan_file
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
kal_bool aud_vm_scan_file(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
FS_HANDLE vm_file_handle;
kal_int32 result;
FS_DOSDirEntry de;
kal_wchar *file_name_p;
kal_uint8 i;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __NVRAM_IN_USB_MS__
if (stack_query_boot_mode() == USBMS_BOOT)
{
return KAL_FALSE;
}
#endif /* __NVRAM_IN_USB_MS__ */
/* if vm dir exists, open it ,otherwise create it */
vm_file_handle = FS_Open(VM_DIR, FS_OPEN_DIR | FS_READ_ONLY);
if (vm_file_handle < 0)
{
result = FS_CreateDir(VM_DIR);
/* ASSERT(result >= 0) */
}
else
{
FS_Close(vm_file_handle);
}
for (i = 0; i < MAX_NUM_OF_VM_FILE; i++)
{
aud_context_p->vm_info.file_name_list[i] = vm_file_string[i];
}
/* reset num of vm */
aud_context_p->vm_info.num_of_vm = 0;
file_name_p = aud_context_p->vm_info.file_name_list[0];
vm_file_handle = FS_FindFirst(vm_file_name, 0, 0, &de, file_name_p, MAX_VM_FILE_NAME * ENCODE_BYTE);
aud_context_p->vm_info.free_space = MAX_VM_SIZE;
if (vm_file_handle >= 0)
{
aud_context_p->vm_info.num_of_vm++;
file_name_p = aud_context_p->vm_info.file_name_list[aud_context_p->vm_info.num_of_vm];
/* count the free space */
if (aud_context_p->vm_info.free_space >= de.FileSize)
{
aud_context_p->vm_info.free_space -= de.FileSize;
}
else
{
aud_context_p->vm_info.free_space = 0;
}
while ((result = FS_FindNext(vm_file_handle, &de, file_name_p, MAX_VM_FILE_NAME * ENCODE_BYTE)) == FS_NO_ERROR)
{
if (de.Attributes != FS_ATTR_DIR)
{
aud_context_p->vm_info.num_of_vm++;
/* count the free space */
if (aud_context_p->vm_info.free_space >= de.FileSize)
{
aud_context_p->vm_info.free_space -= de.FileSize;
}
else
{
aud_context_p->vm_info.free_space = 0;
}
if (aud_context_p->vm_info.num_of_vm >= MAX_NUM_OF_VM_FILE)
{
break;
}
/* set the file name pointer for next loop */
file_name_p = aud_context_p->vm_info.file_name_list[aud_context_p->vm_info.num_of_vm];
}
}
FS_FindClose(vm_file_handle);
if (aud_context_p->vm_info.free_space > 0)
/* set disc full to TRUE */
{
aud_context_p->disc_full = KAL_FALSE;
}
else
/* set disc full to TRUE */
{
aud_context_p->disc_full = KAL_TRUE;
}
}
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* aud_vm_startup
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
kal_bool aud_vm_startup(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return aud_vm_scan_file();
}
/*****************************************************************************
* FUNCTION
* aud_vm_set_output_volume
* DESCRIPTION
*
* PARAMETERS
* volume1 [IN]
* digital_gain_index [IN]
* RETURNS
* void
*****************************************************************************/
void aud_vm_set_output_volume(kal_uint8 volume1, kal_int8 digital_gain_index)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
AUD_TRACE_VOLUME(AUD_VOLUME_MEDIA, volume1, digital_gain_index) Media_SetOutputVolume(volume1, digital_gain_index);
}
/*****************************************************************************
* FUNCTION
* aud_vm_set_output_device
* DESCRIPTION
*
* PARAMETERS
* device [IN]
* RETURNS
* void
*****************************************************************************/
void aud_vm_set_output_device(kal_uint8 device)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
AUD_TRACE_PATH(AUD_TYPE_VM, device, -1) Media_SetOutputDevice(device);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -