FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-aci/aci/hl_audio_drv.c @ 775:eedbf248bac0
gsm-fw/g23m-aci subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Oct 2014 01:45:14 +0000 |
parents | |
children | b50379990075 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-aci/aci/hl_audio_drv.c Sun Oct 12 01:45:14 2014 +0000 @@ -0,0 +1,271 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS (6147) +| Modul : AOC ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This module defines the functions for the high level audio + driver interface. ++----------------------------------------------------------------------------- +*/ + + +#ifndef HL_AUDIO_DRV_C +#define HL_AUDIO_DRV_C +#endif + +#include "aci_all.h" +#include "aci_cmh.h" +#include "aci.h" +#include "psa.h" +#include "hl_audio_drv.h" + +#ifdef VOCODER_FUNC_INTERFACE +#include "l4_tim.h" +#endif + + + +/* ===============GLOBAL VARIABLES====================*/ + +LOCAL T_HL_VOCODER_STATE currVocoderState; +#ifdef VOCODER_FUNC_INTERFACE +GLOBAL T_HL_VOCODER_ACTION currVocoderAction; +#endif + +/* This flag helps enable the vocoder interface testing for + specific tescases +*/ +#ifdef _SIMULATION_ +BOOL vocoder_tst_flag; +#endif + + +/* =============FUNCTION DEFINITIONS FOR L1===========*/ +#ifndef _SIMULATION_ +#ifdef VOCODER_FUNC_INTERFACE +void vocoder_mute_dl( BOOL mute ); +void vocoder_mute_ul( BOOL mute ); +void enable_tch_vocoder (BOOL vocoder_on); +#endif /* VOCODER_FUNC_INTERFACE */ +#endif /* _SIMULATION_ */ + + +/*================= FUNCTIONS ========================*/ + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : HL_AUDIO_DRV | +| ROUTINE : hl_audio_drv_init | ++-------------------------------------------------------------------+ + + PURPOSE : This function is called to initialise the variables in + the High Level Audio driver +*/ +GLOBAL void hl_audio_drv_init (void) +{ + TRACE_FUNCTION("hl_audio_drv_init()"); + + currVocoderState = HL_VOCODER_DISABLED; +#ifdef VOCODER_FUNC_INTERFACE + currVocoderAction= VOCODER_IDLE; +#endif +#ifdef _SIMULATION_ + vocoder_tst_flag = FALSE; +#endif + +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_CCF | +| ROUTINE : hl_drv_set_vocoder_state| ++-------------------------------------------------------------------+ + + PURPOSE : This function will enable/disable vocoder OR put the + vocoder state to PENDING_ENABLE/DISABLE depending on the + vocoder states. Depending on the vocoder state and if + requires timer will be started. Timer implementation is + done to synchronize timing delay needed(appr 35ms) to actually + enable/disable of vocoder in DSP. +*/ +GLOBAL void hl_drv_set_vocoder_state(BOOL user_attach) +{ + TRACE_FUNCTION("hl_drv_set_vocoder_state"); + + #ifdef VOCODER_FUNC_INTERFACE + if ( (user_attach EQ TRUE AND currVocoderState EQ HL_VOCODER_ENABLED) OR + (user_attach EQ FALSE AND currVocoderState EQ HL_VOCODER_DISABLED) ) + return; /* Do nothing, when the timeout occurs corresponding action will be taken */ + + switch (currVocoderAction) /* currVocoderAction is the state */ + { + case VOCODER_IDLE: + break; + + case VOCODER_BUSY: + { + if ( (user_attach EQ TRUE) AND (currVocoderState EQ HL_VOCODER_DISABLED) ) + { + currVocoderAction = VOCODER_PENDING_ENABLE; + return; + } + else if ( (user_attach EQ FALSE) AND (currVocoderState EQ HL_VOCODER_ENABLED) ) + { + currVocoderAction = VOCODER_PENDING_DISABLE; + return; + } + } + break; + + case VOCODER_PENDING_ENABLE: + { + if (user_attach EQ TRUE) + return; /* Do nothing */ + else /* user_attach EQ FALSE */ + { + currVocoderAction = VOCODER_PENDING_DISABLE; + return; + } + } + break; + + case VOCODER_PENDING_DISABLE: + { + if (user_attach EQ FALSE) + return; /* Do nothing */ + else /* user_attach EQ TRUE */ + { + currVocoderAction = VOCODER_PENDING_ENABLE; + return; + } + } + break; + + default: /* Assumed to be a never as all values caught */ + TRACE_ERROR ("Illegal value of currVocoderAction"); + break; + + } + #endif /* VOCODER_FUNC_INTERFACE */ + + #ifdef _SIMULATION_ + if(vocoder_tst_flag) + #endif + { + + #ifndef VOCODER_FUNC_INTERFACE + { + if(user_attach AND (currVocoderState EQ HL_VOCODER_DISABLED OR currVocoderState EQ HL_VOCODER_DISABLE_INITIATED)) + { + PALLOC(mmi_tch_vocoder_cfg_req, MMI_TCH_VOCODER_CFG_REQ); + mmi_tch_vocoder_cfg_req->vocoder_state = VOCODER_ENABLE; + PSENDX(L1, mmi_tch_vocoder_cfg_req); + currVocoderState = HL_VOCODER_ENABLE_INITIATED; + } + if(!user_attach AND (currVocoderState EQ HL_VOCODER_ENABLED OR currVocoderState EQ HL_VOCODER_ENABLE_INITIATED)) + { + PALLOC(mmi_tch_vocoder_cfg_req, MMI_TCH_VOCODER_CFG_REQ); + mmi_tch_vocoder_cfg_req->vocoder_state = VOCODER_DISABLE; + PSENDX(L1, mmi_tch_vocoder_cfg_req); + currVocoderState = HL_VOCODER_DISABLE_INITIATED; + } + } + #else + #ifndef _SIMULATION_ + TRACE_EVENT("Function interface for Vocoder"); + + currVocoderAction = VOCODER_BUSY; + TIMERSTART(VOCODER_VALUE, ACI_VOCODER); + if (user_attach) + { + enable_tch_vocoder(TRUE); + vocoder_mute_dl (FALSE); /* un-mute speaker */ + vocoder_mute_ul (FALSE); /* un-mute microphone */ + } + else + { + vocoder_mute_dl (TRUE); /* mute speaker */ + vocoder_mute_ul (TRUE); /* mute microphone */ + enable_tch_vocoder (FALSE); /* disable vocoder */ + } + #endif /* _SIMULATION_ */ + #endif /* VOCODER_FUNC_INTERFACE */ + } + + return; +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : HL_AUDIO_DRV | +| ROUTINE : hl_drv_get_vocoder_state | ++-------------------------------------------------------------------+ + + PURPOSE : This function returns the state of the vocoder +*/ + +GLOBAL T_HL_VOCODER_STATE hl_drv_get_vocoder_state (void) +{ + return currVocoderState; +} + +#ifndef VOCODER_FUNC_INTERFACE +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : HL_AUDIO_DRV | +| ROUTINE : hl_drv_vocoder_enabled | ++-------------------------------------------------------------------+ + + PURPOSE : Currently this function does nothing +*/ + +GLOBAL void hl_drv_vocoder_state_set (void) +{ + TRACE_FUNCTION("hl_drv_vocoder_enabled()"); + + switch(currVocoderState) + { + case HL_VOCODER_ENABLE_INITIATED: + currVocoderState = HL_VOCODER_ENABLED; + break; + + case HL_VOCODER_DISABLE_INITIATED: + currVocoderState = HL_VOCODER_DISABLED; + break; + + default: + break; + + } +#ifdef VOCODER_FUNC_INTERFACE + currVocoderAction = VOCODER_IDLE; +#endif +} +#endif + +#ifdef _SIMULATION_ +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : HL_AUDIO_DRV | +| ROUTINE : hl_audio_drv_initForTest | ++-------------------------------------------------------------------+ + + PURPOSE : Initialise global variables related to simulaed +*/ + +GLOBAL void hl_audio_drv_initForTest(void) +{ + vocoder_tst_flag = TRUE; +} +#endif