/** \file vp_api_int.h
 * vp_api_int.h
 *
 * Header file for the API-II c files. This file contains the declarations
 * and defintions required to implement the VTD specific VP-API. This file
 * is used by VP-API internally. This file should not be included by the
 * application.
 *
 * Copyright (c) 2011, Microsemi
 *
 * $Revision: 9053 $
 * $LastChangedDate: 2011-11-07 13:39:50 -0600 (Mon, 07 Nov 2011) $
 */

#ifndef VP_API_INT_H
#define VP_API_INT_H

#include "vp_api_cfg.h"
#include "vp_api_types.h"
#include "vp_api.h"
#include "vp_api_option.h"

#include "vp_debug.h"

/******************************************************************************
 *                              VP-API Defines                                *
 ******************************************************************************/
#define VP_ALL_LINES            0xFF  /**< Internal constant used to identify
                                       * all lines
                                       */
#define VP_ALL_SLACS          0xFFFF  /**< Internal constant used to identify
                                       * all SLACs
                                       */

/**< Profile types as defined by Profile Wizard */
typedef enum VpProfileWizProfileType {
    VP_PRFWZ_PROFILE_AC = 0x00,
    VP_PRFWZ_PROFILE_DC = 0x01,
    VP_PRFWZ_PROFILE_TONE = 0x02,
    VP_PRFWZ_PROFILE_TONECAD = 0x03,
    VP_PRFWZ_PROFILE_RING = 0x04,
    VP_PRFWZ_PROFILE_CID_TYPE1 = 0x05,
    VP_PRFWZ_PROFILE_CID_TYPE2 = 0x06,
    VP_PRFWZ_PROFILE_METER = 0x07,
    VP_PRFWZ_PROFILE_RINGCAD = 0x08,
    VP_PRFWZ_PROFILE_TEST_CRITERIA = 0x09,
    VP_PRFWZ_PROFILE_TEST_TOPOLOGY = 0x0A,
    VP_PRFWZ_PROFILE_FXS_CTRL = 0x0B,
    VP_PRFWZ_PROFILE_CAL = 0x0C,
    VP_PRFWZ_PROFILE_METERING_GEN,          /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_HOOK_FLASH_DIG_GEN,    /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_DIAL_PULSE_DIG_GEN,    /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_DTMF_DIG_GEN,          /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_MSG_WAIT_PULSE_INT,    /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_LINE_CAL_INT,          /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_FWD_DISC_INT,          /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_POLREV_PULSE_INT,      /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_MOMENTARY_LOOP_OPEN_INT,   /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_TIP_OPEN_INT,          /**< API Internal Profile Type */
    VP_PRFWZ_PROFILE_NONE,                  /**< Indicates that internal
                                                 profile data is not valid */
    VP_PRFWZ_PROFILE_880_CAL_DATA = 0xFC,
    VP_PRFWZ_PROFILE_890_CAL_DATA = 0xFD,

    VP_PRFWZ_PROFILE_FXO_CONFIG = 0xFE,
    VP_PRFWZ_PROFILE_DEVICE = 0xFF,
    VP_PRFWZ_PROFILE_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE/* Portability Req.*/
} VpProfileWizProfileType;

typedef enum VpProfileWizCustomStateType {
    VP_PRFWZ_CUSTOM_ST_STANDBY = 0x00,
    VP_PRFWZ_CUSTOM_ST_ACTIVE = 0x02,
    VP_PRFWZ_CUSTOM_ST_ACTIVE_PR = 0x03,
    VP_PRFWZ_CUSTOM_ST_TIP_OPEN = 0x04,
    VP_PRFWZ_CUSTOM_ST_OHT = 0x06,
    VP_PRFWZ_CUSTOM_ST_OHT_PR = 0x07,
    VP_PRFWZ_CUSTOM_ST_DISCONNECT = 0x08,
    VP_PRFWZ_CUSTOM_ST_RINGING = 0x09,
    VP_PRFWZ_CUSTOM_ST_DET_MAP = 0xFF,
    VP_PRFWZ_CUSTOM_ST_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE/* Portability Req.*/
} VpProfileWizCustomStateType;

/** These locations are common to all profiles used in the API */
typedef enum VpProfileHeaderFieldType {
    VP_PROFILE_TYPE_MSB = 0,
    VP_PROFILE_TYPE_LSB = 1,
    VP_PROFILE_INDEX = 2,
    VP_PROFILE_LENGTH = 3,
    VP_PROFILE_VERSION = 4,
    VP_PROFILE_MPI_LEN = 5,
    VP_PROFILE_DATA_START = 6,
    VP_PROFILE_HDR_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE /* Portability Req. */
} VpProfileHeaderFieldType;

/* Define the Ringing Type (balanced/unbalanced) offset from end of MPI data */
#define VP_PROFILE_RING_TYPE_OFFSET     1

/** These are the locations of parameters in version 01 ringing profiles */
typedef enum VpRingProfileFieldType {
    VP_RING_PROFILE_RING_TRIP   = 18,
    VP_RING_PROFILE_CURRENT_LIM = 19,
    VP_RING_PROFILE_MAX_RING_V  = 20,
    VP_RING_PROFILE_TRACK_MODE  = 21,
    VP_RING_PROFILE_ENUM_SIZE  =  FORCE_STANDARD_C_ENUM_SIZE /* Portability Req */
} VpRingProfileFieldType;

/** These are the locations of parameters in version 01 DC profiles */
typedef enum VpDcProfileFieldType {
    VP_DC_PROFILE_THRESHOLDS =  9,
    VP_DC_PROFILE_DEBOUNCES  =  10,
    VP_DC_PROFILE_FLOOR_V    =  11,
    VP_DC_PROFILE_HOOK_HYST  =  12,
    VP_DC_PROFILE_ENUM_SIZE  =  FORCE_STANDARD_C_ENUM_SIZE /* Portability Req */
} VpDcProfileFieldType;

typedef enum VpCidProfileFieldType {
    /*
     * These parameters are the absolute locations of the specified value in
     * the CID profile
     */
    VP_CID_PROFILE_FSK_PARAM_LEN = 6,
    VP_CID_PROFILE_FSK_PARAM_CMD = 7,
    VP_CID_PRFT_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE /* Portability Req. */
} VpCidProfileFieldType;

/*
 * These parameters are offset from the end of the FSK data to the value
 * specified
 */
#define VP_CID_PROFILE_CHECKSUM_OFFSET_MSB      (1)
#define VP_CID_PROFILE_CHECKSUM_OFFSET_LSB      (2)
#define VP_CID_PROFILE_LENGTH_OF_ELEMENTS_MSB   (3)
#define VP_CID_PROFILE_LENGTH_OF_ELEMENTS_LSB   (4)
#define VP_CID_PROFILE_START_OF_ELEMENTS_MSB    (5)
#define VP_CID_PROFILE_START_OF_ELEMENTS_LSB    (6)

/** These locations are for Tone and Ringing Cadence (Sequencer) profiles */
#define VP_PROFILE_TYPE_SEQUENCER_COUNT_MSB (6)
#define VP_PROFILE_TYPE_SEQUENCER_COUNT_LSB (7)
#define VP_PROFILE_TYPE_SEQUENCER_START     (8)

/** These locations are for Calibration profiles */
#define VP_CAL_PROFILE_NUM_ENTRIES  (6)
#define VP_CAL_PROFILE_FIRST_ENTRY  (8)

/******************************************************************************
 *                        API Specific common FUNCTION PROTOTYPES             *
 ******************************************************************************/
void
VpImplementNonMaskEvents(
    VpOptionEventMaskType *pLineEventsMask,
    VpOptionEventMaskType *pDevEventsMask);

VpStatusType
VpImplementDefaultSettings(
    VpDevCtxType *pDevCtx,
    VpLineCtxType *pLineCtx);

EXTERN int
VpGetProfileIndex (
    const VpProfilePtrType pProfile);

EXTERN bool
VpVerifyProfileType(
    VpProfileType type,
    VpProfilePtrType pProfile);

EXTERN bool
VpIsDigit(
    VpDigitType digit);

#if (defined (VP_CC_880_SERIES) || defined (VP_CC_890_SERIES))
EXTERN VpStatusType
VpCSLACSetDTMFGenValues(
    uint8 *sigGenABParams,
    VpDigitType digit);

EXTERN bool
VpCSLACHookMaskEnabled(
    uint16 fxsTimers[VP_LINE_TIMER_LAST]);
#endif

/******************************************************************************
 *                        VCP Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/
#if defined (VP_CC_VCP_SERIES)
VpStatusType
VpMakeVcpDeviceObject(
    VpDevCtxType *pDevCtx,
    VpVcpDeviceObjectType *pDevObj);

VpStatusType
VpMakeVcpDeviceCtx(
    VpDevCtxType *pDevCtx,
    VpVcpDeviceObjectType *pDevObj);

#endif /* VP_CC_VCP_SERIES */

/******************************************************************************
 *                        VCP2 Specific FUNCTION PROTOTYPES                   *
 ******************************************************************************/
#if defined (VP_CC_VCP2_SERIES)
VpStatusType
Vcp2MakeDeviceObject(
    VpDevCtxType *pDevCtx,
    VpVcp2DeviceObjectType *pDevObj);

VpStatusType
Vcp2MakeDeviceCtx(
    VpDevCtxType *pDevCtx,
    VpVcp2DeviceObjectType *pDevObj);

EXTERN bool
Vcp2ReadCalFlag(
    VpLineCtxType *pLineCtx);

EXTERN void
Vcp2SetCalFlag(
    VpLineCtxType *pLineCtx,
    bool value);

#endif /* VP_CC_VCP2_SERIES */
/******************************************************************************
 *                        MELT Specific FUNCTION PROTOTYPES                   *
 ******************************************************************************/
#if defined (VP_CC_MELT_SERIES)

VpStatusType
MeltMakeDeviceObject(
    VpDevCtxType *pDevCtx,
    VpMeltDeviceObjectType *pDevObj);

VpStatusType
MeltMakeDeviceCtx(
    VpDevCtxType *pDevCtx,
    VpMeltDeviceObjectType *pDevObj);

EXTERN bool
MeltReadCalFlag(
    VpLineCtxType *pLineCtx);

EXTERN void
MeltSetCalFlag(
    VpLineCtxType *pLineCtx,
    bool value);

#endif /* VP_CC_MELT_SERIES */

/******************************************************************************
 *                        Kernel Specific FUNCTION PROTOTYPES                 *
 ******************************************************************************/
#if defined (VP_CC_KWRAP)
  #include "vp_kernel.h"
#endif /* VP_CC_KWRAP */


/******************************************************************************
 *                        790 Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/
#if defined (VP_CC_790_SERIES)

#ifndef VP790_EC_CH1
  #define VP790_EC_CH1    0x01
  #define VP790_EC_CH2    0x02
  #define VP790_EC_CH3    0x04
  #define VP790_EC_CH4    0x08
#endif

VpStatusType
VpMakeVp790DeviceObject(
    VpDevCtxType *pDevCtx,
    Vp790DeviceObjectType *pDevObj);

VpStatusType
VpMakeVp790DeviceCtx(
    VpDevCtxType *pDevCtx,
    Vp790DeviceObjectType *pDevObj);

void
Vp790MuteChannel(
    VpLineCtxType *pLineCtx,
    bool mode);

bool
Vp790FSKGeneratorReady(
    VpLineCtxType *pLineCtx);

VpCliEncodedDataType
Vp790CliGetEncodedByte(
    VpLineCtxType *pLineCtx,
    uint8 *pByte);

VpStatusType
Vp790CtrlSetCliTone(
    VpLineCtxType *pLineCtx,
    bool mode);

void
Vp790CtrlSetFSKGen(
    VpLineCtxType *pLineCtx,
    VpCidGeneratorControlType mode,
    uint8 data);
#endif /* VP_CC_790_SERIES */

/******************************************************************************
 *                        792 Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/

#if defined (VP_CC_792_SERIES)
VpStatusType
Vp792MakeDeviceObject(
    VpDevCtxType            *pDevCtx,
    Vp792DeviceObjectType   *pDevObj);

VpStatusType
Vp792MakeDeviceCtx(
    VpDevCtxType            *pDevCtx,
    Vp792DeviceObjectType   *pDevObj);

#ifdef VP_CC_792_GROUP
bool
Vp792GroupGetEvent(
    VpDevCtxType *pDevCtx,
    VpEventType *pEvent);
#endif
#endif /* VP_CC_792_SERIES */

/******************************************************************************
 *                        880 Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/
#if defined (VP_CC_880_SERIES)

#ifndef VP880_EC_CH1
  #define VP880_EC_CH1                0x01
  #define VP880_EC_CH2                0x02
#endif

#ifndef VP880_WIDEBAND_MODE
  #define VP880_WIDEBAND_MODE         0x20
#endif

VpStatusType
VpMakeVp880DeviceObject(
    VpDevCtxType *pDevCtx,
    Vp880DeviceObjectType *pDevObj);

VpStatusType
VpMakeVp880DeviceCtx(
    VpDevCtxType *pDevCtx,
    Vp880DeviceObjectType *pDevObj);

void
Vp880MuteChannel(
    VpLineCtxType *pLineCtx,
    bool mode);

#if defined (VP_CSLAC_SEQ_EN) && defined (VP880_FXS_SUPPORT)
bool
Vp880FSKGeneratorReady(
    VpLineCtxType *pLineCtx);

VpCliEncodedDataType
Vp880CliGetEncodedByte(
    VpLineCtxType *pLineCtx,
    uint8 *pByte);

VpStatusType
Vp880CtrlSetCliTone(
    VpLineCtxType *pLineCtx,
    bool mode);

bool
Vp880CtrlSetFSKGen(
    VpLineCtxType *pLineCtx,
    VpCidGeneratorControlType mode,
    uint8 data);
#endif

VpStatusType
Vp880SetDTMFGenerators(
    VpLineCtxType *pLineCtx,
    VpCidGeneratorControlType mode,
    VpDigitType digit);

VpStatusType
Vp880SetLineStateInt(
    VpLineCtxType *pLineCtx,
    VpLineStateType state);

VpStatusType
Vp880SetLineTone(
    VpLineCtxType *pLineCtx,
    VpProfilePtrType pToneProfile,
    VpProfilePtrType pCadProfile,
    VpDtmfToneGenType *pDtmfControl);

void
Vp880LLSetSysState(
    VpDeviceIdType deviceId,
    VpLineCtxType *pLineCtx,
    uint8 lineState,
    bool writeToDevice);
#endif /* VP_CC_880_SERIES */


/******************************************************************************
 *                        890 Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/
#if defined (VP_CC_890_SERIES)
  #include "vp890_api_int.h"
#endif /* VP_CC_890_SERIES */


/******************************************************************************
 *                        580 Specific FUNCTION PROTOTYPES                    *
 ******************************************************************************/
#if defined (VP_CC_580_SERIES)
VpStatusType
VpMakeVp580DeviceObject(
    VpDevCtxType *pDevCtx,
    Vp580DeviceObjectType *pDevObj);

VpStatusType
VpMakeVp580DeviceCtx(
    VpDevCtxType *pDevCtx,
    Vp580DeviceObjectType *pDevObj);

#endif /* VP_CC_580_SERIES */

/* Functions used internal to the API -- device dependant */
#if defined (VP_CC_790_SERIES) || defined (VP_CC_880_SERIES) \
 || defined (VP_CC_580_SERIES) || defined (VP_CC_890_SERIES)

/* Converts ms to units of API_TICKRATE */
#define MS_TO_TICKRATE(MS, API_TICKRATE)  \
    ((uint16)(((((uint32)MS*256*2)/API_TICKRATE)+1)/2))
#define TICKS_TO_MS(TICKS, API_TICKRATE)  \
    (uint16) (((uint32)API_TICKRATE * (uint32)TICKS) / 256)
#define MS_TO_TICKS_ROUND_UP(MS, API_TICKRATE)  \
    ((uint16)(((((uint32)MS*256*2 + API_TICKRATE - 1)/API_TICKRATE)+1)/2))
/* Gives frequency in units of 0.3662109375 Hz for signal generators */
#define TICKRATE_TO_HZ(API_TICKRATE)  \
    ((uint16)((uint32)(0x80000000 / API_TICKRATE) / 0x0C00))

#define NO_DATA     0x00
#define NOOP_CMD    0x06  /**< Standard No operation comnmand for all devices */

#define MAX_CFAIL_TEST      10
#define CFAIL_TEST_INTERVAL 10

/**< CallerID Profile Data structure definitions */
#define VP_FSK_MARK_SIGNAL     0xFF
#define VP_FSK_CHAN_SEIZURE    0x55
#define VP_FSK_DATA            0x11 /* Anything NOT Mark or C.S is ok */
#define VP_FSK_NONE            0x00 /* When FSK Generator is not being used */

typedef enum VpApiElementsType {
    VP_CLI_NULL = 0,
    VP_CLI_POLREV = 0x01,           /**< No Parameters */
    VP_CLI_MUTEON = 0x02,           /**< No Parameters */
    VP_CLI_MUTEOFF = 0x03,          /**< No Parameters */
    VP_CLI_ALERTTONE = 0x04,        /**< Duration/Tone definition parameters */
    VP_CLI_ALERTTONE2 = 0x05,       /**< Internal Alert Tone indicator */
    VP_CLI_SILENCE = 0x06,          /**< Duration Parameter */
    VP_CLI_SILENCE_MASKHOOK = 0x07, /**< Duration/Masked-hook length parameters */
    VP_CLI_DETECT = 0x08,           /**< Tone and Timeout parameters */
    VP_CLI_CHANSEIZURE = 0x09,      /**< Duration Parameter */
    VP_CLI_MARKSIGNAL = 0x0A,       /**< Duration Parameter */
    VP_CLI_MESSAGE = 0x0B,          /**< No Parameters */
    VP_CLI_USER_DEFINED = 0x0C,     /**< Not supported in API-II */
    VP_CLI_EOT = 0x0D,              /**< No Parameters */
    VP_CLI_DTMF_MESSAGE = 0x0E,     /**< Message data to be sent in DTMF format */
    VP_CLI_ELM_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE /* Portability Req. */
} VpApiElementsType;

/* VP API Function Prototypes - Not associated with a function pointer */
#if defined(VP_CC_790_SERIES) || defined(VP_CC_880_SERIES) \
 || defined(VP_CC_890_SERIES) || defined(VP_CC_580_SERIES)

#ifdef VP_CC_890_SERIES
VpStatusType
Vp890InitDevicePcnRcn(
    Vp890DeviceObjectType   *pDevObj,
    VpDeviceIdType          deviceId);
#endif

#ifdef VP_CC_880_SERIES
VpStatusType
Vp880InitDevicePcnRcn(
    Vp880DeviceObjectType   *pDevObj,
    VpDeviceIdType          deviceId);
#endif

bool
VpIsLowPowerTermType(
    VpTermType termType);

void
VpCSLACClearMPIBuffer(
    VpDeviceIdType deviceId);

bool
VpCSLACIsProfileValid(
    VpProfileType       profType,
    int16               tableSize,
    uint16              profEntry,
    VpProfilePtrType    *pProfTable,
    VpProfilePtrType    pProfileInput,
    VpProfilePtrType    *pProfileRslt);

bool
VpCSLACSetTimer(
    uint16 *pTimer,
    uint16 newValue);

#endif

int16
VpConvertToInt16(
    uint8 *dataPtr);

int32
VpConvertToInt32(
    uint8 *dataPtr);

#if defined(VP_CC_880_SERIES) || defined(VP_CC_890_SERIES)
VpStatusType
VpCSLACSetAbsGain(
    VpLineCtxType *pLineCtx,
    VpOptionAbsGainType *gains);

#if defined(VP880_FXS_SUPPORT) || defined(VP890_FXS_SUPPORT)
/* Function only used for VP_LINE_HOWLER and VP_LINE_HOWLER_POLREV states */
#ifdef VP_HIGH_GAIN_MODE_SUPPORTED
void
VpCLSACHighGainMode(
    VpLineCtxType *pLineCtx,
    bool highGainMode);

VpStatusType
VpCSLACHowlerStateMgmt(
    VpLineCtxType *pLineCtx,
    VpLineStateType fromState,
    VpLineStateType toState,
    VpLineStateType statePriorToHowler);    /**< Used only when exiting Howler State */
#endif

bool
VpCSLACIsSupportedFxsState(
    VpDeviceType deviceType,
    VpLineStateType state);
#endif  /* defined(VP880_FXS_SUPPORT) || defined(VP890_FXS_SUPPORT) */
#endif  /* defined(VP_CC_880_SERIES) || defined(VP_CC_890_SERIES)   */

VpProfileCadencerStateTypes
ConvertApiState2PrfWizState(
    const VpLineStateType state);

VpLineStateType
ConvertPrfWizState2ApiState(
    uint8 state);

void
InitTimerVars(
    VpLineCtxType *pLineCtx);

bool
VpUpdateDP(
    uint16 tickRate,
    VpOptionPulseType *pPulseSpecs,
    VpDialPulseDetectType *pDpStruct,
    VpOptionEventMaskType *pLineEvents);

void
VpInitDP(
    VpDialPulseDetectType *pDpStruct);

VpStatusType
VpCSLACGetLineStatus(
    VpLineCtxType *pLineCtx,
    VpInputType input,
    bool *pStatus);

#if !defined(VP_REDUCED_API_IF)
VpStatusType
VpCSLACClearResults(
    VpDevCtxType *pDevCtx);
#endif

VpStatusType
VpCSLACDtmfDigitDetected(
    VpLineCtxType *pLineCtx,
    VpDigitType digit,
    VpDigitSenseType sense);

VpLineStateType
VpGetReverseState(
    VpLineStateType currentState);

void
VpCSLACSetVas(
    uint8 *dcFeed,
    uint16 vasValue);

#ifdef CSLAC_GAIN_RELATIVE
void
VpConvertFixed2Csd(
    uint16 fixed,
    uint8 *csdBuf);

uint16
VpConvertCsd2Fixed(
    uint8 *csdBuf);
#endif
#endif

#if defined (VP_CC_790_SERIES)
VpStatusType
Vp790SetLineStateInt(
    VpLineCtxType *pLineCtx,
    VpLineStateType state);

VpStatusType
Vp790SetLineTone(
    VpLineCtxType *pLineCtx,
    VpProfilePtrType pToneProfile,
    VpProfilePtrType pCadProfile,
    VpDtmfToneGenType *pDtmfControl);
#endif


#if defined (VP_CC_580_SERIES)
VpStatusType
Vp580SetLineStateInt(

    VpLineCtxType *pLineCtx,
    VpLineStateType state);

VpStatusType
Vp580SetLineTone(
    VpLineCtxType *pLineCtx,
    VpProfilePtrType pToneProfile,
    VpProfilePtrType pCadProfile,
    VpDtmfToneGenType *pDtmfControl);

#endif

uint16
VpComputeSquareRoot(
    uint32 number);

#endif /* VP_API_INT_H */
