LVCS_Control.c revision 2c8e5cab3faa6d360e222b7a6c40a80083d021ac
12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project 42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License. 72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at 82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software 122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and 152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License. 162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************ 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent $Author: nxp007753 $ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent $Revision: 1246 $ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent $Date: 2010-07-16 11:07:10 +0200 (Fri, 16 Jul 2010) $ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent*************************************************************************************/ 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Includes */ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS.h" 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Private.h" 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Tables.h" 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_GetParameters */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Request the Concert Sound parameters. The current parameter set is returned */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* via the parameter pointer. */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to an empty parameter structure */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Always succeeds */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVCS_Process function */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t hInstance, 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pParams = pInstance->Params; 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_Control */ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Sets or changes the Concert Sound parameters. */ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to a parameter structure */ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Succeeded */ 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVCS_Process function */ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t hInstance, 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Offset; 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en err; 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Modes_en OperatingModeSave = pInstance->Params.OperatingMode; 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->SampleRate != pInstance->Params.SampleRate) 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->MSBypassMixer.MixerStream[0],LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->MSBypassMixer.MixerStream[1],LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.SamplingRate = LVCS_SampleRateTable[pParams->SampleRate]; 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the reverb level has changed 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->Params.ReverbLevel != pParams->ReverbLevel) 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance,pParams); 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the sample rate or speaker has changed then perform a full re-initialisation 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.SampleRate != pParams->SampleRate) || 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SpeakerType != pParams->SpeakerType)) 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Output device 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->OutputDevice = LVCS_HEADPHONE; 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_SEnhancerInit(hInstance, 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance, 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_EqualiserInit(hInstance, 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the effect level or source format has changed 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if ((pInstance->Params.EffectLevel != pParams->EffectLevel) || 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SourceFormat != pParams->SourceFormat)) 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(err != LVCS_SUCCESS) 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return err; 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the instance parameters 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Stay on the current operating mode until the transition is done */ 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->OperatingMode != OperatingModeSave) || 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->bInOperatingModeTransition == LVM_TRUE)){ 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the reverb delay timeout */ 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE){ 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_FALSE; 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.TimeInMs = (LVM_INT16)(((pInstance->Reverberation.DelaySize << 2)/pInstance->TimerParams.SamplingRate) + 1); 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Init ( &pInstance->TimerInstance, 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->TimerParams); 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Change transition bypass mixer settings if needed depending on transition type */ 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->OperatingMode != LVCS_OFF){ 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Current1; 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Current2; 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current1 = LVC_Mixer_GetCurrent(&pInstance->MSBypassMixer.MixerStream[0]); 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current2 = LVC_Mixer_GetCurrent(&pInstance->MSBypassMixer.MixerStream[1]); 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE) 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current1 = 0x00000000; 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current2 = LVM_MAXINT_16; 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MSBypassMixer.MixerStream[0].CallbackSet = 1; 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MSBypassMixer.MixerStream[1].CallbackSet = 1; 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->MSBypassMixer.MixerStream[0],LVM_MAXINT_16,Current1); 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->MSBypassMixer.MixerStream[1],0,Current2); 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Current1; 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Current2; 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current1 = LVC_Mixer_GetCurrent(&pInstance->MSBypassMixer.MixerStream[0]); 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current2 = LVC_Mixer_GetCurrent(&pInstance->MSBypassMixer.MixerStream[1]); 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE) 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current1 = LVM_MAXINT_16; 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current2 = 0x00000000; 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MSBypassMixer.MixerStream[0].CallbackSet = 1; 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MSBypassMixer.MixerStream[1].CallbackSet = 1; 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = OperatingModeSave; 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->MSBypassMixer.MixerStream[0],0x00000000,Current1); 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->MSBypassMixer.MixerStream[1],LVM_MAXINT_16,Current2); 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTimeConstant(&pInstance->MSBypassMixer.MixerStream[0],LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTimeConstant(&pInstance->MSBypassMixer.MixerStream[1],LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set transition flag */ 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bInOperatingModeTransition = LVM_TRUE; 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_TimerCallBack */ 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* CallBack function of the Timer. */ 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVCS_TimerCallBack (void* hInstance, void* pCallBackParams, LVM_INT32 CallbackParam) 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance = (LVCS_Instance_t *)hInstance; 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Avoid warnings because pCallBackParams and CallbackParam are not used*/ 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pCallBackParams != LVM_NULL) || (CallbackParam != 0)){ 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pCallBackParams = hInstance; 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CallbackParam = 0; 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_TRUE; 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 274