/** \file vp_api_cfg_int.h
 * vp_api_cfg_int.h
 *
 * This file contains internal configuration and compile time settings for
 * building appropriate VP-API library modules needed for any application.

 * Copyright (c) 2011, Microsemi
 *
 * $Revision: 6419 $
 * $LastChangedDate: 2010-02-12 16:40:10 -0600 (Fri, 12 Feb 2010) $
 */

#ifndef VP_API_CFG_INT_H
#define VP_API_CFG_INT_H

/**< STRICT_SIGNED_ENUM_VALUES
 * Define this to avoid using enumerations with negative values (e.g., 0x8000). It should not be
 * needed in compilers compliant with ANSII C89 or later. Setting it to #define also removes strict
 * type checking in the API which is generally not preferred.
 */
#undef STRICT_SIGNED_ENUM_VALUES

/******************************************************************************
 * Device Context Size                                                        *
 *****************************************************************************/
/*
 * Define the maximum number of lines per device in your system. Note that a
 * system (i.e., all devices controlled by one instance of VP-API) could have
 * more than one type of device, each of those devices may support different
 * number of lines. For example in a system, device A might support 2 lines
 * and device B might support 4 lines, in such a scenario, the following macro
 * should be defined as 4. */
#if defined(VP_CC_790_SERIES) || defined(VP_CC_580_SERIES)
    #define VP_MAX_LINES_PER_DEVICE     (4)
#else /* VP_CC_880_SERIES + VP_CC_890_SERIES */
    /*
     * Note that for VE890 this value must be >=2 even when using the single
     * FXO device. That's because the line context pointer in the device
     * context is assigned to the "channelId" element of the line context
     * pointer array. The FXO channelId = 1 so the array must be size >= 2.
     */
    #define VP_MAX_LINES_PER_DEVICE     (2)
#endif

/**< Special Case for Kernel Wrapper: DO NOT TOUCH THESE VALUES */
#if defined(VP_CC_KWRAP)
  #undef VP_MAX_LINES_PER_DEVICE
  #define VP_MAX_LINES_PER_DEVICE (128)
#endif

/**< CSLAC_GAIN_RELATIVE
 * VE880 and VE890 applications only. This value affects whether or not the VE880/VE890 API will
 * support VpSetRelGain() function. Setting to #undef reduces the API library size for each device
 * by ~1K. Applications may choose to compile out VpSetRelGain() functionality and instead use
 * the VP_OPTION_ID_ABS_GAIN feature (see CSLAC_GAIN_ABS).
 *
 * NOTE: The API has not been tested with this string set to #undef.
 */
#define CSLAC_GAIN_RELATIVE

/**< CSLAC_GAIN_ABS
 * VE880 and VE890 applications only. This value affects whether or not the VE880/VE890 API will
 * support the VP_OPTION_ID_ABS_GAIN feature of the API. Setting to #undef reduces the API library
 * size by ~1K independent of whether compiling only for VE880 or VE890, or compiling for both. The
 * majority of the code used to support VP_OPTION_ID_ABS_GAIN is common for these devices.
 * Applications are not likely to use both VP_OPTION_ID_ABS_GAIN and VpSetRelGain() features of the
 * API (see CSLAC_GAIN_RELATIVE for VpSetRelGain() compile option).
 *
 * NOTE: The API has not been tested with this string set to #undef.
 */
#define CSLAC_GAIN_ABS

/**< VP_ENABLE_PROD_TEST
 * This value exists for test purposes only. DO NOT change to #define in production code.
 * Unexpected or damaging behavior may occur.
 */
#undef  VP_ENABLE_PROD_TEST

/**< VP_CID_POLLING_ENABLED
 * This value should only be defined for applications with <= 4 lines on the same MPI BUS and
 * with 8.33ms tickrate. With VP_CID_POLLING_ENABLED set to #define, the API will consume an
 * additional >= 500us per line for each tick (additional 1ms per tick for a 2-FXS device).
 *
 * For systems with tickrates = 8.33ms and using FSK CID with standard baud rate = 1200, for a
 * per-byte line update rate of 8.33ms (same as the tickrate) it is possible on the VE880 and
 * VE890 silicon that without this set to #define the CID message data on the line may
 * corrupt. The error occurs when the API writes to the silicon at "exactly" the same time as
 * the CID message on the line is changing from one byte to the next ("exact" in this context
 * specifically refers to a window of 80ns). Repeated bulk call testing of 100,000 calls
 * indicates that this error can occur in the range of [< 0.001% (>99.999% success) to 4%
 * (96% success)]. Note however these numbers are application and system specific. The problem
 * will occur 100% of the time IF the API write occurs within the 80ns window where the
 * device/line CID message data byte is being updated, and will occur 0% of the time IF this
 * precise timing is avoided.
 *
 * When this is set to #define the exact tick consumption to avoid this error is defined by
 * VP_CID_NORMAL_MPI_CNT described below.
 */
#undef  VP_CID_POLLING_ENABLED

/**< VP_CID_NORMAL_INIT_CNT
 * This count value is used at the start of sending FSK data in a CID sequence.
 *
 * The VE880 and VE890 silicon CID message buffer is 2+ bytes deep. That means the API can at a
 * given time provide a little less than 3 bytes to the silicon. When CID FSK Data is initialized,
 * the API writes one byte to the silicon. It takes the silicon 18us to update it's CID buffer
 * management such that it will then accept another 2 bytes before indicating "Full". When "Full"
 * the silicon will tolerate the maximum amount of VpApiTick() jitter without underrun of the CID
 * message buffer.
 *
 * The exact value of VP_CID_NORMAL_INIT_CNT depends on the DCLK rate and CS-Off time assumed to be
 * 8.192MHz and 2.5us respectively. The delay is implemented in the API by reading the CID State
 * machine buffer where each call to VpMpiCmd() requires 4 bytes of MPI traffic. Therefore, one
 * read will take a minimum of (4 * (2.5us + 8/8.192MHz)) = 13.90625us. In order to meet the minimum
 * time of 18us then requires at least 2 reads. In systems with much longer CS Off times or slower
 * DCLK rates, this count value could be reduced.
 *
 * NOTE: This value is used by the API independant of VP_CID_POLLING_ENABLED setting.
 */
#define VP_CID_NORMAL_INIT_CNT  (2)

/** VP_CID_NORMAL_MPI_CNT
 * This count value is used by the API during normal CID FSK Data transmission (all FSK conditions
 * except for the very first 3 bytes of initialization controlled by VP_CID_NORMAL_INIT_CNT). This
 * value is set to provide a minimum 500us window where the API will monitor the silicon for a
 * Caller ID Buffer update.
 *
 * When running a 8.33ms tickrate and 1200baud FSK, the silicon buffer should update very nearly
 * when VpApiTick() is called. As mentioned above, if the API updates the silicon at almost exactly
 * the same time as the silicon buffer update occurs, Caller ID on the line will be corrupted. The
 * API avoids this by checking for the silicon buffer update before writing to the silicon. With
 * a tickrate of 8.33ms + jitter, the siliocn update should occur either just before VpApiTick() is
 * called or very nearly when VpApiTick() starts.
 *
 * The precise value (36) assumes DCLK = 8.192MHz and CS Off-Time of 2.5us. Each read of the CID
 * state machine requires 4 bytes for total duration of (4 * (2.5us + 8/8.192MHz)) = 13.90625us.
 * To meet the 500us minimum time requires (500 / 13.90625) ~ 36 reads. In systems with much longer
 * CS Off times or slower DCLK rates, this count value could be reduced.
 *
 * NOTE: This value is used by the API ONLY if VP_CID_POLLING_ENABLED is set to #define.
 */
#define VP_CID_NORMAL_MPI_CNT   (36)

/**< VE8XX_LPM_LEAKY_LINE_CNT
 * This count is for the numner of times during a Low Power Mode leaky line test the VP-API-II
 * will retry using LPM state before "giving up".
 */
#define VE8XX_LPM_LEAKY_LINE_CNT    (3)

#ifdef VP_CC_880_SERIES

/*
 * Modifications to previous settings to correct for potential inconsistencies.
 * DO NOT CHANGE anything below this line. All corrections should be made above
 */
#if !defined (VP880_TRACKER_SUPPORT) && defined (VP880_LP_SUPPORT)
    #error "Invalid 880 Compiler Combination: Low Power Mode Requires Tracker defined"
#endif

#if defined (VP880_FXS_SUPPORT) && (!defined (VP880_ABS_SUPPORT) && !defined (VP880_TRACKER_SUPPORT))
    #error "Invalid 880 Compiler Combination: FXS requires either ABS or Tracker defined"
#endif

#ifndef VP880_FXS_SUPPORT
    #undef VP880_ABS_SUPPORT
    #undef VP880_INCLUDE_TESTLINE_CODE
    #undef VP880_LP_SUPPORT
#endif

#if !defined (VP880_FXS_SUPPORT) && !defined (VP880_FXO_SUPPORT)
    #error "Invalid 880 Compiler Combination: Either FXS or FXO must be defined if using VE880 device"
#endif

/*
 * Current Limiting option in the VP880 library limits the peak switcher current
 * such that a 3REN load can be supported at 90V peak. Disable this option if
 * 5REN is required.
 */
#undef  VP880_CURRENT_LIMIT

#endif /* VP_CC_880_SERIES */

#if (defined (VP_CC_880_SERIES) && defined (VP880_INCLUDE_TESTLINE_CODE)) || defined(VP_CC_KWRAP)
    /*
     * #defines used in unit conversion function
     * All units are based on the following calculations
     *      Internal voltage unit   = 480.0  / 2^31 Volts
     *      Internal current unit   = 240e-3 / 2^31 Amps
     *      Internal freq uint      = 12e3   / 2^31 Hz
     */
    #define VP880_UNIT_MV                          4474L    /* mV unit */
    #define VP880_UNIT_MVRMS                       6327L    /* mVrms unit */
    #define VP880_UNIT_ADC_VAB                     -32768L  /* vab step from ADC */
    #define VP880_UNIT_ADC_VAB_RMS                 46341L   /* vab step from ADC rms*/
    #define VP880_UNIT_ADC_AC_VAB_RMS                664L   /* vab step from ADC Metallic Vrms*/
    #define VP880_UNIT_DAC_RING                    21076L   /* step due to DAC in ringing*/
    #define VP880_UNIT_TRACK_SWZ                23091612L   /* step used for tracking switching regulator Z */
    #define VP880_UNIT_UA                          8948L    /* uA unit */
    #define VP880_UNIT_ADC_IMET_NOR                16384L   /* met I from ADC in normal VC */
    #define VP880_UNIT_ADC_IMET_NOR_JA             15756L   /* met I from ADC in normal JA*/
    #define VP880_UNIT_ADC_IMET_RING               32768L   /* met I from ADC in ringing*/
    #define VP880_UNIT_ADC_ILG                     11469L   /* long current from ADC*/
    #define VP880_UNIT_DECHZ                       17896L   /* Deci Hz*/
    #define VP880_UNIT_MHZ                         179L     /* mHz */
    #define VP880_UNIT_FREQ                        65536L   /* siggen freq step */
    #define VP880_UNIT_RAMP_TIME                   1365L    /* Ramp time (-1/3) in ms*/

    #define VP880_UNIT_CONVERT(DATA, I_UNIT, O_UNIT)    (int32)(((int32)DATA * I_UNIT) / O_UNIT)

    /* converts requested slope into SigGen Freq */
    #define VP880_SLOPE_TO_FREQ(AMP,SLOPE)  (int16)(((int32)SLOPE * (int32)VP880_UNIT_RAMP_TIME) / (int32)AMP)

    #define VP880_AC_RLOOP_MAX_BAT_LVL              75000L /* mV */
    #define VP880_AC_RLOOP_MAX_TEST_LVL         ((VP880_AC_RLOOP_MAX_BAT_LVL - 5000) / 2)

#endif /*VP880_INCLUDE_TESTLINE_CODE*/

#ifdef VP_CC_890_SERIES

#define VP890_REL_GAIN_GX_LOW_LIMIT     (0x500)
#define VP890_REL_GAIN_GR_LOW_LIMIT     (0x1000)

#ifndef VP890_FXS_SUPPORT
    /*
     * Tests (using testline) is supported only for FXS termination types. If
     * line tests are required, make sure FXS support is enabled.
     */
    #undef VP890_INCLUDE_TESTLINE_CODE

    /* LPM is an FXS termination type. FXS must be supported to support LPM. */
    #undef  VP890_LP_SUPPORT
#endif

/* Define this to attempt to reduce the level of the noise signal generated for
 * adaptive balance B-Filter calibration.  Reducing the level will increase the
 * negative effect of outside noise on the line and can reduce performance */
#undef VP890_REDUCE_BFILTER_CAL_SIGNAL_LEVEL

#endif /* VP_CC_890_SERIES*/

#if (defined (VP_CC_890_SERIES) && defined (VP890_INCLUDE_TESTLINE_CODE)) || defined(VP_CC_KWRAP)
    /*
     * #defines used in unit conversion function
     * All units are based on the following calculations
     *      Internal voltage unit   = 480.0  / 2^31 Volts
     *      Internal current unit   = 240e-3 / 2^31 Amps
     *      Internal freq uint      = 12e3   / 2^31 Hz
     */
    #define VP890_UNIT_MV                          4474L    /* mV unit */
    #define VP890_UNIT_MVRMS                       6327L    /* mVrms unit */
    #define VP890_UNIT_ADC_VAB                     -32768L  /* vab step from ADC */
    #define VP890_UNIT_ADC_VAB_RMS                 46341L   /* vab step from ADC rms*/
    #define VP890_UNIT_ADC_AC_VAB_RMS              664L     /* vab step from ADC Metallic Vrms*/
    #define VP890_UNIT_DAC_RING                    21076L   /* step due to DAC in ringing*/
    #define VP890_UNIT_TRACK_SWZ                23091612L   /* step used for tracking switching regulator Z */
    #define VP890_UNIT_UA                          8948L    /* uA unit */
    #define VP890_UNIT_ADC_IMET_NOR                15756L   /* met I from ADC in normal*/
    #define VP890_UNIT_ADC_IMET_RING               32768L   /* met I from ADC in ringing*/
    #define VP890_UNIT_ADC_ILG                     11469L   /* long current from ADC*/
    #define VP890_UNIT_DECHZ                       17896L   /* Deci Hz*/
    #define VP890_UNIT_MHZ                         179L     /* mHz */
    #define VP890_UNIT_FREQ                        65536L   /* siggen freq step */
    #define VP890_UNIT_RAMP_TIME                   1365L    /* Ramp time (-1/3) in ms*/

    #define VP890_UNIT_CONVERT(DATA, I_UNIT, O_UNIT) (int32)( ((int32)DATA * I_UNIT) / O_UNIT)

    /* converts requested slope into SigGen Freq */
    #define VP890_SLOPE_TO_FREQ(AMP,SLOPE) (int16) ( ((int32)SLOPE * (int32)VP890_UNIT_RAMP_TIME) / (int32)AMP)

    #define VP890_AC_RLOOP_MAX_BAT_LVL              75000L /* mV */
    #define VP890_AC_RLOOP_MAX_TEST_LVL             ((VP890_AC_RLOOP_MAX_BAT_LVL - 5000) / 2)

#endif /* VP890_INCLUDE_TESTLINE_CODE */

/******************************************************************************
 * COMPILE-TIME OPTIONS:: Top level VP-API Default Device and Line Options    *
 *****************************************************************************/
/*
 *  The following defines specify the default settings of the device and line
 * options used in the API. The VP-API-II should generally take on the default
 * settings set here at VpInitDevice()/VpInitLine() but is not guaranteed (i.e.,
 * the combinations are not tested - VpInitDevice()/InitLine() could fail as a
 * result of setting to unexpected values).
 *
 * Please consult Field or Applications support before changing any of
 * these settings.
 */
#include "vp_api_option.h"
#include "vp_api_event.h"

/* Default Dial Pulse Options specified in units of 125micro sec  */
#define VP_OPTION_DEFAULT_DP_BREAK_MIN          (33 * 8)    /* == 33 ms */
#define VP_OPTION_DEFAULT_DP_BREAK_MAX          (100 * 8)
#define VP_OPTION_DEFAULT_DP_MAKE_MIN           (17 * 8)
#define VP_OPTION_DEFAULT_DP_MAKE_MAX           (75 * 8)
#define VP_OPTION_DEFAULT_DP_INTER_DIG_MIN      (250 * 8)
#define VP_OPTION_DEFAULT_DP_FLASH_MIN          (250 * 8)
#define VP_OPTION_DEFAULT_DP_FLASH_MAX          (1300 * 8)
#define VP_OPTION_DEFAULT_DP_ON_HOOK_MIN        VP_OPTION_DEFAULT_DP_FLASH_MAX
#define VP_OPTION_DEFAULT_DP_OFF_HOOK_MIN       0

/*
 * Specification 2 is usefull if you need to detect between two non-overlapping
 * dial pulse specifications.
 */
#define VP_OPTION_DEFAULT_DP_BREAK_MIN2         (0 * 8)
#define VP_OPTION_DEFAULT_DP_BREAK_MAX2         (0 * 8)
#define VP_OPTION_DEFAULT_DP_MAKE_MIN2          (0 * 8)
#define VP_OPTION_DEFAULT_DP_MAKE_MAX2          (0 * 8)
#define VP_OPTION_DEFAULT_DP_INTER_DIG_MIN2     (0 * 8)
#define VP_OPTION_DEFAULT_DP_FLASH_MIN2         (0 * 8)
#define VP_OPTION_DEFAULT_DP_FLASH_MAX2         (0 * 8)
#define VP_OPTION_DEFAULT_DP_ON_HOOK_MIN2       (0 * 8)

/* Default setting for Critical fault option */
#define VP_OPTION_DEFAULT_CF_AC_DIS_EN          TRUE
#define VP_OPTION_DEFAULT_CF_DC_DIS_EN          TRUE
#define VP_OPTION_DEFAULT_CF_THERMAL_DIS_EN     TRUE
/* CSLAC-880 and VCP-880 do not support the detection of AC, DC critical faults.
 * So, The VP-API uses the following default values for those devices.
 * Note that changing the following values will result in VpInitDevice()
 * failure. */
#define VP_OPTION_DEFAULT_CF_AC_DIS_EN_880      FALSE
#define VP_OPTION_DEFAULT_CF_DC_DIS_EN_880      FALSE

/* Default setting for Zero cross option */
#define VP_OPTION_DEFAULT_ZERO_CROSS            VP_OPTION_ZC_M4B

/* Default setting for Ramp to standby option */
#define VP_OPTION_DEFAULT_RAMP2STBY             0

/* Default setting for Pulse mode option */
#define VP_OPTION_DEFAULT_PULSE_MODE            VP_OPTION_PULSE_DECODE_OFF

/* Default CODEC Mode */
#define VP_OPTION_DEFAULT_CODEC_MODE            VP_OPTION_ALAW

/* Default setting for PCM Highway option */
#define VP_OPTION_DEFAULT_PCM_HWY               VP_OPTION_HWY_A

/* Default setting for Loop back option */
#define VP_OPTION_DEFAULT_LOOP_BACK             VP_OPTION_LB_OFF

/* Default setting for Line state option */
#define VP_OPTION_DEFAULT_LS_BAT_REV            FALSE
#define VP_OPTION_DEFAULT_LS_BAT                VP_OPTION_BAT_AUTO

/*
 * Default Event Masks (VP_OPTION_ID_EVENT_MASK)
 * The user can arbitrarily set the mask bits here as needed.  A mask bit set to
 * '0' means the event is not masked.  Some events are non-maskable.
 */
#define VP_OPTION_DEFAULT_FAULT_EVENT_MASK      (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_FAULT_EVENTS)
#define VP_OPTION_DEFAULT_SIGNALING_EVENT_MASK  (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_SIGNALING_EVENTS)
#define VP_OPTION_DEFAULT_RESPONSE_EVENT_MASK   (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_RESPONSE_EVENTS)
#define VP_OPTION_DEFAULT_TEST_EVENT_MASK       (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_TEST_EVENTS)
#define VP_OPTION_DEFAULT_PROCESS_EVENT_MASK    (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_PROCESS_EVENTS)
#define VP_OPTION_DEFAULT_FXO_EVENT_MASK        (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_FXO_EVENTS)
#define VP_OPTION_DEFAULT_PACKET_EVENT_MASK     (VP_EVENT_MASK_ALL & ~VP_API_NONMASK_PACKET_EVENTS)

/* Default setting for Ring Control option */
#define VP_OPTION_DEFAULT_RC_ZERO_CROSS         VP_OPTION_ZC_M4B
#define VP_OPTION_DEFAULT_RC_RING_EXIT_DBNC_VAL (100 * 8) /* 100ms */
#define VP_OPTION_DEFAULT_RC_RING_EXIT_STATE    VP_LINE_TALK

/* Default setting for DTMF Mode option */
#define VP_OPTION_DEFAULT_DM_DTMF_CONTROL_MODE  VP_OPTION_DTMF_DECODE_OFF
#define VP_OPTION_DEFAULT_DM_DIRECTION          VP_DIRECTION_US

/* Default setting for PCM TX/RX path control */
#define VP_OPTION_DEFAULT_PCM_TXRX_CNTRL        VP_OPTION_PCM_BOTH

/* Default setting for DTMF Spec option */
#define VP_OPTION_DEFAULT_DTMF_SPEC             VP_OPTION_DTMF_SPEC_ATT

/* Default setting for Park Mode option */
#define VP_OPTION_DEFAULT_PARK_MODE_DISC        4   /* 2 seconds */
#define VP_OPTION_DEFAULT_PARK_MODE_STANDBY     3   /* 300 ms */

/* Default setting for DC Feed Slope option */
#define VP_OPTION_DEFAULT_DCFEED_SLOPE          109 /* 4 V/ms */

/* Default setting for hook detection mode option */
#define VP_OPTION_DEFAULT_HOOK_DETECT_MODE      VP_OPTION_HOOKDET_NORMAL

/* Default settings for PCM highway signaling and control */
#define VP_OPTION_DEFAULT_PCM_SIG_CTL_ENABLE    FALSE
#define VP_OPTION_DEFAULT_PCM_SIG_CTL_CTLTS     0
#define VP_OPTION_DEFAULT_PCM_SIG_CTL_SIGTS     0

/* Default setting for PCM highway lien state control mode */
#define VP_OPTION_DEFAULT_LINESTATE_CTL_MODE    VP_OPTION_LINESTATE_CTL_NORMAL

/* Default settings for Auto Loop Conditions option */
#define VP_OPTION_DEFAULT_AUTO_LOOP_COND_SELECT 0
#define VP_OPTION_DEFAULT_AUTO_LOOP_COND_DELAY  0

#define VP_SIZEOF_CID_MSG_BUFFER 16

#endif /* VP_API_CFG_INT_H */
