/** \file vp880_api.h
 * vp880_api.h
 *
 *  Header file that define all the commands for the Vp880 device.
 *
 * Copyright (c) 2011, Microsemi
 *
 * $Revision: 9253 $
 * $LastChangedDate: 2011-12-14 11:08:16 -0600 (Wed, 14 Dec 2011) $
 */

#ifndef VP880_API_H
#define VP880_API_H

#include "vp_hal.h"
#include "vp_CSLAC_types.h"
#include "vp_api_common.h"

#define VP880_MAX_NUM_CHANNELS   2

#ifdef VP880_INCLUDE_TESTLINE_CODE
#include "vp_api_test.h"
  #ifdef VP880_EZ_MPI_PCM_COLLECT
  #include  "vp_pcm_compute.h"
  #endif
#endif

#define VP880_MAX_MPI_DATA  15   /* Max data from any MPI read command */
#define VP880_INT_SEQ_LEN       22

#ifndef VP880_DC_FEED_LEN
#define VP880_DC_FEED_LEN    0x02
#endif

#ifndef VP880_REGULATOR_PARAM_LEN
#define VP880_REGULATOR_PARAM_LEN   0x03
#endif

#ifndef VP880_LOOP_SUP_LEN
#define VP880_LOOP_SUP_LEN      0x04
#endif

#ifndef VP880_SIGA_PARAMS_LEN
#define VP880_SIGA_PARAMS_LEN   0x0B
#endif

#ifndef VP880_UL_SIGREG_LEN
#define VP880_UL_SIGREG_LEN     0x02
#endif

#ifndef VP880_B1_FILTER_LEN
#define VP880_B1_FILTER_LEN     0x0E
#endif

#ifndef VP880_B2_FILTER_LEN
#define VP880_B2_FILTER_LEN     0x02
#endif

#ifndef VP880_ICR1_LEN
#define VP880_ICR1_LEN      0x04
#endif

#ifndef VP880_ICR2_LEN
#define VP880_ICR2_LEN      0x04
#endif

#ifndef VP880_ICR3_LEN
#define VP880_ICR3_LEN      0x04
#endif

#ifndef VP880_ICR4_LEN
#define VP880_ICR4_LEN      0x04
#endif

#ifndef VP880_ICR5_LEN
#define VP880_ICR5_LEN      0x02
#endif

#ifndef VP880_ICR6_LEN
#define VP880_ICR6_LEN      0x02
#endif

#ifndef VP880_ICR6_LEN
#define VP880_ICR6_LEN      0x02
#endif

#ifndef VP880_BAT_CALIBRATION_LEN
#define VP880_BAT_CALIBRATION_LEN 0x02
#endif

#ifndef VP880_REGULATOR_CTRL_LEN
#define VP880_REGULATOR_CTRL_LEN    0x01
#endif

#ifndef VP880_TX_PCM_BUFF_LEN
#define VP880_TX_PCM_BUFF_LEN 0x0E
#endif

#ifndef VP880_INT_SWREG_PARAM_LEN
#define VP880_INT_SWREG_PARAM_LEN   0x06
#endif

#ifndef VP880_DISN_LEN
#define VP880_DISN_LEN              0x01
#endif

#ifndef VP880_VP_GAIN_LEN
#define VP880_VP_GAIN_LEN           0x01
#endif

#ifndef VP880_SYS_STATE_LEN
#define VP880_SYS_STATE_LEN     0x01
#endif

#ifndef VP880_OP_FUNC_LEN
#define VP880_OP_FUNC_LEN         0x01
#endif

#ifndef VP880_OP_COND_LEN
#define VP880_OP_COND_LEN         0x01
#endif

#ifndef VP880_CONV_CFG_LEN
#define VP880_CONV_CFG_LEN      0x01
#endif

#ifndef VP880_DEV_MODE_LEN
#define VP880_DEV_MODE_LEN  0x01
#endif

#ifndef VP880_GEN_CTRL_LEN
#define VP880_GEN_CTRL_LEN  0x01
#endif

#ifndef VP880_CID_PARAM_LEN
#define VP880_CID_PARAM_LEN 0x01
#endif


/**< Required Vp880 Device and Line Objects for user instantiation if a Vp880 device is used */

/**< Structure that defines the Vp880 Device Profile. Current as of the first
 * Device Profile version (ver 0).
 */
typedef struct Vp880DeviceProfileType {
    uint8   profVersion;
    uint16  pcmClkRate;      /**< Used to verify valid TX/RX Timeslot setting */
    uint16  tickRate;        /**< Primary API-II tick for this device */
    uint8   devCfg1;
    uint8   clockSlot;
    uint8   systemConfig;   /**< Used to indicate system supply configuration */

#ifdef VP880_FXS_SUPPORT
    bool    peakManagement;
    bool    lowVoltOverride;
#endif
} Vp880DeviceProfileType;

/* Byte/Bit definitions from the device profile */
#define VP880_DEV_PROFILE_OPERATIONAL_CFG   (2u)
#define VP880_DEV_PROFILE_PK_PWR_MGMT       0x01
#define VP880_DEV_PROFILE_LOW_VOLT_OVERRIDE 0x02

#define VP880_DEV_PROFILE_PCLK_MSB          (6u)
#define VP880_DEV_PROFILE_PCLK_LSB          (7u)
#define VP880_DEV_PROFILE_DEVCFG1           (8u)

#define VP880_DEV_PROFILE_SYSTEM_CFG        (9u)
#define VP880_ABS_CFG_SINGLE                0x00
#define VP880_ABS_CFG_SLAVE                 0x01
#define VP880_ABS_CFG_MASTER                0x02
#define VP880_ABS_CFG_MASK                  0x03

#define VP880_DEV_PROFILE_CLOCK_SLOT        (10u)
#define VP880_DEV_PROFILE_MAX_EVENTS        (11u)
#define VP880_DEV_PROFILE_TICKRATE_MSB      (12u)
#define VP880_DEV_PROFILE_TICKRATE_LSB      (13u)
#define VP880_DEV_PROFILE_SWITCHER_CMD      (14u)
#define VP880_DEV_PROFILE_SWITCHER_DATA0    (15u)
#define VP880_DEV_PROFILE_SWITCHER_DATA1    (16u)
#define VP880_DEV_PROFILE_SWITCHER_DATA2    (17u)

#define VP880_ABS_DEV_PROFILE_YVOLT         (18u)
#define VP880_ABS_DEV_PROFILE_ZVOLT         (19u)

#define VP880_DEV_PROFILE_TRACKER_INT_SW_REG    (18u)

#define VP880_DEV_PROFILE_ABS_INT_SW_REG    (24u)


/**< Line Status types to minimize code space in line object (compared to each
 * status being maintined by a uint8 type)
 */
typedef enum Vp880LineStatusType {
    VP880_INIT_STATUS = 0x0000,

    VP880_IS_FXO = 0x0001,  /**< Set if the line is configured for FXO */

    VP880_SLS_CALL_FROM_API = 0x0002,   /**< Set if Set Line State is called
                                         * from an API function (e.g., cadence).
                                         */

    VP880_BAD_LOOP_SUP = 0x0004,    /**< 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).
                                     */

    VP880_UNBAL_RINGING = 0x0008,   /**< Set if this line uses unbal ringing */

    VP880_DP_SET1_DONE = 0x0010,    /**< Set when Dial Pulse detection machine
                                     * is "done" on the current dial pulse using
                                     * the "first" set of DP parameters
                                     */

    VP880_DP_SET2_DONE = 0x0020,    /**< Set when Dial Pulse detection machine
                                     * is "done" on the current dial pulse using
                                     * the 2nd set of DP parameters
                                     */

    VP880_LINE_IN_CAL = 0x0040,    /**< Set when line is calibrating */

    VP880_LOW_POWER_EN = 0x0080,    /**< Set when line is operating in low power
                                     * mode
                                     */

    VP880_LINE_LEAK = 0x0100,      /**< Set when leakage is detected on the line
                                    * such that low power mode is prevented.
                                    */

    VP880_INIT_COMPLETE = 0x0800,  /**< Set when InitLine has been completed
                                    * on this line.
                                    */
    VP880_PREVIOUS_HOOK = 0x1000,  /**< Set if Last Hook Event reported was
                                    * off-hook, cleared if last event was
                                    * on-hook.
                                    */

    VP880_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.
                                    */
    VP880_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.
                                    */
} Vp880LineStatusType;

#if defined (VP880_INCLUDE_TESTLINE_CODE)
/* Definitions for Test arguments */
typedef union Vp880TestArgsType {
    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;
} Vp880TestArgsType;

typedef struct Vp880LineTestCalType {
    uint8 slacState;
    uint8 vpGain;
    uint8 opCond;
    uint8 opFunction;
    uint8 icr2[VP880_ICR2_LEN];
    uint8 icr3[VP880_ICR3_LEN];
    uint8 icr4[VP880_ICR4_LEN];
    uint8 icr6[VP880_ICR6_LEN];
} Vp880LineTestCalType;

typedef struct Vp880TestHeapType {
    uint8 adcState;
    int16 nextState; /**< Used when a pcm collection routine is started */

    Vp880TestArgsType testArgs; /**< Saved test input arguments of current test */

    uint8 opCond;                           /**< Saved Operation Condition */
    uint8 opFunction;                       /**< Saved Operation Functions */
    uint8 sigCtrl;                          /**< Signal Generator Control */
    uint8 slacState;                        /**< Saved Slac State */
    uint8 sysConfig;                        /** Saved System Configurations */
    uint8 vpGain;                           /**< Voice Path Gain */
    uint8 switchReg[VP880_REGULATOR_PARAM_LEN]; /**< Switching Reg Parameters */
    uint8 dcFeed[VP880_DC_FEED_LEN];        /**< Saved DC Feed Parameters */
    uint8 disn;                             /**< Digital Imped. Scaling Network */
    uint8 SwRegCtrl;                        /**< Switching Regulator Control */

    uint8 icr1[VP880_ICR1_LEN];
    uint8 icr2[VP880_ICR2_LEN];
    uint8 icr3[VP880_ICR3_LEN];
    uint8 icr4[VP880_ICR4_LEN];
    uint8 icr6[VP880_ICR6_LEN];
    uint8 lpSuper[VP880_LOOP_SUP_LEN];      /**< Saved Loop Sup. Parameters */
    uint8 sigGenAB[VP880_SIGA_PARAMS_LEN];  /**< Saved Signal Generator A & B */
    uint8 b1Filter[VP880_B1_FILTER_LEN];    /**< Saved B1 filter coefficients */
    uint8 b2Filter[VP880_B2_FILTER_LEN];    /**< Saved B2 filter coefficients */

    /* lg res flt uses this to bump up the battery */
    uint8 batCal[VP880_BAT_CALIBRATION_LEN];

    /* 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 registers during calibration */
    Vp880LineTestCalType 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[VP880_CONV_CFG_LEN];
    bool xtraBuffer;

    /* The following members are for EZ mode calculations only*/
#ifdef VP880_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

} Vp880TestHeapType;

typedef struct Vp880CurrentTestType {
    Vp880TestHeapType *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;

} Vp880CurrentTestType;

typedef struct Vp880CalOffCoeffs {
    int16 nullOffset;
    int16 vabOffset;
    int16 vahOffset;
    int16 valOffset;
    int16 vbhOffset;
    int16 vblOffset;
    int16 imtOffset;
    int16 ilgOffset;
} Vp880CalOffCoeffs;

#endif /*VP880_INCLUDE_TESTLINE_CODE*/

typedef struct Vp880AbvCalData {
    uint8 passCnt;
    bool initChange;    /**< As needed, set to TRUE when a state is changed in
                         * the calibration state machine.
                         */

    int16 swyVolt[2]; /**< One per channel used to measure SWY Voltage */
    int16 swzVolt[2]; /**< One per channel used to measure SWZ Voltage */

    uint8 isrpData[VP880_INT_SWREG_PARAM_LEN];
    uint8 icr1[2][VP880_ICR1_LEN];
    uint8 icr2[2][VP880_ICR2_LEN];
    uint8 icr3[2][VP880_ICR3_LEN];
    uint8 icr4[2][VP880_ICR4_LEN];
    uint8 disnVal[2][VP880_DISN_LEN];
    uint8 vpGain[2][VP880_VP_GAIN_LEN];
    uint8 sysState[2][VP880_SYS_STATE_LEN];
    uint8 opFunc[2][VP880_OP_FUNC_LEN];
    uint8 opCond[2][VP880_OP_COND_LEN];
    uint8 converterCfg[2][VP880_CONV_CFG_LEN];

    /*
     * This the switcher adjustments as determined by battery and VAS calibration
     * procedures.
     */
    uint8 switcherAdjust[2][VP880_BAT_CALIBRATION_LEN];

    /* This is to be compatible with VVA P1.3.0 */
    int16 swyOffset[2];
    int16 swzOffset[2];

    /* This is to be compatible with VVA P1.3.0 but not currently measured. */
    int16 swxbOffset[2];
} Vp880AbvCalData;

typedef struct Vp880CalLoopData {
    int16 prevVal;
    uint8 loopNum;
    uint8 adcLoopMax;
    uint8 adcRoute;
} Vp880CalLoopData;

typedef struct Vp880VocCalData {
    int16 vocNorm;
    int16 vocRev;
} Vp880VocCalData;

typedef struct Vp880CalTypeData {
    int16 swyVolt;
    Vp880CalLoopData loopData;
    Vp880VocCalData vocData;
} Vp880CalTypeData;


#define VP880_AC_PROFILE_SIZE   (80)    /* 80 Bytes is fixed size known for 880
                                         * AC Profiles up to PW 2.0.0
                                         */
#define VP880_DC_PROFILE_SIZE   (20)    /* 16 bytes should be enough, but this
                                         * profile size has changed over time.
                                         * Safe value with a few more bytes.
                                         */

#define VP880_RINGING_PROFILE_SIZE  (22)    /* 22 byte Ringing Profile size is
                                             * the only size ever created for
                                             * VE880 API. This should be enough.
                                             */

/*
 * Bit-Masks for calibration update required if line configuration change
 * attempted during calibration. Note that this only needs to flag/update the
 * line configuration that may affect calibration.
 */
#define AC_PROFILE_UPDATE_REQ       0x1
#define DC_PROFILE_UPDATE_REQ       0x2
#define RINGING_PROFILE_UPDATE_REQ  0x4
#define CODEC_UPDATE_REQ            0x8

/*  these are in order of execution ALWAYS do not reorder them !!!! */
typedef enum Vp880CalLineState {
    VP880_CAL_SETUP                 =   0,
    VP880_CAL_SETUP_RELEASE_CLAMPS,
    VP880_RAMP_TO_POLREV_SETUP,
    VP880_RAMP_TO_POLREV_RAMP1,
    VP880_RAMP_TO_POLREV_SWAP_POLARITY,
    VP880_RAMP_TO_POLREV_RAMP2,
    VP880_RAMP_TO_POLREV_GOACTIVE,
    VP880_RAMP_TO_POLREV_COMPLETE,

    VP880_IMT_PR_SETUP              =   20,
    VP880_IMT_PR_SET_ADC,
    VP880_IMT_PR_MEASURE,

#ifdef VP880_TRACKER_SUPPORT
    VP880_VAS_PR_SETUP              =   30,
    VP880_VAS_PR_STEP,
    VP880_VAS_PR_SET_ADC,
    VP880_VAS_PR_MEASURE,
    VP880_VAS_PR_STORE,
#endif

    VP880_VAB_PR_SETUP              =   40,
    VP880_VAB_PR_MEASURE,

    VP880_VAB_PR_ADC_OFFSET_SETUP   =   50,
    VP880_VAB_PR_ADC_OFFSET_MEASURE,

    VP880_VA_PR_ADC_OFFSET_SETUP    =   60,
    VP880_VA_PR_ADC_OFFSET_MEASURE,

    VP880_VB_PR_ADC_OFFSET_SETUP    =   70,
    VP880_VB_PR_ADC_OFFSET_MEASURE,

    VP880_COLLAPSE_FEED             =   80,

    VP880_GENA_NP_OFFSET_SETUP      =   90,
    VP880_GENA_NP_OFFSET_SET_ADC,
    VP880_GENA_NP_OFFSET_MEASURE,
    VP880_GENA_NP_OFFSET_RESTORE,

    VP880_ILG_OFFSET_SETUP          =   100,
    VP880_ILG_OFFSET_MEASURE,

    VP880_ILA_OFFSET_SETUP          =   110,
    VP880_ILA_OFFSET_MEASURE,


    VP880_RESTORE_DAC               =   120,

    VP880_VAB_NP_ADC_OFFSET_SETUP   =   130,
    VP880_VAB_NP_ADC_OFFSET_MEASURE,

    VP880_VA_NP_ADC_OFFSET_SETUP    =   140,
    VP880_VA_NP_ADC_OFFSET_MEASURE,

    VP880_VB_NP_ADC_OFFSET_SETUP    =   150,
    VP880_VB_NP_ADC_OFFSET_MEASURE,

    VP880_ILA_SETUP                 =   160,
    VP880_ILA_ADJUST,
    VP880_ILA_SET_ADC,
    VP880_ILA_MEASURE,
    VP880_ILA_MEASURE_TRACKER,
    VP880_ILA_MEASURE_ABS,

    VP880_RESTORE_FEED              =   170,

    VP880_IMT_NP_SETUP              =   180,
    VP880_IMT_NP_SET_ADC,
    VP880_IMT_NP_MEASURE,

#ifdef VP880_TRACKER_SUPPORT
    VP880_VAS_NP_SETUP              =   190,
    VP880_VAS_NP_STEP,
    VP880_VAS_NP_SET_ADC,
    VP880_VAS_NP_MEASURE,
    VP880_VAS_NP_STORE,
#endif

    VP880_VAB_NP_SETUP              =   200,
    VP880_VAB_NP_MEASURE,

    VP880_CAL_ADJUST                =   210,

    VP880_CAL_RESTORE               =   254,

    /**< Used in API to force valid/unused initial value */
    VP880_CAL_ENUM_SIZE             = (VP880_CAL_RESTORE + 1)

} Vp880CalLineState;

typedef struct Vp880CalLineData {
    bool calDone;           /**< TRUE when calibration has been performed on
                             * this line
                             */
    bool reversePol;        /**< TRUE when line is in reverse polarity */

    Vp880CalTypeData typeData;

    uint8 codecReg;

    uint8 dcFeedRef[VP880_DC_FEED_LEN]; /**< Customer settings per profile */
    uint8 dcFeed[VP880_DC_FEED_LEN];    /**< Normal polarity calibrated values */
    uint8 dcFeedPr[VP880_DC_FEED_LEN];  /**< Reverse polarity calibrated values */

    Vp880CalLineState calLineState;
    uint8 sysState;

    uint8 icr2[VP880_ICR2_LEN];
    uint8 icr3[VP880_ICR3_LEN];

    uint8 disnVal[VP880_DISN_LEN];
    uint8 vpGain[VP880_VP_GAIN_LEN];
    uint8 loopSup[VP880_LOOP_SUP_LEN];

    bool forceCalDataWrite;

    /* Signal generator calibration temporary backup */
    uint8 sigGenA[VP880_SIGA_PARAMS_LEN];
    uint8 calReg[VP880_ICR6_LEN];
    uint8 asscReg;

    /**< Battery Calibration values used to compute final VAS values */
    uint8 swCal[VP880_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;    /**< Starting point for VAS to reduce calibration time.
                         * This value is based on battery adjustment and the
                         * minimum vas allowed ("minVas" above).
                         */

    /*
     * Cached user data applied after calibration in case line configuration is
     * changed during calibration.
     */
    uint8 updateFlags;  /*
                         * Bit-Mask to mark the information that needs to be
                         * updated when calibration is complete. Note that some
                         * information is automatically updated when calibration
                         * is complete simply as part of the restore process.
                         */
    uint8 acProfile[VP880_AC_PROFILE_SIZE];
    uint8 dcProfile[VP880_DC_PROFILE_SIZE];
    uint8 ringingProfile[VP880_RINGING_PROFILE_SIZE];

    VpLineStateType usrState;

} Vp880CalLineData;

typedef enum Vp880CalDeviceState {
    VP880_CAL_INIT                  =   0,
    VP880_CAL_ERROR,
    VP880_CAL_MEASURE,
    VP880_CAL_OFFSET,
    VP880_CAL_ADC,
    VP880_CAL_STATE_CHANGE,
    VP880_CAL_INVERT_POL,
    VP880_CONVERTER_CHECK,
    VP880_CAL_DONE,
    VP880_CAL_CLEANUP,
    VP880_CAL_EXIT
} Vp880CalDeviceState;

typedef struct Vp880CalDeviceData {
    Vp880AbvCalData abvData;
    Vp880CalDeviceState calDeviceState;
    int16 calSet;   /* Target values for calibration */
    uint8 iteration;    /**< Used as fail-safe to prevent infinte retries */
} Vp880CalDeviceData;

typedef struct Vp880RingParams {
    bool channelArray[VP880_MAX_NUM_CHANNELS];
    uint8 stage[VP880_MAX_NUM_CHANNELS];
    uint8 swRegParam[VP880_REGULATOR_PARAM_LEN];
} Vp880RingParams;

typedef struct Vp880LineObjectType {
    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}
                         */

    uint8 ecVal;

    VpTermType termType;    /**< Termination type */

    uint16 status;  /**< Bit-mask of Vp880LineStatusType Keeps track of line state/config info*/

#ifdef VP_CSLAC_SEQ_EN
    VpSeqDataType cadence;      /**< Sequencer related information */

    /**< Array to control internally run sequences */
    VpProfileDataType intSequence[VP880_INT_SEQ_LEN];

#ifdef VP880_FXS_SUPPORT
    VpCallerIdType callerId;    /**< Caller ID related information */
    VpCidSeqDataType cidSeq;    /**< CID Sequencer related information */
    uint8 tickBeginState[VP880_CID_PARAM_LEN];
    uint8 cidBytesRemain;
    bool delayConsumed; /**< Set to TRUE when Polling Mode CID uses the loop
                         * read/delay method and has started it.
                         */

    bool suspendCid;

    VpProfilePtrType pRingingCadence;   /**< Currently used ringing cadence on
                                         * this line
                                         */

    VpProfilePtrType pMeterProfile;     /**< Currently used metering profile on
                                         * this line
                                         */

    VpProfilePtrType pCidProfileType1;  /**< Currently used caller ID profile
                                         * on this line for sequenced cid
                                         */
#endif  /* VP880_FXS_SUPPORT */

#ifdef VP880_FXO_SUPPORT
    VpDigitGenerationDataType digitGenStruct;   /**< Used on FXO lines for
                                                 * generating pulse digits
                                                 */
#endif  /* VP880_FXO_SUPPORT */
#endif  /* VP_CSLAC_SEQ_EN */

#ifdef VP880_FXS_SUPPORT
    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;

    /*
     * 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[VP880_SIGA_PARAMS_LEN];

    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.
                         */
    /* Loop supervision parameters */
    uint8 hookHysteresis;

    bool internalTestTermApplied;

    VpOptionRingControlType ringCtrl;

    /*
     * Used to track states for Ground Start Exit Timer Management. Use two steps - first step
     * completes final state control, the second step is for final hook and ground key debounce.
     */
    uint8 gsTimerExitState;

    /*
     * Used to track states for Disconnect Exit Timer Management. Use two steps - first step
     * completes final state control, the second step is for final hook and ground key debounce.
     */
    uint8 discTimerExitState;

    VpRelayControlType relayState;   /**< Used to hold current line relay state */

#endif

    VpOptionEventMaskType lineEventsMask;
    VpOptionEventMaskType lineEvents;

    uint16 signaling1;
    uint16 signaling2;
    uint8 signalingData;    /**< Holds data for Signaling events on this line */


#ifdef VP880_FXO_SUPPORT
    uint8 fxoData;          /**< Holds data for FXO events on this line */
    uint8 preRingPolRev;    /**< The polarity detected prior to ring detect */
    VpCslacLineCondType preDisconnect;    /**< The disconnect state prior to timer start */

    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.
                         */
#endif

    uint16 processData;     /**< Holds data for Process events on this line */

    uint8 responseData;     /**< Holds data for Response events on this line */

    VpCslacTimerStruct lineTimers; /**< Timers for "this" line */
    VpApiIntLineStateType lineState;    /**< Line state info used for state
                                         * transition handling and recall
                                         */
    uint8 nextSlicValue;
    uint8 slicValueCache;   /**< Used to reduce MPI reads. */

    /*
     * Holds user definition for Loop Supervision configuration when
     * "badLoopSup" is TRUE
     */
    uint8 loopSup[VP880_LOOP_SUP_LEN];

    uint16 lineEventHandle; /**< Line specific event handle information */

    VpOptionPcmTxRxCntrlType pcmTxRxCtrl;   /* Defines how the PCM highway is
                                             * set for "talk" linestates
                                             */

    uint16 dtmfDigitSense;          /**< Used to hold the DTMF digit reported
                                     * with VpDtmfDigitDetected() until the
                                     * VP_LINE_EVID_DTMF_DIG is generated.
                                     */

    VpLineIdType lineId;    /**< Application provided value for mapping a line to
                             * a line context
                             */
    /*
     * NOTE: Do not move the location or name of these 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.
     */
    struct Vp880RelGainValues {
        uint16 gxInt;       /**< Cached GX register, in 2.14 int format */
        uint16 grInt;       /**< Cached GR register, in 2.14 int format */
        int16 absGxGain;    /**< Cached ABS A-to-D Gain, simplifies code. */
        int16 absGrGain;    /**< Cached ABS D-to-A Gain, simplifies code. */
    } gain;

    Vp880CalLineData calLineData;

    VpOptionCodecType codec;

#ifdef VP880_FXS_SUPPORT
    VpHowlerModeCachedValues howlerModeCache;

    uint8 icr1Values[VP880_ICR1_LEN];   /**< Cached to minimize device access */
    uint8 icr2Values[VP880_ICR2_LEN];   /**< Cached to minimize device access */
    uint8 icr3Values[VP880_ICR3_LEN];   /**< Cached to minimize device access */
    uint8 icr4Values[VP880_ICR4_LEN];   /**< Cached to minimize device access */
    uint8 icr6Values[VP880_ICR6_LEN];   /**< Cached to minimize device access */
#endif

    uint8 opCond[VP880_OP_COND_LEN];    /**< Cached to minimize device access */
    uint8 sigGenCtrl[VP880_GEN_CTRL_LEN];   /**< Cached to minimize device access */

#ifdef VP_DEBUG
    /* For runtime enabling of debug output: */
    uint32 debugSelectMask;
#endif

} Vp880LineObjectType;

/*
 * 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.
 */
typedef uint32 Vp880DeviceStateIntType;
#define VP880_IS_ABS                (0x0001)    /**< Set when the device is ABS type */
#define VP880_RLY_PROT_REQ          (0x0002)    /**< Set when the device requires relay protction on I/O 1 */
#define VP880_HAS_TEST_LOAD_SWITCH  (0x0004)    /**< Set when test load swith is available */
#define VP880_HAS_CALIBRATE_CIRCUIT (0x0008)    /**< Set when test cal circuit is available */

#define VP880_IS_HIGH_VOLTAGE       (0x0010)    /**< Set when device is a high voltage device */
#define VP880_IS_SINGLE_CHANNEL     (0x0020)    /**< Set when a single channel device is found*/
#define VP880_SYS_CAL_RESET         (0x0040)    /**< Set when Apply Cal is passed NULL to reset calibration values */
#define VP880_LINE0_IS_FXO          (0x0080)    /**< Set if device detection indicates line0 as FXO */

#define VP880_LINE1_IS_FXO          (0x0100)    /**< Set if device detection indicates line1 as FXO */
#define VP880_WIDEBAND              (0x0200)    /**< Set if device supports Wideband mode */
#define VP880_LINE0_LP              (0x0400)    /**< Set if line 0 allows low power mode */
#define VP880_LINE1_LP              (0x0800)    /**< Set if line 1 allows low power mode */

#define VP880_IS_FXO_ONLY           (0x1000)    /**< Set when the device contains only FXO lines */
#define VP880_SYS_CAL_COMPLETE      (0x2000)    /**< Set when the system calibration structure has been initialied */
#define VP880_CAL_RELOAD_REQ        (0x4000)    /**< Set when the line calibration values need to be reloaded. */
#define VP880_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.
                                                 */

#define VP880_SWY_DECAY_CMP         (0x10000)
#define VP880_SWZ_DECAY_CMP         (0x20000)

#define VP880_IS_TEST_CAPABLE       (0x40000)   /**< Set for devices that support Line Test */

/*
 * This value is set when either Device Calibration (VpInitDevice()/VpCalCodec()
 * completes successfully, or when loaded values by Apply System Coeff. After
 * VpInitDevice() this should only be NOT SET if device calibration failed or
 * if null was passed to Apply System Coeff.
 */
#define VP880_DEVICE_CAL_COMPLETE   (0x80000)


#define VP880_SYS_CAL_POLARITY_LENGTH  2
#define VP880_SYS_CAL_CHANNEL_LENGTH   2

/* Contains calibration error values -- in +/-10mv LSB */
typedef struct Vp880SysCalResultsType {
    int16 abvError[2];

    int16 vocOffset[VP880_SYS_CAL_CHANNEL_LENGTH][VP880_SYS_CAL_POLARITY_LENGTH];
    int16 vocError[VP880_SYS_CAL_CHANNEL_LENGTH][VP880_SYS_CAL_POLARITY_LENGTH];

    int16 sigGenAError[VP880_SYS_CAL_CHANNEL_LENGTH][VP880_SYS_CAL_POLARITY_LENGTH];

    int16 ila20[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 ila25[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 ila32[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 ila40[VP880_SYS_CAL_CHANNEL_LENGTH];

    int16 ilaOffsetNorm[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 ilgOffsetNorm[VP880_SYS_CAL_CHANNEL_LENGTH];

    /* Used for Tracker only */
    uint8 vas[VP880_SYS_CAL_CHANNEL_LENGTH][VP880_SYS_CAL_POLARITY_LENGTH];

    int16 vagOffsetNorm[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 vagOffsetRev[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 vbgOffsetNorm[VP880_SYS_CAL_CHANNEL_LENGTH];
    int16 vbgOffsetRev[VP880_SYS_CAL_CHANNEL_LENGTH];

    /* Used for ABS only */
    uint8 absNormCal[VP880_SYS_CAL_CHANNEL_LENGTH];
    uint8 absPolRevCal[VP880_SYS_CAL_CHANNEL_LENGTH];

    int16 swyOffset[VP880_SYS_CAL_CHANNEL_LENGTH];     /**< Used to hold SWY Offset */
    int16 swzOffset[VP880_SYS_CAL_CHANNEL_LENGTH];     /**< Used to hold SWZ Offset */
    int16 swxbOffset[VP880_SYS_CAL_CHANNEL_LENGTH];    /**< Used to hold SWXB Offset */

    /* Used for capacitance line test only */
    int32 tipCapCal[VP880_SYS_CAL_CHANNEL_LENGTH];
    int32 ringCapCal[VP880_SYS_CAL_CHANNEL_LENGTH];
} Vp880SysCalResultsType;

#define VP880_CAL_STRUCT_SIZE   (40*sizeof(int16) + 8*sizeof(uint8) + 4*sizeof(int32))

typedef struct Vp880DeviceObjectType {
    /* Device identifier set by the application -- passed to the HAL */
    VpDeviceIdType deviceId;

    /* Silicon RCN/PCN and number of channels supported */
    VpDeviceStaticInfoType staticInfo;

    /*
     * Weak attempt to put everything that changes during run-time into a
     * single structure. Good idea in principle, but in practice the devices
     * are too dis-similar to share many common structures.
     *
     * This holds the "last channel checked" event information, clock fault,
     * and battery fault.
    */
    VpDeviceDynamicInfoType dynamicInfo;

    /*
     * Variety of common device level status such as init/not init, init in
     * progress, test buffer read y/n?, etc.. Internally used by the VP-API-II
     * to communicate device state.
     *
     * This is a bit-mask of VpDeviceStateType values
     */
    uint16 state;

    /*
     * Similar to common device level status, this is for 880 specific type of
     * device level information. Such as ABS/Tracker, LPM lines, etc..
     *
     * This is a bit-mask of Vp880DeviceStateIntType values
     */
    uint32 stateInt;

    /*-----------------3/18/2010 3:51PM-----------------
     * Device Level OPTION Values
     * --------------------------------------------------*/
    /* OPTION_ID_EVENT_MASK for device level events */
    VpOptionEventMaskType deviceEventsMask;

    /* OPTION_ID_PULSE */
    VpOptionPulseType pulseSpecs;

    /* OPTION_ID_PULSE2 */
    VpOptionPulseType pulseSpecs2;

    /* OPTION_ID_CRITICAL_FLT */
    VpOptionCriticalFltType criticalFault;

    /*
     * Stored device level events. Note that this is an alternative method to
     * an event queue. So if an event queue is later used, this value could be
     * removed and all it's uses replaced.
     */
    VpOptionEventMaskType deviceEvents;

    /*
     * Device level timers such as clock fault, LPM Enter/Exit, VpCalCodec()
     * steps, etc..
     */
    uint16 devTimer[VP_DEV_TIMER_LAST];

    /*
     * Soft values from the device profile that are used throughout the VP-API-II
     * (not only in Init). Note that other values may be provided by the device
     * profile, but are stored in other ways generally because they also may NOT
     * be provided in the device profile (i.e., API has default values).
     */
    Vp880DeviceProfileType devProfileData;

    /* This is the profile pointer table per the VP-API-II User's Guide. */
    VpCSLACDeviceProfileTableType devProfileTable;

    /*
     * This is the structure indicating which profile table entries have been
     * initialized. If profile tables are disabled, this and the device profile
     * table (devProfileTable) can be removed.
     */
    VpCSLACProfileTableEntryType profEntry;

    /*
     * Raw information from the device signaling register last read. This
     * information is internally converted into useable VP-API-II information.
     */
    uint8 intReg[VP880_UL_SIGREG_LEN];
    uint8 intReg2[VP880_UL_SIGREG_LEN];

    /* Buffer to support VpLowLevelCmd() only. */
#if !defined(VP_REDUCED_API_IF) || defined(ZARLINK_CFG_INTERNAL)
    uint8 mpiData[VP880_MAX_MPI_DATA];
#endif

    /*
     * Data length copied into mpiData buffer -- used for VpLowLevelCmd() and
     * Apply/Get System Calibration
     */
    uint8 mpiLen;

    /* Handle to return with events as applicable */
    uint16 eventHandle;

    /*
     * VP-API-II timing in 500us increments (per the VP-API-II User's Guide).
     * Generally incremented at the tick rate.
     */
    uint16 timeStamp;
    int16 timeRemainder;    /**< leftover of tick time for tickrates not divisible by 0.5ms */

    /* Data returned with response events as applicable */
    uint8 responseData;

    /* Data returned with "Get Option" events */
    VpGetResultsOptionsType getResultsOption;

    /* Data returned with VpSetRelGain() function call/event. */
    VpRelGainResultsType relGainResults;

#if defined (VP880_INCLUDE_TESTLINE_CODE)
    /* Testing structure */
    VpTestResultType testResults;

    Vp880CurrentTestType currentTest;

    /**< Used to hold calibration offset coeffs. One per channel */
    Vp880CalOffCoeffs calOffsets[VP880_MAX_NUM_CHANNELS];

#endif /* VP880_INCLUDE_TESTLINE_CODE */


    /*
     * Used to hold battery switch calibration offset. One per channel, per
     * polarity
     */
    uint8 calState;
    Vp880CalDeviceData calData;

    /*
     * Used to get better hook granularity and pcm buffered data.
     */
    uint8 txBuffer[VP880_TX_PCM_BUFF_LEN];
    uint8 txBufferDataRate;

    /*
     * These switcher paramaters are from the user setting in the
     * device profile. They should never be changed except in Init (in case
     * the values provided are illegal).
     */
    uint8 swParams[VP880_REGULATOR_PARAM_LEN];

    /*
     * These switcher paramaters should always be a SW representation of the
     * silicon used to reduce device level access. The driver MUST change this
     * setting if the device itself is changed.
     */
    uint8 swParamsCache[VP880_REGULATOR_PARAM_LEN];

    /*
     * These internal switcher paramaters are from the user setting in the
     * device profile. They should never be changed except in Init (in case
     * the values provided are illegal).
     */
    uint8 intSwParams[VP880_INT_SWREG_PARAM_LEN];

    /*
     * These internal switcher paramaters are for Free Run mode only and should
     * only be set during Init Device (in case a set was not provided or if the
     * provided set is illegal).
     */
    uint8 intSwParamsFR[VP880_INT_SWREG_PARAM_LEN];

    uint8 yVolt;    /* Y-Switcher Target in 1V step */
    uint8 zVolt;    /* Z-Switcher Target in 1V step */

#if defined (VP_CC_880_SERIES) || defined (VP_CC_KWRAP)
    Vp880SysCalResultsType vp880SysCalData;
#endif

    /* used to store the in-rush current function data */
    Vp880RingParams ringParams;

#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;

    /* Device Mode Register (0x5E/5F) cached to minimize MPI traffic */
    uint8 devMode[VP880_DEV_MODE_LEN];
} Vp880DeviceObjectType;

#endif  /**< vp880_api.h */
