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_Memory */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used for memory allocation and free. It can be called in */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* two ways: */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = NULL Returns the memory requirements */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = Instance handle Returns the memory requirements and */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* allocated base addresses for the instance */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When this function is called for memory allocation (hInstance=NULL) it is */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* passed the default capabilities. */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When called for memory allocation the memory base address pointers are NULL on */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* return. */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When the function is called for free (hInstance = Instance Handle) the */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* capabilities are ignored and the memory table returns the allocated memory and */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* base addresses used during initialisation. */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance Handle */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to an empty memory definition table */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pCapabilities Pointer to the default capabilites */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Succeeded */ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVCS_Process function */ 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Memory(LVCS_Handle_t hInstance, 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_MemTab_t *pMemoryTable, 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Capabilities_t *pCapabilities) 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT32 ScratchSize; 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance = (LVCS_Instance_t *)hInstance; 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Fill in the memory table 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (hInstance == LVM_NULL) 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Instance memory 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_SLOW_DATA].Size = (LVM_UINT32)sizeof(LVCS_Instance_t); 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_SLOW_DATA].Type = LVCS_PERSISTENT; 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Data memory 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_DATA].Size = (LVM_UINT32)sizeof(LVCS_Data_t); 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_DATA].Type = LVCS_DATA; 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Coefficient memory 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_COEF].Size = (LVM_UINT32)sizeof(LVCS_Coefficient_t); 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_COEF].Type = LVCS_COEFFICIENT; 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Scratch memory 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ScratchSize = (LVM_UINT32)(LVCS_SCRATCHBUFFERS*sizeof(LVM_INT16)*pCapabilities->MaxBlockSize); /* Inplace processing */ 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_TEMPORARY_FAST].Size = ScratchSize; 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_TEMPORARY_FAST].Type = LVCS_SCRATCH; 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVCS_MEMREGION_TEMPORARY_FAST].pBaseAddress = LVM_NULL; 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Read back memory allocation table */ 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pMemoryTable = pInstance->MemoryTable; 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_Init */ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Create and initialisation function for the Concert Sound module */ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function can be used to create an algorithm instance by calling with */ 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance set to LVM_NULL. In this case the algorithm returns the new instance */ 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* handle. */ 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function can be used to force a full re-initialisation of the algorithm */ 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* by calling with hInstance = Instance Handle. In this case the memory table */ 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* should be correct for the instance, this can be ensured by calling the function */ 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Memory before calling this function. */ 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to the memory definition table */ 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pCapabilities Pointer to the capabilities structure */ 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Initialisation succeeded */ 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. The instance handle is the pointer to the base address of the first memory */ 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* region. */ 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 2. This function must not be interrupted by the LVCS_Process function */ 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 3. This function must be called with the same capabilities as used for the */ 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* call to the memory function */ 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Init(LVCS_Handle_t *phInstance, 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_MemTab_t *pMemoryTable, 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Capabilities_t *pCapabilities) 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance; 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the instance handle if not already initialised 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*phInstance == LVM_NULL) 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *phInstance = (LVCS_Handle_t)pMemoryTable->Region[LVCS_MEMREGION_PERSISTENT_SLOW_DATA].pBaseAddress; 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance =(LVCS_Instance_t *)*phInstance; 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Save the capabilities in the instance structure 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Capabilities = *pCapabilities; 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Save the memory table in the instance structure 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MemoryTable = *pMemoryTable; 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set all initial parameters to invalid to force a full initialisation 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = LVCS_OFF; 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SpeakerType = LVCS_SPEAKERTYPE_MAX; 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->OutputDevice = LVCS_HEADPHONE; 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SourceFormat = LVCS_SOURCEMAX; 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.CompressorMode = LVM_MODE_OFF; 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SampleRate = LVM_FS_INVALID; 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.EffectLevel = 0; 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.ReverbLevel = (LVM_UINT16)0x8000; 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 19109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[0]; 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TransitionGain = 0; 19309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent /* These current and target values are intialized again in LVCS_Control.c */ 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[0],0,0); 19509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent /* These current and target values are intialized again in LVCS_Control.c */ 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[1],0,0); 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the bypass variables 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 20109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=0; 20209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=0; 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bInOperatingModeTransition = LVM_FALSE; 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_FALSE; 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.CallBackParam = 0; 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.pCallBack = LVCS_TimerCallBack; 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.pCallbackInstance = pInstance; 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.pCallBackParams = LVM_NULL; 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 213