/** \file vp790_api.h
 * vp790_api.h
 *
 *  Header file that defines the Vp790 Device and Line Objects
 *
 * Copyright (c) 2011, Microsemi
 *
 * $Revision: 9084 $
 * $LastChangedDate: 2011-11-09 16:54:12 -0600 (Wed, 09 Nov 2011) $
 */

#ifndef VP790_API_H
#define VP790_API_H

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

#define VP790_MAX_MPI_DATA  0x0E    /**< Max data from any MPI read command */
#define VP790_INT_SEQ_LEN   22
/*
 * Required Vp790_ Device and Line Objects for user instantiation if a Vp790
 * device is used
 */
typedef struct Vp790DeviceProfileType {
    uint8  maxNumInterrupts;
    uint16 pcmClkRate;
    uint8  mClkMask;
    uint8  mClkCorrection;
    uint16 tickRate;
    uint8  devCfg1;
    uint8  clockSlot;
    uint8  calibrationTime;
} Vp790DeviceProfileType;

typedef struct Vp790LineObjectType {
    uint8 channelId;    /**< Channel # associated with "this" line on the
                         * device
                         */

    VpTermType termType;    /**< Termination type of this line */

    VpOptionCodecType codec;    /**< Maintains the currently used code mode to
                                 * reduce MPI activity
                                 */

    VpOptionLineStateType lineStateBatOption;

#ifdef VP_CSLAC_SEQ_EN
    uint8 cidEncodeBuff[6]; /**< Encoded CID data from user data */
    uint8 cidEncodeIndex;   /**< current index into encoded buffer */
    uint8 cidEncodeSize;    /**< Size of valid CID encoded data */

    VpCallerIdType callerId;    /**< Caller ID related information */
    VpSeqDataType cadence;      /**< Sequencer related information */
    VpCidSeqDataType cidSeq;    /**< CID Sequencer related information */

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

    bool thisFskCid;   /**< TRUE if device tick has not changed since last call
                        * to FSK CID Generator Function call. Used to prevent
                        * CID lockup with while() loop to load CID data in the
                        * device.
                        */
#endif

    bool slsCalledFromApi;  /**< TRUE if SetLineState is called by the API */

    VpDialPulseDetectType dpStruct; /**< Dial Pulse Parameters for detecting
                                     * digits on FXS lines
                                     */

    VpOptionEventMaskType lineEventsMask;
    VpOptionEventMaskType lineEvents;

    VpOptionPulseModeType pulseMode;

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

    VpCslacTimerStruct lineTimers; /**< Timers for "this" line */

    VpApiIntLineStateType lineState;    /**< Line state info, used for state
                                         * transition handling.
                                         */

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

    VpOptionZeroCrossType zeroCross;    /**< Defines how zero crossing is
                                         * implemented. The device doesn't really
                                         * support zero crossing "methods", but
                                         * storing what the user selected is
                                         * necessary for Get Option (so the
                                         * operations of Set/Get can be
                                         * orthogonal)
                                         */

    VpVirtualDeviceReg virtualDeviceReg;    /**< Virtual device register to
                                             * minimize device access
                                             */

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

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

    VpProfilePtrType pCidProfileType2;  /**< Currently used caller ID profile
                                         * on this line for non-sequenced cid
                                         */

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

    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
                             */
} Vp790LineObjectType;

typedef struct Vp790DeviceObjectType {
    VpDeviceIdType deviceId;    /**< Device chip select ID or type defined by
                                 * user
                                 */

    VpDeviceStaticInfoType staticInfo;      /**< Info that will not change
                                             * during runtime
                                             */
    VpDeviceDynamicInfoType dynamicInfo;    /**< Info that will change during
                                             * runtime
                                             */
    VpCSLACDeviceStatusType status;

    VpOptionEventMaskType deviceEventsMask;
    VpOptionEventMaskType deviceEvents;

    VpOptionPulseType pulseSpecs;

    VpOptionCriticalFltType criticalFault;

    uint16 devTimer[VP_DEV_TIMER_LAST];
    Vp790DeviceProfileType devProfileData;
    VpCSLACDeviceProfileTableType devProfileTable;
    VpCSLACProfileTableEntryType profEntry;

#if !defined(VP_REDUCED_API_IF) || defined(ZARLINK_CFG_INTERNAL)
    uint8 mpiData[VP790_MAX_MPI_DATA];  /**< Buffer for MPI Low level reads to
                                         * hold maximum amount of MPI data that
                                         * is possible
                                         */

    uint8 mpiLen;       /**< Length of data to be copied into mpiData buffer */
#endif

    uint16 eventHandle; /**< Device level event handle information */
    uint16 timeStamp;
    int16 timeRemainder;

    VpGetResultsOptionsType getResultsOption;
} Vp790DeviceObjectType;

#endif  /* vp790_api.h */




