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