summaryrefslogtreecommitdiff
path: root/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c
diff options
context:
space:
mode:
Diffstat (limited to 'software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c')
-rw-r--r--software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c92
1 files changed, 90 insertions, 2 deletions
diff --git a/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c b/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c
index f1bb058..43bb1ed 100644
--- a/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c
+++ b/software/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.c
@@ -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.00-PR43 $
+$Octasic_Release: OCT612xAPI-01.00-PR47 $
-$Octasic_Revision: 469 $
+$Octasic_Revision: 480 $
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
@@ -147,6 +147,7 @@ UINT32 Oct6100ChannelOpenDef(
f_pChannelOpen->VqeConfig.ulSoutNaturalListenerEnhancementGainDb = 0;
f_pChannelOpen->VqeConfig.fSoutNaturalListenerEnhancement = FALSE;
f_pChannelOpen->VqeConfig.fRoutNoiseReduction = FALSE;
+ f_pChannelOpen->VqeConfig.lRoutNoiseReductionLevelGainDb = -18;
f_pChannelOpen->VqeConfig.lAnrSnrEnhancementDb = -18;
f_pChannelOpen->VqeConfig.ulAnrVoiceNoiseSegregation = 6;
f_pChannelOpen->VqeConfig.ulToneDisablerVqeActivationDelay = 300;
@@ -381,6 +382,7 @@ UINT32 Oct6100ChannelModifyDef(
f_pChannelModify->VqeConfig.ulSoutNaturalListenerEnhancementGainDb = cOCT6100_KEEP_PREVIOUS_SETTING;
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.lAnrSnrEnhancementDb = cOCT6100_KEEP_PREVIOUS_SETTING;
f_pChannelModify->VqeConfig.ulAnrVoiceNoiseSegregation = cOCT6100_KEEP_PREVIOUS_SETTING;
f_pChannelModify->VqeConfig.ulToneDisablerVqeActivationDelay = cOCT6100_KEEP_PREVIOUS_SETTING;
@@ -861,6 +863,7 @@ UINT32 Oct6100ChannelGetStatsDef(
f_pChannelStats->VqeConfig.ulSoutNaturalListenerEnhancementGainDb = cOCT6100_INVALID_STAT;
f_pChannelStats->VqeConfig.fSoutNaturalListenerEnhancement = FALSE;
f_pChannelStats->VqeConfig.fRoutNoiseReduction = FALSE;
+ f_pChannelStats->VqeConfig.lRoutNoiseReductionLevelGainDb = cOCT6100_INVALID_SIGNED_STAT;
f_pChannelStats->VqeConfig.lAnrSnrEnhancementDb = cOCT6100_INVALID_SIGNED_STAT;
f_pChannelStats->VqeConfig.ulAnrVoiceNoiseSegregation = cOCT6100_INVALID_STAT;
f_pChannelStats->VqeConfig.ulToneDisablerVqeActivationDelay = cOCT6100_INVALID_STAT;
@@ -2581,6 +2584,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.chRoutNoiseReductionLevelGainDb = (OCT_INT8) (pVqeConfig->lRoutNoiseReductionLevelGainDb & 0xFF);
pChanEntry->VqeConfig.fEnableMusicProtection = (UINT8)( pVqeConfig->fEnableMusicProtection & 0xFF );
pChanEntry->VqeConfig.fIdleCodeDetection = (UINT8)( pVqeConfig->fIdleCodeDetection & 0xFF );
pChanEntry->VqeConfig.fResetRinAlcOnTones = (UINT8)( pVqeConfig->fResetRinAlcOnTones & 0xFF );
@@ -5862,6 +5866,7 @@ UINT32 Oct6100ApiModifyChannelEntry(
pApiVqeConf->bySoutNaturalListenerEnhancementGainDb = (UINT8)( f_pChannelOpen->VqeConfig.ulSoutNaturalListenerEnhancementGainDb & 0xFF );
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->fEnableMusicProtection = (UINT8)( f_pChannelOpen->VqeConfig.fEnableMusicProtection & 0xFF );
pApiVqeConf->fIdleCodeDetection = (UINT8)( f_pChannelOpen->VqeConfig.fIdleCodeDetection & 0xFF );
pApiVqeConf->fResetRinAlcOnTones = (UINT8)( f_pChannelOpen->VqeConfig.fResetRinAlcOnTones & 0xFF );
@@ -6943,6 +6948,7 @@ UINT32 Oct6100ApiChannelGetStatsSer(
f_pChannelStats->VqeConfig.ulSoutNaturalListenerEnhancementGainDb = pChanEntry->VqeConfig.bySoutNaturalListenerEnhancementGainDb;
f_pChannelStats->VqeConfig.fSoutNaturalListenerEnhancement = pChanEntry->VqeConfig.fSoutNaturalListenerEnhancement;
f_pChannelStats->VqeConfig.fRoutNoiseReduction = pChanEntry->VqeConfig.fRoutNoiseReduction;
+ f_pChannelStats->VqeConfig.lRoutNoiseReductionLevelGainDb = pChanEntry->VqeConfig.chRoutNoiseReductionLevelGainDb;
f_pChannelStats->VqeConfig.fEnableMusicProtection = pChanEntry->VqeConfig.fEnableMusicProtection;
f_pChannelStats->VqeConfig.fIdleCodeDetection = pChanEntry->VqeConfig.fIdleCodeDetection;
f_pChannelStats->VqeConfig.fResetRinAlcOnTones = pChanEntry->VqeConfig.fResetRinAlcOnTones;
@@ -8060,6 +8066,21 @@ UINT32 Oct6100ApiCheckVqeConfig(
if ( f_pVqeConfig->fRoutNoiseReduction == TRUE && pImageInfo->fRoutNoiseReduction == FALSE )
return cOCT6100_ERR_NOT_SUPPORTED_CHANNEL_ROUT_NR;
+ /* Validate Rout noise reduction Level. */
+ if ( f_pVqeConfig->fRoutNoiseReduction == TRUE )
+ {
+ /*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;
+
+ if ( ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != 0 ) &&
+ ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != -6 ) &&
+ ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != -12 ) &&
+ ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != -18 ) )
+
+ return cOCT6100_ERR_CHANNEL_ROUT_NOISE_REDUCTION_GAIN;
+ }
+
/* Check if ANR SNRE is supported. */
if ( ( f_pVqeConfig->lAnrSnrEnhancementDb != -18 ) && ( pImageInfo->fAnrSnrEnhancement == FALSE ) )
return cOCT6100_ERR_NOT_SUPPORTED_CHANNEL_ANR_SNR_ENHANCEMENT;
@@ -8912,6 +8933,60 @@ UINT32 Oct6100ApiWriteVqeNlpMemory(
return ulResult;
}
}
+ if (pSharedInfo->ImageInfo.fRoutNoiseReductionLevel == TRUE)
+ {
+ /* Check if the configuration has been changed. */
+ if ( ( f_fModifyOnly == FALSE )
+ || ( ( f_fModifyOnly == TRUE )
+ && ( f_pVqeConfig->lRoutNoiseReductionLevelGainDb != pChanEntry->VqeConfig.chRoutNoiseReductionLevelGainDb ) ) )
+ {
+ ulFeatureBytesOffset = pSharedInfo->MemoryMap.RinAnrValOfst.usDwordOffset * 4;
+ ulFeatureBitOffset = pSharedInfo->MemoryMap.RinAnrValOfst.byBitOffset;
+ ulFeatureFieldLength = pSharedInfo->MemoryMap.RinAnrValOfst.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);
+
+ if (f_pVqeConfig->fRoutNoiseReduction == TRUE)
+ {
+ switch( f_pVqeConfig->lRoutNoiseReductionLevelGainDb)
+ {
+ case 0: ulTempData |= ( 0 << ulFeatureBitOffset );
+ break;
+ case -6: ulTempData |= ( 1 << ulFeatureBitOffset );
+ break;
+ case -12: ulTempData |= ( 2 << ulFeatureBitOffset );
+ break;
+ case -18: ulTempData |= ( 3 << ulFeatureBitOffset );
+ break;
+ default: ulTempData |= ( 0 << ulFeatureBitOffset );
+ break;
+ }
+ }
+ else
+ ulTempData |= ( 0 << 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 )
@@ -9494,6 +9569,14 @@ UINT32 Oct6100ApiWriteVqeNlpMemory(
mOCT6100_CREATE_FEATURE_MASK( ulFeatureFieldLength, ulFeatureBitOffset, &ulMask );
ulTempData &= (~ulMask);
+
+ /*If we support ANR level the TLV is shared over 2 bits*/
+ if (pSharedInfo->ImageInfo.fRoutNoiseReductionLevel == TRUE)
+ {
+ ulFeatureBitOffset -= 2;
+ ausLookupTable[ f_pVqeConfig->ulNonLinearityBehaviorA ] &= 0xFFFC;
+ }
+
if ( ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_NO_ECHO )
|| ( f_pChannelOpen->ulEchoOperationMode == cOCT6100_ECHO_OP_MODE_SPEECH_RECOGNITION ) )
ulTempData |= ( 0x0 << ulFeatureBitOffset );
@@ -10623,6 +10706,11 @@ UINT32 Oct6100ApiUpdateOpenStruct(
else
f_pChanOpen->VqeConfig.fRoutNoiseReduction = f_pChanModify->VqeConfig.fRoutNoiseReduction;
+ if ( f_pChanModify->VqeConfig.lRoutNoiseReductionLevelGainDb == cOCT6100_KEEP_PREVIOUS_SETTING )
+ f_pChanOpen->VqeConfig.lRoutNoiseReductionLevelGainDb = f_pChanEntry->VqeConfig.chRoutNoiseReductionLevelGainDb;
+ else
+ f_pChanOpen->VqeConfig.lRoutNoiseReductionLevelGainDb = f_pChanModify->VqeConfig.lRoutNoiseReductionLevelGainDb;
+
if ( f_pChanModify->VqeConfig.lAnrSnrEnhancementDb == cOCT6100_KEEP_PREVIOUS_SETTING )
f_pChanOpen->VqeConfig.lAnrSnrEnhancementDb = f_pChanEntry->VqeConfig.chAnrSnrEnhancementDb;