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/* Includes */ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS.h" 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Private.h" 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Tables.h" 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_GetParameters */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Request the Concert Sound parameters. The current parameter set is returned */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* via the parameter pointer. */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to an empty parameter structure */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Always succeeds */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVCS_Process function */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t hInstance, 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pParams = pInstance->Params; 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_Control */ 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Sets or changes the Concert Sound parameters. */ 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to a parameter structure */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Succeeded */ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVCS_Process function */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t hInstance, 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Offset; 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en err; 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Modes_en OperatingModeSave = pInstance->Params.OperatingMode; 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->SampleRate != pInstance->Params.SampleRate) 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.SamplingRate = LVCS_SampleRateTable[pParams->SampleRate]; 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the reverb level has changed 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->Params.ReverbLevel != pParams->ReverbLevel) 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance,pParams); 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the sample rate or speaker has changed then perform a full re-initialisation 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.SampleRate != pParams->SampleRate) || 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SpeakerType != pParams->SpeakerType)) 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Output device 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->OutputDevice = LVCS_HEADPHONE; 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 122d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent pInstance->CompressGain = pInstance->VolCorrect.CompMin; 123d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent 12409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[0],0,0); 12509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 12609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 12709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent { 12809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVM_UINT32 Gain; 12909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent const Gain_t *pOutputGainTable = (Gain_t*)&LVCS_OutputGainTable[0]; 13009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)(pOutputGainTable[Offset].Loss * LVM_MAXINT_16); 13109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)pOutputGainTable[Offset].UnprocLoss * (Gain >> 15); 13209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain=Gain>>15; 13309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent /* 13409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent * Apply the gain correction and shift, note the result is in Q3.13 format 13509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent */ 13609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (Gain * pInstance->VolCorrect.GainMin) >>12; 13709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 13809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[1],0,Gain); 13909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[0], 14009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 14109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[1], 14209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 14309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 14409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent } 14509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 14609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_SEnhancerInit(hInstance, 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance, 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_EqualiserInit(hInstance, 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the effect level or source format has changed 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if ((pInstance->Params.EffectLevel != pParams->EffectLevel) || 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SourceFormat != pParams->SourceFormat)) 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(err != LVCS_SUCCESS) 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return err; 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the instance parameters 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Stay on the current operating mode until the transition is done */ 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->OperatingMode != OperatingModeSave) || 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->bInOperatingModeTransition == LVM_TRUE)){ 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the reverb delay timeout */ 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE){ 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_FALSE; 2052d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent pInstance->TimerParams.TimeInMs = 2062d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent (LVM_INT16)(((pInstance->Reverberation.DelaySize << 2) 2072d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent /pInstance->TimerParams.SamplingRate) + 1); 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Init ( &pInstance->TimerInstance, 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->TimerParams); 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Change transition bypass mixer settings if needed depending on transition type */ 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->OperatingMode != LVCS_OFF){ 21809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=LVM_MAXINT_16; 21909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=0; 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = OperatingModeSave; 22409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=LVM_MAXINT_16; 22509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=0; 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set transition flag */ 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bInOperatingModeTransition = LVM_TRUE; 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_TimerCallBack */ 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* CallBack function of the Timer. */ 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVCS_TimerCallBack (void* hInstance, void* pCallBackParams, LVM_INT32 CallbackParam) 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance = (LVCS_Instance_t *)hInstance; 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Avoid warnings because pCallBackParams and CallbackParam are not used*/ 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pCallBackParams != LVM_NULL) || (CallbackParam != 0)){ 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pCallBackParams = hInstance; 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CallbackParam = 0; 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_TRUE; 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 261