From 5c45b4da59502f5a30f3eb01e431d92d3d1c2202 Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Mon, 26 Jul 2010 00:30:38 +0000 Subject: wcte12xp, wctdm24xxp: Updating VPMADT032 firmware to version to 1.25 The echo canceler will now monitor if the receive signal goes over a certain threshold, and if so, freezes its adaptation to prevent loss of convergence. I.e. Fixes conditions where blowing into your handset could result in echo. Additionally, 1.25 includes improvements for handling when line conditions change from echo free to containing echo. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8983 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/firmware/Makefile | 2 +- drivers/dahdi/voicebus/GpakApi.c | 130 +++++++++++++++++++++++++++++++++++++- drivers/dahdi/voicebus/GpakApi.h | 4 ++ drivers/dahdi/voicebus/GpakCust.c | 6 +- drivers/dahdi/voicebus/gpakErrs.h | 6 +- drivers/dahdi/voicebus/gpakenum.h | 3 +- 6 files changed, 143 insertions(+), 8 deletions(-) (limited to 'drivers/dahdi') diff --git a/drivers/dahdi/firmware/Makefile b/drivers/dahdi/firmware/Makefile index b90b1a6..0d4973d 100644 --- a/drivers/dahdi/firmware/Makefile +++ b/drivers/dahdi/firmware/Makefile @@ -25,7 +25,7 @@ OCT6114_064_VERSION:=1.05.01 OCT6114_128_VERSION:=1.05.01 TC400M_VERSION:=MR6.12 -VPMADT032_VERSION:=1.20.0 +VPMADT032_VERSION:=1.25.0 HX8_VERSION:=2.06 FIRMWARE_URL:=http://downloads.digium.com/pub/telephony/firmware/releases diff --git a/drivers/dahdi/voicebus/GpakApi.c b/drivers/dahdi/voicebus/GpakApi.c index a44834b..9dde204 100644 --- a/drivers/dahdi/voicebus/GpakApi.c +++ b/drivers/dahdi/voicebus/GpakApi.c @@ -722,9 +722,135 @@ gpakConfigChanStatus_t gpakConfigureChannel( MsgBuffer[37] = (DSP_WORD) pChanConfig->EcanParametersB.EcanMaxDoubleTalkThres; - MsgLength = 76; // byte number == 38*2 - break; + MsgBuffer[38] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanSaturationLevel; + MsgBuffer[39] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanSaturationLevel; + MsgBuffer[40] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNLPSaturationThreshold; + MsgBuffer[41] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNLPSaturationThreshold; + MsgLength = 84; /* byte number == 42*2 */ + break; + /* PCM to Packet channel type. */ + case tdmToTdmDebug: + + MsgBuffer[2] = (DSP_WORD) + ((pChanConfig->PcmInPortA << 8) | + (pChanConfig->PcmInSlotA & 0xFF)); + MsgBuffer[3] = (DSP_WORD) + ((pChanConfig->PcmOutPortA << 8) | + (pChanConfig->PcmOutSlotA & 0xFF)); + + MsgBuffer[4] = (DSP_WORD) + ((pChanConfig->PcmInPortB << 8) | + (pChanConfig->PcmInSlotB & 0xFF)); + MsgBuffer[5] = (DSP_WORD) + ((pChanConfig->PcmOutPortB << 8) | + (pChanConfig->PcmOutSlotB & 0xFF)); + + MsgBuffer[6] = (DSP_WORD) + ( + ((pChanConfig->FaxCngDetB << 11) & 0x0800) | + ((pChanConfig->FaxCngDetA << 10) & 0x0400) | + ((pChanConfig->MuteToneB << 9) & 0x0200) | + ((pChanConfig->MuteToneA << 8) & 0x0100) | + ((pChanConfig->FrameRate << 6) & 0x00C0) | + ((pChanConfig->ToneTypesB << 5) & 0x0020) | + ((pChanConfig->ToneTypesA << 4) & 0x0010) | + ((pChanConfig->SoftwareCompand & 3) << 2) | + (pChanConfig->EcanEnableB << 1) | + (pChanConfig->EcanEnableA & 1) + ); + + MsgBuffer[7] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanTapLength; + MsgBuffer[8] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNlpType; + MsgBuffer[9] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanAdaptEnable; + MsgBuffer[10] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanG165DetEnable; + MsgBuffer[11] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanDblTalkThresh; + MsgBuffer[12] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNlpThreshold; + MsgBuffer[13] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNlpConv; + MsgBuffer[14] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNlpUnConv; + MsgBuffer[15] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNlpMaxSuppress; + + MsgBuffer[16] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanCngThreshold; + MsgBuffer[17] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanAdaptLimit; + MsgBuffer[18] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanCrossCorrLimit; + MsgBuffer[19] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNumFirSegments; + MsgBuffer[20] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanFirSegmentLen; + + MsgBuffer[21] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanTapLength; + MsgBuffer[22] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNlpType; + MsgBuffer[23] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanAdaptEnable; + MsgBuffer[24] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanG165DetEnable; + MsgBuffer[25] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanDblTalkThresh; + MsgBuffer[26] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNlpThreshold; + MsgBuffer[27] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNlpConv; + MsgBuffer[28] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNlpUnConv; + MsgBuffer[29] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNlpMaxSuppress; + MsgBuffer[30] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanCngThreshold; + MsgBuffer[31] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanAdaptLimit; + MsgBuffer[32] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanCrossCorrLimit; + MsgBuffer[33] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNumFirSegments; + MsgBuffer[34] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanFirSegmentLen; + + MsgBuffer[35] = (DSP_WORD) + ( + ((pChanConfig->EcanParametersB.EcanReconvergenceCheckEnable << 5) & 0x20) | + ((pChanConfig->EcanParametersA.EcanReconvergenceCheckEnable << 4) & 0x10) | + ((pChanConfig->EcanParametersB.EcanTandemOperationEnable << 3) & 0x8) | + ((pChanConfig->EcanParametersA.EcanTandemOperationEnable << 2) & 0x4) | + ((pChanConfig->EcanParametersB.EcanMixedFourWireMode << 1) & 0x2) | + (pChanConfig->EcanParametersA.EcanMixedFourWireMode & 1) + ); + MsgBuffer[36] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanMaxDoubleTalkThres; + + MsgBuffer[37] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanMaxDoubleTalkThres; + + MsgBuffer[38] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanSaturationLevel; + MsgBuffer[39] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanSaturationLevel; + MsgBuffer[40] = (DSP_WORD) + pChanConfig->EcanParametersA.EcanNLPSaturationThreshold; + MsgBuffer[41] = (DSP_WORD) + pChanConfig->EcanParametersB.EcanNLPSaturationThreshold; + MsgBuffer[42] = (DSP_WORD) + pChanConfig->ChannelId_tobe_Debug; + + MsgLength = 86; /* byte number == 43*2 */ + break; /* Unknown (invalid) channel type. */ default: diff --git a/drivers/dahdi/voicebus/GpakApi.h b/drivers/dahdi/voicebus/GpakApi.h index ef16d63..bbc27a4 100644 --- a/drivers/dahdi/voicebus/GpakApi.h +++ b/drivers/dahdi/voicebus/GpakApi.h @@ -63,6 +63,8 @@ typedef struct GpakEcanParms short int EcanTandemOperationEnable; //Enable tandem operation short int EcanMixedFourWireMode; // Handle possible 4-wire (echo-free) lines short int EcanReconvergenceCheckEnable; // Handle possible 4-wire (echo-free) lines + short int EcanSaturationLevel; /* Far end input level above which significant saturation/nonlinearity may be expected. */ + short int EcanNLPSaturationThreshold; /* NLP threshold under conditions of possible saturation */ } GpakEcanParms_t; /* Definition of a Channel Configuration information structure. */ @@ -88,6 +90,8 @@ typedef struct GpakChannelConfig GpakActivation MuteToneB; // B side mute DTMF Enabled GpakActivation FaxCngDetA; // A side FaxCng Tone Detector Enabled GpakActivation FaxCngDetB; // B side FaxCng Tone Detector Enabled + unsigned short int ChannelId_tobe_Debug; /* Channel Id of the channel that we'd like to debug */ + /* (0 to MaxChannels-1), only used for tdmToTdmDebug */ } GpakChannelConfig_t; diff --git a/drivers/dahdi/voicebus/GpakCust.c b/drivers/dahdi/voicebus/GpakCust.c index 11453fc..a601525 100644 --- a/drivers/dahdi/voicebus/GpakCust.c +++ b/drivers/dahdi/voicebus/GpakCust.c @@ -716,13 +716,15 @@ void vpmadt032_get_default_parameters(struct GpakEcanParms *p) p->EcanNlpUnConv = 12; p->EcanNlpMaxSuppress = DEFAULT_NLPMAXSUPP; p->EcanCngThreshold = 43; - p->EcanAdaptLimit = 50; + p->EcanAdaptLimit = 25; p->EcanCrossCorrLimit = 15; p->EcanNumFirSegments = 3; p->EcanFirSegmentLen = 48; - p->EcanReconvergenceCheckEnable = 2; + p->EcanReconvergenceCheckEnable = 1; p->EcanTandemOperationEnable = 0; p->EcanMixedFourWireMode = 0; + p->EcanSaturationLevel = 3; + p->EcanNLPSaturationThreshold = 6; } EXPORT_SYMBOL(vpmadt032_get_default_parameters); diff --git a/drivers/dahdi/voicebus/gpakErrs.h b/drivers/dahdi/voicebus/gpakErrs.h index c36a1b7..5daa930 100644 --- a/drivers/dahdi/voicebus/gpakErrs.h +++ b/drivers/dahdi/voicebus/gpakErrs.h @@ -97,8 +97,10 @@ typedef enum Cc_InvalidMuteToneA = 51, /* invalid MuteToneA set, no detector */ Cc_InvalidMuteToneB = 52, /* invalid MuteToneB set, no detector */ - Cc_InsuffFaxCngDetResources = 53 /* insufficient tdm block resources avail. */ - + Cc_InsuffFaxCngDetResources = 53, /* insufficient tdm block resources avail. */ + Cc_PortDmaNotStarted = 54, /* SerialPort not ready */ + Cc_ChannelDebugActive = 55, /* Debug Channel is not active */ + Cc_ChannelDebugEnabled = 56 /* Channel already been debugged */ } GPAK_ChannelConfigStat_t; /* Tear Down Channel reply status codes. */ diff --git a/drivers/dahdi/voicebus/gpakenum.h b/drivers/dahdi/voicebus/gpakenum.h index f488a81..3cc7adf 100644 --- a/drivers/dahdi/voicebus/gpakenum.h +++ b/drivers/dahdi/voicebus/gpakenum.h @@ -98,7 +98,8 @@ typedef enum typedef enum { inactive=0, // channel inactive - tdmToTdm=1 // tdmToTdm + tdmToTdm = 1, /* tdmToTdm */ + tdmToTdmDebug = 2 /* tdmToTdm */ } GpakChanType; /* G.PAK Algorithm control commands */ -- cgit v1.2.3