summaryrefslogtreecommitdiff
path: root/drivers/dahdi/voicebus
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2010-07-26 00:30:38 +0000
committerShaun Ruffell <sruffell@digium.com>2010-07-26 00:30:38 +0000
commit5c45b4da59502f5a30f3eb01e431d92d3d1c2202 (patch)
treed48e8c26fee0d01eca7f1de5ca40cd6bd157107e /drivers/dahdi/voicebus
parentc3a505d8eae4e5da94e8c5ac671a1815f7770859 (diff)
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
Diffstat (limited to 'drivers/dahdi/voicebus')
-rw-r--r--drivers/dahdi/voicebus/GpakApi.c130
-rw-r--r--drivers/dahdi/voicebus/GpakApi.h4
-rw-r--r--drivers/dahdi/voicebus/GpakCust.c6
-rw-r--r--drivers/dahdi/voicebus/gpakErrs.h6
-rw-r--r--drivers/dahdi/voicebus/gpakenum.h3
5 files changed, 142 insertions, 7 deletions
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 */