blob: 1bef289055aa6a67611bfe4c59c44be52f0fd744 [file] [log] [blame]
/** \file vp890_api.h
* vp890_api.h
*
* Header file that define all the commands for the Vp890 device.
*
* $Revision: 9253 $
* $LastChangedDate: 2011-12-14 11:08:16 -0600 (Wed, 14 Dec 2011) $
*/
#ifndef VP890_API_H
#define VP890_API_H
#include "vp_hal.h"
#include "vp_CSLAC_types.h"
#include "vp_api_common.h"
#ifdef VP890_INCLUDE_TESTLINE_CODE
#include "vp_api_test.h"
#ifdef VP890_EZ_MPI_PCM_COLLECT
#include "vp_pcm_compute.h"
#endif
#endif
/*
* Note that this value must be >=2 even when only using the single FXO device.
* That's because this is often used in looping through the line context pointers
* in the device context indexed by "channelId". The FXO channelId = 1 so the
* loop operations must be allowed to index into the second element.
*/
#define VP890_MAX_NUM_CHANNELS 2
#define VP890_MAX_MPI_DATA 15 /* Max data from any MPI read command */
#define VP890_INT_SEQ_LEN 22
#ifndef VP890_UL_SIGREG_LEN
#define VP890_UL_SIGREG_LEN 0x02
#endif
#ifndef VP890_B1_FILTER_LEN
#define VP890_B1_FILTER_LEN 0x0E
#endif
#ifndef VP890_B2_FILTER_LEN
#define VP890_B2_FILTER_LEN 0x02
#endif
#ifndef VP890_SIGA_PARAMS_LEN
#define VP890_SIGA_PARAMS_LEN 0x0B
#endif
#ifndef VP890_DC_FEED_LEN
#define VP890_DC_FEED_LEN 0x02
#endif
#ifndef VP890_ICR1_LEN
#define VP890_ICR1_LEN 0x04
#endif
#ifndef VP890_ICR2_LEN
#define VP890_ICR2_LEN 0x04
#endif
#ifndef VP890_ICR3_LEN
#define VP890_ICR3_LEN 0x04
#endif
#ifndef VP890_ICR4_LEN
#define VP890_ICR4_LEN 0x04
#endif
#ifndef VP890_DC_CAL_REG_LEN
#define VP890_DC_CAL_REG_LEN 0x02
#endif
#ifndef VP890_LOOP_SUP_LEN
#define VP890_LOOP_SUP_LEN 0x04
#endif
#ifndef VP890_TEST_DATA_LEN
#define VP890_TEST_DATA_LEN 0x0E
#endif
#ifndef VP890_REGULATOR_PARAM_LEN
#define VP890_REGULATOR_PARAM_LEN 0x03
#endif
#ifndef VP890_REGULATOR_TIMING_LEN
#define VP890_REGULATOR_TIMING_LEN 0x06
#endif
#ifndef VP890_REGULATOR_CTRL_LEN
#define VP890_REGULATOR_CTRL_LEN 0x01
#endif
#ifndef VP890_CONV_CFG_LEN
#define VP890_CONV_CFG_LEN 0x01
#endif
/**< Required Vp890 Device and Line Objects for user instantiation if a Vp890
* device is used
*/
/**< Structure that defines the Vp890 Device Profile. Current as of the first
* Device Profile version (ver 0).
*/
typedef struct Vp890DeviceProfileType {
uint8 profVersion;
uint16 pcmClkRate; /**< Used to verify valid TX/RX Timeslot setting */
uint8 mClkMask;
uint16 tickRate; /**< Primary API-II tick for this device */
uint8 devCfg1;
uint8 clockSlot;
#ifdef VP890_FXS_SUPPORT
uint8 swParams[VP890_REGULATOR_PARAM_LEN];
uint8 timingParams[VP890_REGULATOR_TIMING_LEN];
uint8 timingParamsFR[VP890_REGULATOR_TIMING_LEN];
bool peakManagement;
bool lowVoltOverride;
#endif
} Vp890DeviceProfileType;
#if defined (VP890_INCLUDE_TESTLINE_CODE)
/* Definitions for Test arguments */
typedef union Vp890TestArgsType {
VpTestPrepareType prepare;
VpTestConcludeType conclude;
VpTestOpenVType openV;
VpTestDcRLoopType dcRloop;
VpTestAcRLoopType acRloop;
VpTest3EleResAltResType resFltAlt;
VpTestMSocketType mSocket;
VpTestXConnectType xConnect;
VpTest3EleCapAltResType capAlt;
VpTestLoopCondType loopCond;
VpTestLoopbackType loopback;
VpTestRampType ramp;
VpTestRampInitType rampInit;
} Vp890TestArgsType;
typedef struct Vp890LineTestCalType {
uint8 slacState;
uint8 vpGain;
uint8 opCond;
uint8 opFunction;
uint8 switchTimes[VP890_REGULATOR_TIMING_LEN];
uint8 icr2[VP890_ICR2_LEN];
uint8 icr3[VP890_ICR3_LEN];
uint8 icr4[VP890_ICR4_LEN];
uint8 icr6[VP890_DC_CAL_REG_LEN];
} Vp890LineTestCalType;
typedef struct Vp890TestHeapType {
uint8 adcState;
int16 nextState; /**< Used when a pcm collection routine is started */
Vp890TestArgsType testArgs; /**< Saved test input arguments of current test */
uint8 opCond; /**< Saved Operation Condition */
uint8 opFunction; /**< Saved Operation Functions */
uint8 opMode; /**< Saved Operating Mode */
uint8 sysConfig; /** Saved System Configurations */
uint8 sigCtrl; /**< Signal Generator Control */
uint8 convCfg; /**< Saved Converter Config */
uint8 slacState; /**< Saved Slac State */
uint8 vpGain; /**< Voice Path Gain */
uint8 disn; /**< Digital Imped. Scaling Network */
uint8 lpSuper[VP890_LOOP_SUP_LEN]; /**< Saved Loop Sup. Parameters */
uint8 dcFeed[VP890_DC_FEED_LEN]; /**< Saved DC Feed Parameters */
uint8 switchReg[VP890_REGULATOR_PARAM_LEN]; /**< Switching Reg Parameters */
uint8 switchTimes[VP890_REGULATOR_TIMING_LEN]; /**< Switching Reg Timing */
uint8 icr1[VP890_ICR1_LEN];
uint8 icr2[VP890_ICR2_LEN];
uint8 icr3[VP890_ICR3_LEN];
uint8 icr4[VP890_ICR4_LEN];
uint8 icr6[VP890_DC_CAL_REG_LEN];
uint8 sigGenAB[VP890_SIGA_PARAMS_LEN]; /**< Saved Signal Generator A & B*/
uint8 b1Filter[VP890_B1_FILTER_LEN]; /**< Saved B1 filter coefficients */
uint8 b2Filter[VP890_B2_FILTER_LEN]; /**< Saved B2 filter coefficients */
/* used for collecting PCM data */
bool pcmRequest; /** < indication that pcm data was requested */
VpPcmOperationMaskType operationMask;
VpPcmOperationResultsType pcmResults; /** < stores the pcm operation results */
/* Used for common setup functions */
uint16 commonSetupState;
/* Used for storing line event mask data */
VpOptionEventMaskType preTestEventMask;
/* Used for saving and restoring slac state after calibration */
uint8 calSlacState;
/* Used for saving and restoring registers during calibration */
Vp890LineTestCalType calRegs;
/* Used for resflt lg speed up*/
uint16 speedupTime;
int16 previousAvg;
int16 vabComputed;
uint8 loopCnt;
bool compensate;
bool lowGain;
/* Used in the capacitance test */
int16 adcSampleBuffer[52];
uint8 requestedSamples;
uint8 saveConvConfig[VP890_CONV_CFG_LEN];
bool xtraBuffer;
/* The following members are for EZ mode calculations only*/
#ifdef VP890_EZ_MPI_PCM_COLLECT
VpPcmComputeTempType ezPcmTemp;
/* Used to debug under and overflow pcm collect conditions */
#ifdef VP_DEBUG
int8 underFlowValue;
uint32 overCnt;
uint32 underCnt;
#endif
#endif
} Vp890TestHeapType;
typedef struct Vp890CurrentTestType {
Vp890TestHeapType *pTestHeap;
uint8 testHeapId;
uint8 channelId; /**< Channel # for "this" line on the device. Indexed
* starting at 0, should not exceed the max number of
* lines supported by the device - 1 (max = 2, then
* channelId = {0, 1}
*/
bool prepared; /**< indicates if the current test is prepared */
bool preparing; /**< indicates if the test prepare is complete */
bool concluding; /**< indicates that the device is concluding a test */
bool nonIntrusiveTest; /**< indicates a "stealth" test */
VpTestIdType testId; /** < indicates the test currently running */
int16 testState; /**< maintains the currnt state of the current TestId */
uint16 handle;
} Vp890CurrentTestType;
typedef struct Vp890CalOffCoeffs {
int16 nullOffset;
int16 vabOffset;
int16 vahOffset;
int16 valOffset;
int16 vbhOffset;
int16 vblOffset;
int16 batOffset;
int16 imtOffset;
int16 ilgOffset;
} Vp890CalOffCoeffs;
#endif /*VP890_INCLUDE_TESTLINE_CODE*/
typedef enum Vp890BFiltCalStates {
VP890_BFILT_MEASURE,
VP890_BFILT_END
} Vp890BFiltCalStates;
#ifndef VP890_B1_FILTER_LEN
#define VP890_B1_FILTER_LEN 0x0E
#endif
#ifndef VP890_B2_FILTER_LEN
#define VP890_B2_FILTER_LEN 0x02
#endif
#ifndef VP890_OP_FUNC_LEN
#define VP890_OP_FUNC_LEN 0x01
#endif
#ifndef VP890_OP_COND_LEN
#define VP890_OP_COND_LEN 0x01
#endif
#ifndef VP890_CONV_CFG_LEN
#define VP890_CONV_CFG_LEN 0x01
#endif
#ifndef VP890_VP_GAIN_LEN
#define VP890_VP_GAIN_LEN 0x01
#endif
#ifndef VP890_DISN_LEN
#define VP890_DISN_LEN 0x01
#endif
#ifndef VP890_SYS_STATE_LEN
#define VP890_SYS_STATE_LEN 0x01
#endif
#ifndef VP890_GEN_CTRL_LEN
#define VP890_GEN_CTRL_LEN 0x01
#endif
#ifndef VP890_DEV_MODE_LEN
#define VP890_DEV_MODE_LEN 0x01
#endif
#ifndef VP890_CID_PARAM_LEN
#define VP890_CID_PARAM_LEN 0x01
#endif
#ifndef VP890_BAT_CALIBRATION_LEN
#define VP890_BAT_CALIBRATION_LEN 0x02
#endif
typedef struct Vp890CalBFilterData {
VpCalBFilterType inputData;
uint8 b1FiltData[VP890_B1_FILTER_LEN];
uint8 b2FiltData[VP890_B2_FILTER_LEN];
uint8 opFunct[VP890_OP_FUNC_LEN];
uint8 opCond[VP890_OP_COND_LEN];
uint8 convCfg[VP890_CONV_CFG_LEN];
uint8 vpGain[VP890_VP_GAIN_LEN];
uint16 vRms;
uint8 listLength; /* In number of B-Filter coefficient sets */
int8 currentSet; /* Number of currently running B-Filter set */
int8 bestSet; /* Number of the best set so far */
} Vp890CalBFilterData;
#define VP890_BFILT_SAMPLE_TIME (70)
/*
* IMPORTANT: Make sure to update the "stateInt" member of the device object if
* the size of this type changes. There is no instance of this type itself.
*/
#define VP890_RESET (0x0000) /**< Set at the begining of init device */
#define VP890_IS_HIGH_VOLTAGE (0x0010) /**< Set when device is high voltage device */
#define VP890_IS_SINGLE_CHANNEL (0x0020) /**< Set when a single channel device is found*/
#define VP890_LINE1_IS_FXO (0x0100) /**< Set if device detection indicates line1 as FXO */
#define VP890_WIDEBAND (0x0200) /**< Set if device supports Wideband mode */
#define VP890_LINE0_LP (0x0400) /**< Set if line 0 allows low power mode */
#define VP890_LINE1_LP (0x0800) /**< Set if line 1 allows low power mode */
#define VP890_IS_FXO_ONLY (0x1000) /**< Set when the device contains only FXO lines */
#define VP890_SYS_CAL_COMPLETE (0x2000) /**< Set when the system calibration structure has been initialied */
#define VP890_CAL_RELOAD_REQ (0x4000) /**< Set when the line calibration values need to be reloaded. */
#define VP890_FORCE_FREE_RUN (0x8000) /**< Set when app calls VpFreeRun() (start), cleared when called with stop.
* This prevents the VP-API-II from automatically exiting free run mode
* upon PCLK recovery.
*/
/**< Line Status types to minimize code space in line object (compared to each
* status being maintined by a uint8 type)
*/
typedef enum Vp890LineStatusType {
VP890_INIT_STATUS = 0x0000,
VP890_IS_FXO = 0x0001, /**< Set if the line is configured for FXO */
VP890_BAD_LOOP_SUP = 0x0002, /**< Set when the Loop Supervision has been
* changed in such a way inconsistent with
* the user's specifications. This is done
* in internal to the API to make some
* functions work (e.g., Msg Wait Pulse).
*/
VP890_DP_SET1_DONE = 0x0004, /**< Set when Dial Pulse detection machine
* is "done" on the current dial pulse using
* the "first" set of DP parameters
*/
VP890_DP_SET2_DONE = 0x0008, /**< Set when Dial Pulse detection machine
* is "done" on the current dial pulse using
* the 2nd set of DP parameters
*/
VP890_SLS_CALL_FROM_API = 0x0010, /**< Set if Set Line State is called
* from an API function (e.g., cadence).
*/
VP890_LINE_IN_CAL = 0x0020, /**< Set while line running cal routine */
VP890_LOW_POWER_EN = 0x0080, /**< Set when line is operating in low power
* mode
*/
VP890_LINE_LEAK = 0x0100, /**< Set when leakage is detected on the line
* such that low power mode is prevented.
*/
VP890_CHECK_LEAK = 0x0200, /**< Set when API-II is testing for leakage
* on the line
*/
VP890_INIT_COMPLETE = 0x0800, /**< Set when InitLine has been completed
* on this line.
*/
VP890_PREVIOUS_HOOK = 0x1000, /**< Set if Last Hook Event reported was
* off-hook, cleared if last event was
* on-hook.
*/
VP890_RING_GEN_NORM = 0x2000, /**< Set when the Generators are known last
* to be programmed to the application
* specified ringing profile. Cleared
* when line tests are run because the same
* generator is used for non-ringing.
*/
VP890_RING_GEN_REV = 0x4000 /**< Set when the Generators are known last
* to be programmed to the application
* specified ringing profile. Cleared
* when line tests are run because the same
* generator is used for non-ringing.
*/
} Vp890LineStatusType;
typedef struct Vp890CidCorrectionPair {
uint16 volts;
uint16 gain;
} Vp890CidCorrectionPair;
typedef enum Vp890PllRecoveryStateType {
VP890_PLL_RECOVERY_ST_RESET,
VP890_PLL_RECOVERY_ST_DISABLE,
VP890_PLL_RECOVERY_ST_ENABLE_1,
VP890_PLL_RECOVERY_ST_ENABLE_2,
VP890_PLL_RECOVERY_ST_MEASURE,
VP890_PLL_RECOVERY_ST_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE/* Portability Req*/
} Vp890PllRecoveryStateType;
typedef struct Vp890CalLoopData {
int16 prevVal;
uint8 loopNum;
uint8 adcLoopMax;
uint8 adcRoute;
} Vp890CalLoopData;
typedef struct Vp890IlaCalData {
int16 ilaNorm;
int16 ilgNorm;
} Vp890IlaCalData;
typedef struct Vp890VocCalData {
int16 vocNorm;
int16 vocRev;
} Vp890VocCalData;
typedef struct Vp890CalTypeData {
int16 swyVolt;
Vp890CalLoopData loopData;
Vp890IlaCalData ilaData;
Vp890VocCalData vocData;
Vp890CalBFilterData bFilterData;
} Vp890CalTypeData;
typedef struct Vp890CalLineData {
bool calDone; /**< TRUE when calibration has been performed on
* this line
*/
bool reversePol; /**< TRUE if CAL starts in polrev */
Vp890CalTypeData typeData;
uint8 codecReg;
uint8 dcFeedRef[VP890_DC_FEED_LEN]; /* Copied from dc profile */
uint8 dcFeed[VP890_DC_FEED_LEN]; /* use for VAS and VOC */
uint8 dcFeedPr[VP890_DC_FEED_LEN]; /* use for VAS and VOC */
uint16 calState;
uint8 sysState;
uint8 icr2[VP890_ICR2_LEN];
uint8 icr3[VP890_ICR3_LEN];
uint8 disnVal[VP890_DISN_LEN];
uint8 vpGain[VP890_VP_GAIN_LEN];
uint8 loopSup[VP890_LOOP_SUP_LEN];
bool forceCalDataWrite;
/* Signal generator calibration temporary backup */
uint8 sigGenA[VP890_SIGA_PARAMS_LEN];
uint8 calReg[VP890_DC_CAL_REG_LEN];
uint8 asscReg;
/**< Battery Calibration values used to compute final VAS values */
uint8 swCal[VP890_BAT_CALIBRATION_LEN];
uint16 minVas; /**< Minimum VAS value determined during IMT calibration.
* This is stored in the same format used to compute the VAS
* value rather than the device format. This increases the
* data memory space requirements slightly, but reduces the
* size for code space and simplifies the logic when applied.
*/
uint16 vasStart; /**< Used to speedup VAS calibration by providing the
* minimum starting VAS. This value is computed from the
* battery adjustment and minVas (above).
*/
} Vp890CalLineData;
typedef enum Vp890FxoCurrentMonitorStates {
VP890_CURRENT_MONITOR_DISABLED,
VP890_CURRENT_MONITOR_OFFSET,
VP890_CURRENT_MONITOR_BUFFER0,
VP890_CURRENT_MONITOR_BUFFER1,
VP890_CURRENT_MONITOR_BUFFER2,
VP890_CURRENT_MONITOR_BUFFER3,
VP890_CURRENT_MONITOR_BUFFER4,
VP890_CURRENT_MONITOR_NORMAL
} Vp890FxoCurrentMonitorStates;
#define VP890_PCM_BUF_SIZE 5
typedef struct Vp890FxoCurrentMonitorType {
Vp890FxoCurrentMonitorStates stateValue;
int16 currentBuffer[VP890_PCM_BUF_SIZE];
int16 currentOffset;
uint8 offsetMeasurements;
/* This is updated when delta across all data is minimal */
int32 steadyStateAverage;
/* Set TRUE when last set of data experienced a line transient */
bool invalidData;
} Vp890FxoCurrentMonitorType;
typedef struct Vp890FxoLowVoltageMonitorType {
bool enabled;
uint8 numDisc;
uint8 numNotDisc;
} Vp890FxoLowVoltageMonitorType;
#define VP890_SYS_CAL_POLARITY_LENGTH 2
#define VP890_SYS_CAL_CHANNEL_LENGTH 1
/* Contains calibration error values -- in +/-10mv LSB */
typedef struct Vp890SysCalResultsType {
int16 abvError[1];
int16 vocOffset[VP890_SYS_CAL_CHANNEL_LENGTH][VP890_SYS_CAL_POLARITY_LENGTH];
int16 vocError[VP890_SYS_CAL_CHANNEL_LENGTH][VP890_SYS_CAL_POLARITY_LENGTH];
int16 sigGenAError[VP890_SYS_CAL_CHANNEL_LENGTH][VP890_SYS_CAL_POLARITY_LENGTH];
int16 ila20[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 ila25[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 ila32[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 ila40[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 ilaOffsetNorm[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 ilgOffsetNorm[VP890_SYS_CAL_CHANNEL_LENGTH];
uint8 vas[VP890_SYS_CAL_CHANNEL_LENGTH][VP890_SYS_CAL_POLARITY_LENGTH];
int16 vagOffsetNorm[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 vagOffsetRev[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 vbgOffsetNorm[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 vbgOffsetRev[VP890_SYS_CAL_CHANNEL_LENGTH];
int16 swyOffset[VP890_SYS_CAL_CHANNEL_LENGTH]; /**< Used to hold SWY Offset */
/* Used for capacitance line test only */
int32 tipCapCal[VP890_SYS_CAL_CHANNEL_LENGTH];
int32 ringCapCal[VP890_SYS_CAL_CHANNEL_LENGTH];
} Vp890SysCalResultsType;
#define VP890_CAL_STRUCT_SIZE (18*sizeof(int16) + 2*sizeof(uint8) + 2*sizeof(int32))
/* Vp890 specific Device Object */
typedef struct Vp890DeviceObjectType {
VpDeviceIdType deviceId; /* Device Id indication */
VpDeviceStaticInfoType staticInfo; /**< Info that will not change during runtime. */
VpDeviceDynamicInfoType dynamicInfo; /**< Info that will change during runtime */
/* state is a bit-mask of VpDeviceStateType values */
uint16 state;
/* stateInt is a bit-mask of values */
uint16 stateInt;
VpOptionEventMaskType deviceEventsMask;
VpOptionEventMaskType deviceEvents;
uint16 eventHandle; /** Application defined event handle */
uint16 timeStamp; /**< Used to track event timing. Increment by ticks */
int16 timeRemainder;
VpGetResultsOptionsType getResultsOption;
VpOptionCriticalFltType criticalFault;
VpRelGainResultsType relGainResults;
/* Used only to reduce MPI traffic (avoid read/modify/write */
#ifdef VP890_FXS_SUPPORT
uint8 swParamsCache[VP890_REGULATOR_PARAM_LEN];
uint8 switchCtrl[VP890_REGULATOR_CTRL_LEN];
#endif
uint8 devMode[VP890_DEV_MODE_LEN];
uint16 devTimer[VP_DEV_TIMER_LAST];
Vp890DeviceProfileType devProfileData;
VpCSLACDeviceProfileTableType devProfileTable;
VpCSLACProfileTableEntryType profEntry;
#ifdef VP890_INCLUDE_TESTLINE_CODE
VpTestResultType testResults;
#endif
uint8 intReg[VP890_UL_SIGREG_LEN]; /**< Holds signaling data info for the device */
uint8 intReg2[VP890_UL_SIGREG_LEN];
uint8 responseData; /**< Holds data for Response events on the device */
uint8 txBufferDataRate;
#if !defined(VP_REDUCED_API_IF) || defined(ZARLINK_CFG_INTERNAL)
uint8 mpiData[VP890_MAX_MPI_DATA]; /**< Buffer for MPI Low level reads to
* hold maximum amount of MPI data that
* is possible
*/
#endif
uint8 mpiLen; /**< Length of data to be copied into mpiData buffer */
#ifdef VP890_FXS_SUPPORT
/* Two sets of dial pulse specifications are provide to support NTT dial
* pulse detection windows of 10pps and 20pps while excluding 15pps */
VpOptionPulseType pulseSpecs;
VpOptionPulseType pulseSpecs2;
#endif
uint8 testDataBuffer[VP890_TEST_DATA_LEN];
#if defined (VP890_INCLUDE_TESTLINE_CODE)
Vp890CurrentTestType currentTest;
Vp890CalOffCoeffs calOffsets[VP890_MAX_NUM_CHANNELS];
#endif /* VP890_INCLUDE_TESTLINE_CODE */
#if defined (VP_CC_890_SERIES) || defined (VP_CC_KWRAP)
Vp890SysCalResultsType vp890SysCalData;
#endif
#ifdef VP_DEBUG
/* For runtime enabling of debug output: */
uint32 debugSelectMask;
#endif
/* Used to hold the device level ecVal (to keep track of WB mode). */
uint8 ecVal;
/*
* Holds the last channel information changed to/from Wideband mode since
* the last tick. If = 0, no change has been made. If = 1, ch0 if = 2, ch1.
* This is a handshake with the tick which detects it is not 0, makes the
* appropriate change and sets it back to 0.
*/
uint8 lastCodecChange;
} Vp890DeviceObjectType;
/* 890 specific Line Object */
typedef struct Vp890LineObjectType {
uint8 channelId;
uint8 ecVal;
VpTermType termType;
VpLineIdType lineId; /**< Application provided value for mapping
* a user defined type to a line context
*/
VpApiIntLineStateType lineState; /**< Line state info used for state
* transition handling and recall */
uint16 status; /**< Bit-mask of Vp890LineStatusType */
VpOptionCodecType codec;
/**< Used to delay slic write for LPM or Disconnect handling. */
uint8 nextSlicValue;
/**< Used to reduce MPI reads. */
uint8 slicValueCache;
uint8 opCond[VP890_OP_COND_LEN];
VpCslacTimerStruct lineTimers; /**< Timers for "this" line */
VpOptionEventMaskType lineEvents;
VpOptionEventMaskType lineEventsMask;
uint16 lineEventHandle; /**< Line specific event handle information */
uint16 signaling1;
uint16 signaling2;
uint16 dtmfDigitSense; /**< Used to hold the DTMF digit reported
* with VpDtmfDigitDetected() until the
* VP_LINE_EVID_DTMF_DIG is generated. */
uint8 signalingData; /**< Holds data for Signaling events on this line */
uint16 processData; /**< Holds data for Process events on this line */
uint16 responseData; /**< Holds data for Response events on this line */
#ifdef VP890_FXO_SUPPORT
uint8 fxoData; /**< Holds data for FXO events on this line */
uint8 fxoRingStateFlag; /**< Indicates a state change request during ringing,
to be serviced when ringing is over */
VpLineStateType fxoRingState; /**< State to change to when ringing is over */
VpCslacLineCondType preDisconnect; /**< The disconnect state prior to timer start */
VpDigitGenerationDataType digitGenStruct; /**< Used on FXO lines for
* generating pulse digits */
uint8 ringDetMax; /**< Stores the user specified maximum
* ringing detect period for FXO lines. This
* value may be outside the device range, in
* which case the SW will implement upper
* period detection */
uint8 ringDetMin; /**< Stores the user specified maximum
* ringing detect period for FXO lines that
* is within the device range. This value is
* used as "minimum" that is detected by SW.
* Actual minimum period is supported by the
* device period detector itself. */
uint8 dPoh; /**< Stores the user specified parallel
* offhook integration time for use
* in timing for the POH event */
uint8 userDtg; /* User-configured DTG setting */
uint8 cidDtg; /* DTG register setting for CID
* correction */
int8 cidCorrectionSample; /* Last line voltage sample for CID
* correction */
uint8 cidCorrectionCtr; /* Counter for CID correction line
* voltage samples */
Vp890PllRecoveryStateType pllRecoveryState; /* State for the pll issue fix */
uint8 pllRecoverAttempts; /* Number if pll recovery retries */
Vp890FxoCurrentMonitorType currentMonitor;
Vp890FxoLowVoltageMonitorType lowVoltageDetection;
#endif
#ifdef VP890_FXS_SUPPORT
/*
* Array to hold ringing parameters used in the Signal Generator. This is
* needed when signal generator A is set to a tone, then set back to ringing
* without the user re-specifying the ringing profile
*/
uint8 ringingParams[VP890_SIGA_PARAMS_LEN];
VpProfilePtrType pRingingCadence; /**< Currently used ringing cadence on
* this line */
VpOptionRingControlType ringCtrl;
VpProfilePtrType pCidProfileType1; /**< Currently used caller ID profile
* on this line for sequenced cid */
VpDialPulseDetectType dpStruct; /**< Used on FXS lines for detecting pulse
* digits*/
VpDialPulseDetectType dpStruct2; /**< Used on FXS lines for detecting pulse
* digits using 2nd set of dp specs. */
VpOptionPulseModeType pulseMode;
VpRelayControlType relayState; /* Used to hold current line
* relay state */
uint8 dcCalValues[VP890_DC_CAL_REG_LEN];
/* Loop supervision parameters */
uint8 hookHysteresis;
bool internalTestTermApplied;
#endif
Vp890CalLineData calLineData; /* Data used during VpCalLine() */
/* Holds user definition for Loop Supervision configuration when
* "badLoopSup" is TRUE */
uint8 loopSup[VP890_LOOP_SUP_LEN];
VpOptionPcmTxRxCntrlType pcmTxRxCtrl; /* Defines how the PCM highway is
* set for "talk" linestates */
/*
* NOTE: Do not move the location or name of gx/grBase members. These may be
* used by applications to determine the gain of the GX/GR blocks in the
* AC profile. Using return from VpSetRelGain() is not usefull because that
* is the register setting. The customer would have to know how to convert
* that to linear values, which is not generally documented.
*/
uint16 gxBase; /**< Cached GX register, in 2.14 int format */
uint16 gxCidLevel; /**< GX Caller ID correction factor (2.14) */
uint16 gxUserLevel; /**< User specified relative GX level (2.14) */
uint16 grBase; /**< Cached GR register, in 2.14 int format */
uint16 grUserLevel; /**< User specified relative GR level (2.14) */
int16 absGxGain; /**< Cached ABS A-to-D Gain, simplifies code. */
int16 absGrGain; /**< Cached ABS D-to-A Gain, simplifies code. */
#ifdef VP_CSLAC_SEQ_EN
#ifdef VP890_FXS_SUPPORT
VpCallerIdType callerId; /**< Caller ID related information */
VpCidSeqDataType cidSeq; /**< CID Sequencer related information */
bool suspendCid;
uint8 tickBeginState[VP890_CID_PARAM_LEN];
uint8 cidBytesRemain;
bool delayConsumed; /**< Set to TRUE when Polling Mode CID uses the
* loop read/delay method and has started it.
*/
#endif
VpSeqDataType cadence; /**< Sequencer related information */
/**< Array to control internally run sequences */
VpProfileDataType intSequence[VP890_INT_SEQ_LEN];
#endif
#ifdef VP890_LP_SUPPORT
uint8 leakyLineCnt; /*
* Keeps track of # of times off-hook was detected (LP Mode)
* that was not further verified after exiting LP Mode. Reset
* when off-hook is verified.
*/
#endif
#ifdef VP890_FXS_SUPPORT
VpHowlerModeCachedValues howlerModeCache;
uint8 icr2Values[VP890_ICR2_LEN]; /**< Cached to minimize device access */
uint8 icr3Values[VP890_ICR3_LEN]; /**< Cached to minimize device access */
uint8 icr4Values[VP890_ICR4_LEN]; /**< Cached to minimize device access */
#endif
/* Used in FXO PLL Recovery, FXS Line Test, and FXS Generic and Low Power Mode Control */
uint8 icr1Values[VP890_ICR1_LEN]; /**< Cached to minimize device access */
uint8 sigGenCtrl[VP890_GEN_CTRL_LEN]; /**< Cached to minimize device access */
#ifdef VP_DEBUG
/* For runtime enabling of debug output: */
uint32 debugSelectMask;
#endif
} Vp890LineObjectType;
#endif /* VP890_API_H */