From 2111c50fe6657c7897bba50196d41f042624e975 Mon Sep 17 00:00:00 2001 From: Octasic Inc Date: Mon, 16 Feb 2009 17:39:26 +0200 Subject: importing OCT612x-01.02.01 --- .../oct6100api/oct6100_api/oct6100_channel.c | 108 +++++++++++++++++---- 1 file changed, 91 insertions(+), 17 deletions(-) (limited to 'software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c') diff --git a/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c b/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c index 463f077..a229190 100644 --- a/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c +++ b/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c @@ -2,7 +2,7 @@ File: oct6100_channel.c - Copyright (c) 2001-2008 Octasic Inc. + Copyright (c) 2001-2009 Octasic Inc. Description: @@ -23,9 +23,9 @@ You should have received a copy of the GNU General Public License along with the OCT6100 GPL API; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -$Octasic_Release: OCT612xAPI-01.01.01 $ +$Octasic_Release: OCT612xAPI-01.02.01 $ -$Octasic_Revision: 494 $ +$Octasic_Revision: 506 $ \*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ @@ -144,6 +144,7 @@ UINT32 Oct6100ChannelOpenDef( f_pChannelOpen->VqeConfig.fSoutNaturalListenerEnhancement = FALSE; f_pChannelOpen->VqeConfig.fRoutNoiseReduction = FALSE; f_pChannelOpen->VqeConfig.lRoutNoiseReductionLevelGainDb = -18; + f_pChannelOpen->VqeConfig.fEnablePlayout = TRUE; f_pChannelOpen->VqeConfig.lAnrSnrEnhancementDb = -18; f_pChannelOpen->VqeConfig.ulAnrVoiceNoiseSegregation = 6; f_pChannelOpen->VqeConfig.ulToneDisablerVqeActivationDelay = 300; @@ -368,6 +369,7 @@ UINT32 Oct6100ChannelModifyDef( f_pChannelModify->VqeConfig.fSoutNaturalListenerEnhancement = cOCT6100_KEEP_PREVIOUS_SETTING; f_pChannelModify->VqeConfig.fRoutNoiseReduction = cOCT6100_KEEP_PREVIOUS_SETTING; f_pChannelModify->VqeConfig.lRoutNoiseReductionLevelGainDb = cOCT6100_KEEP_PREVIOUS_SETTING; + f_pChannelModify->VqeConfig.fEnablePlayout = cOCT6100_KEEP_PREVIOUS_SETTING; f_pChannelModify->VqeConfig.lAnrSnrEnhancementDb = cOCT6100_KEEP_PREVIOUS_SETTING; f_pChannelModify->VqeConfig.ulAnrVoiceNoiseSegregation = cOCT6100_KEEP_PREVIOUS_SETTING; f_pChannelModify->VqeConfig.ulToneDisablerVqeActivationDelay = cOCT6100_KEEP_PREVIOUS_SETTING; @@ -826,6 +828,7 @@ UINT32 Oct6100ChannelGetStatsDef( f_pChannelStats->VqeConfig.fSoutNaturalListenerEnhancement = FALSE; f_pChannelStats->VqeConfig.fRoutNoiseReduction = FALSE; f_pChannelStats->VqeConfig.lRoutNoiseReductionLevelGainDb = cOCT6100_INVALID_SIGNED_STAT; + f_pChannelStats->VqeConfig.fEnablePlayout = TRUE; f_pChannelStats->VqeConfig.lAnrSnrEnhancementDb = cOCT6100_INVALID_SIGNED_STAT; f_pChannelStats->VqeConfig.ulAnrVoiceNoiseSegregation = cOCT6100_INVALID_STAT; f_pChannelStats->VqeConfig.ulToneDisablerVqeActivationDelay = cOCT6100_INVALID_STAT; @@ -2543,6 +2546,7 @@ UINT32 Oct6100ApiUpdateChannelEntry( pChanEntry->VqeConfig.bySoutNaturalListenerEnhancementGainDb = (UINT8)( pVqeConfig->ulSoutNaturalListenerEnhancementGainDb & 0xFF ); pChanEntry->VqeConfig.fSoutNaturalListenerEnhancement = (UINT8)( pVqeConfig->fSoutNaturalListenerEnhancement & 0xFF ); pChanEntry->VqeConfig.fRoutNoiseReduction = (UINT8)( pVqeConfig->fRoutNoiseReduction & 0xFF ); + pChanEntry->VqeConfig.fEnablePlayout = (UINT8)( pVqeConfig->fEnablePlayout & 0xFF ); pChanEntry->VqeConfig.chRoutNoiseReductionLevelGainDb = (OCT_INT8) (pVqeConfig->lRoutNoiseReductionLevelGainDb & 0xFF); pChanEntry->VqeConfig.fEnableMusicProtection = (UINT8)( pVqeConfig->fEnableMusicProtection & 0xFF ); pChanEntry->VqeConfig.fIdleCodeDetection = (UINT8)( pVqeConfig->fIdleCodeDetection & 0xFF ); @@ -5915,6 +5919,9 @@ UINT32 Oct6100ApiModifyChannelEntry( pApiVqeConf->fSoutNaturalListenerEnhancement = (UINT8)( f_pChannelOpen->VqeConfig.fSoutNaturalListenerEnhancement & 0xFF ); pApiVqeConf->fRoutNoiseReduction = (UINT8)( f_pChannelOpen->VqeConfig.fRoutNoiseReduction & 0xFF ); pApiVqeConf->chRoutNoiseReductionLevelGainDb = (OCT_INT8)( f_pChannelOpen->VqeConfig.lRoutNoiseReductionLevelGainDb & 0xFF ); + + pApiVqeConf->fEnablePlayout = (UINT8)( f_pChannelOpen->VqeConfig.fEnablePlayout & 0xFF ); + pApiVqeConf->fEnableMusicProtection = (UINT8)( f_pChannelOpen->VqeConfig.fEnableMusicProtection & 0xFF ); pApiVqeConf->fIdleCodeDetection = (UINT8)( f_pChannelOpen->VqeConfig.fIdleCodeDetection & 0xFF ); } @@ -6974,6 +6981,9 @@ UINT32 Oct6100ApiChannelGetStatsSer( f_pChannelStats->VqeConfig.fSoutNaturalListenerEnhancement = pChanEntry->VqeConfig.fSoutNaturalListenerEnhancement; f_pChannelStats->VqeConfig.fRoutNoiseReduction = pChanEntry->VqeConfig.fRoutNoiseReduction; f_pChannelStats->VqeConfig.lRoutNoiseReductionLevelGainDb = pChanEntry->VqeConfig.chRoutNoiseReductionLevelGainDb; + + f_pChannelStats->VqeConfig.fEnablePlayout = pChanEntry->VqeConfig.fEnablePlayout; + f_pChannelStats->VqeConfig.fEnableMusicProtection = pChanEntry->VqeConfig.fEnableMusicProtection; f_pChannelStats->VqeConfig.fIdleCodeDetection = pChanEntry->VqeConfig.fIdleCodeDetection; @@ -8034,6 +8044,15 @@ UINT32 Oct6100ApiCheckVqeConfig( if ( f_pVqeConfig->fRoutNoiseReduction == TRUE && pImageInfo->fRoutNoiseReduction == FALSE ) return cOCT6100_ERR_NOT_SUPPORTED_CHANNEL_ROUT_NR; + /* Check if parameters are valid. */ + if ( f_pVqeConfig->fEnablePlayout != TRUE && f_pVqeConfig->fEnablePlayout != FALSE ) + return cOCT6100_ERR_CHANNEL_ENABLE_PLAYOUT; + if ( f_pVqeConfig->fEnablePlayout == FALSE && pImageInfo->fPerChannelPlayoutControl == FALSE ) + return cOCT6100_ERR_NOT_SUPPORTED_DISABLE_PLAYOUT; + + if ( f_pVqeConfig->fEnablePlayout == TRUE && f_pVqeConfig->fRoutNoiseReduction == TRUE ) + return cOCT6100_ERR_NOT_SUPPORTED_ENABLE_PLAYOUT_AND_ROUT_NOISE_REDUCTION; + /*Check if noise reduction level gain is supported*/ if ( ( pImageInfo->fRoutNoiseReductionLevel == FALSE ) && ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != -18 ) ) return cOCT6100_ERR_NOT_SUPPORTED_CHANNEL_ROUT_NOISE_REDUCTION_GAIN; @@ -8937,6 +8956,43 @@ UINT32 Oct6100ApiWriteVqeNlpMemory( } + /* Per channel playout configuration control. */ + if ( pSharedInfo->ImageInfo.fPerChannelPlayoutControl == TRUE ) + { + /* Check if the configuration has been changed. */ + if ( ( f_fModifyOnly == FALSE ) + || ( ( f_fModifyOnly == TRUE ) + && ( f_pVqeConfig->fEnablePlayout != pChanEntry->VqeConfig.fEnablePlayout ) ) ) + { + ulFeatureBytesOffset = pSharedInfo->MemoryMap.PerChannelPlayoutControlFieldOfst.usDwordOffset * 4; + ulFeatureBitOffset = pSharedInfo->MemoryMap.PerChannelPlayoutControlFieldOfst.byBitOffset; + ulFeatureFieldLength = pSharedInfo->MemoryMap.PerChannelPlayoutControlFieldOfst.byFieldSize; + + mOCT6100_RETRIEVE_NLP_CONF_DWORD( f_pApiInstance, + pChanEntry, + ulNlpConfigBaseAddress + ulFeatureBytesOffset, + &ulTempData, + ulResult ); + if ( ulResult != cOCT6100_ERR_OK ) + return ulResult; + + /* Clear previous value set in the feature field.*/ + mOCT6100_CREATE_FEATURE_MASK( ulFeatureFieldLength, ulFeatureBitOffset, &ulMask ); + + ulTempData &= (~ulMask); + ulTempData |= (UINT32)f_pVqeConfig->fEnablePlayout << ulFeatureBitOffset; + + /* Write the new DWORD where the field is located. */ + mOCT6100_SAVE_NLP_CONF_DWORD( f_pApiInstance, + pChanEntry, + ulNlpConfigBaseAddress + ulFeatureBytesOffset, + ulTempData, + ulResult ); + if ( ulResult != cOCT6100_ERR_OK ) + return ulResult; + } + } + /* Configure Sout ANR SNR enhancement. */ if ( pSharedInfo->ImageInfo.fAnrSnrEnhancement == TRUE ) { @@ -9500,7 +9556,7 @@ UINT32 Oct6100ApiWriteVqeNlpMemory( && ( ( f_pVqeConfig->ulNonLinearityBehaviorA != pChanEntry->VqeConfig.byNonLinearityBehaviorA ) || ( f_pChannelOpen->ulEchoOperationMode != pChanEntry->byEchoOperationMode ) ) ) ) { - UINT16 ausLookupTable[ 14 ] = { 0x3663, 0x3906, 0x399C, 0x3A47, 0x3B06, 0x3B99, 0x3C47, 0x3D02, 0x3D99, 0x3E47, 0x3F00, 0x3F99, 0x4042, 0x4100 }; + UINT16 ausLookupTable[ 14 ] = { 0x3663, 0x3908, 0x399C, 0x3A47, 0x3B06, 0x3B99, 0x3C47, 0x3D02, 0x3D99, 0x3E47, 0x3F00, 0x3F99, 0x4042, 0x4100 }; ulFeatureBytesOffset = pSharedInfo->MemoryMap.PcmLeakFieldOfst.usDwordOffset * 4; ulFeatureBitOffset = pSharedInfo->MemoryMap.PcmLeakFieldOfst.byBitOffset; @@ -9519,18 +9575,16 @@ UINT32 Oct6100ApiWriteVqeNlpMemory( ulTempData &= (~ulMask); - /*If we support ANR level the TLV is shared over 2 bits*/ - if (ulFeatureBitOffset == 18) - { - ulFeatureBitOffset -= 2; - ausLookupTable[ f_pVqeConfig->ulNonLinearityBehaviorA ] &= 0xFFFC; - } + /* Check if some bits of the filed are shared with another field (RNR) */ + usTempData = ausLookupTable[ f_pVqeConfig->ulNonLinearityBehaviorA ]; + if ( ulFeatureFieldLength != 16 ) + usTempData = (UINT16)( usTempData >> ( 16 - ulFeatureFieldLength ) ); if ( ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_NO_ECHO ) || ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_SPEECH_RECOGNITION ) ) ulTempData |= ( 0x0 << ulFeatureBitOffset ); else - ulTempData |= ( ausLookupTable[ f_pVqeConfig->ulNonLinearityBehaviorA ] << ulFeatureBitOffset ); + ulTempData |= ( usTempData << ulFeatureBitOffset ); /* Then save the DWORD where the field is located.*/ mOCT6100_SAVE_NLP_CONF_DWORD( f_pApiInstance, @@ -10242,16 +10296,31 @@ UINT32 Oct6100ApiWriteEchoMemory( WriteParams.usWriteData = 0x0000; /* Set the echo control field.*/ - if ( ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_NO_ECHO ) - || ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_SPEECH_RECOGNITION ) ) + if ( ( ( pSharedInfo->IntrptManage.fAfBistFailedOnBoot == TRUE ) + + ) + + ) { - WriteParams.usWriteData |= cOCT6100_ECHO_OP_MODE_NORMAL << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; + /* Keep the AF in reset, or in power-down. */ + if ( f_pChannelOpen->ulEchoOperationMode != cOCT6100_ECHO_OP_MODE_POWER_DOWN ) + WriteParams.usWriteData |= cOCT6100_ECHO_OP_MODE_HT_RESET << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; + else + WriteParams.usWriteData |= cOCT6100_ECHO_OP_MODE_POWER_DOWN << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; } - else if ( f_pChannelOpen->ulEchoOperationMode != cOCT6100_ECHO_OP_MODE_EXTERNAL ) + else { - WriteParams.usWriteData |= f_pChannelOpen->ulEchoOperationMode << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; + if ( ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_NO_ECHO ) + || ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_SPEECH_RECOGNITION ) ) + { + WriteParams.usWriteData |= cOCT6100_ECHO_OP_MODE_NORMAL << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; + } + else if ( f_pChannelOpen->ulEchoOperationMode != cOCT6100_ECHO_OP_MODE_EXTERNAL ) + { + WriteParams.usWriteData |= f_pChannelOpen->ulEchoOperationMode << cOCT6100_ECHO_CONTROL_MEM_AF_CONTROL; + } } - + /* Set the SIN/SOUT law.*/ WriteParams.usWriteData |= ulSinPcmLaw << cOCT6100_ECHO_CONTROL_MEM_INPUT_LAW_OFFSET; WriteParams.usWriteData |= ulSoutPcmLaw << cOCT6100_ECHO_CONTROL_MEM_OUTPUT_LAW_OFFSET; @@ -10666,6 +10735,11 @@ UINT32 Oct6100ApiUpdateOpenStruct( else f_pChanOpen->VqeConfig.fIdleCodeDetection = f_pChanModify->VqeConfig.fIdleCodeDetection; + if ( f_pChanModify->VqeConfig.fEnablePlayout == cOCT6100_KEEP_PREVIOUS_SETTING ) + f_pChanOpen->VqeConfig.fEnablePlayout = f_pChanEntry->VqeConfig.fEnablePlayout; + else + f_pChanOpen->VqeConfig.fEnablePlayout = f_pChanModify->VqeConfig.fEnablePlayout; + /*======================================================================*/ -- cgit v1.2.3