| /** \file vp_api_timer.h |
| * vp_api_timer.h |
| * |
| * Header file for all timer typedefs used in API-II (internal). |
| * |
| * Copyright (c) 2011, Microsemi |
| * |
| * $Revision: 9053 $ |
| * $LastChangedDate: 2011-11-07 13:39:50 -0600 (Mon, 07 Nov 2011) $ |
| */ |
| |
| #ifndef VP_API_TIMER_H |
| #define VP_API_TIMER_H |
| |
| /* IMT average for Voltage to Frequency (FXO) smoothing */ |
| #define VP_IMT_AVG_LENGTH 2 /* FXO variable, but need this to compile */ |
| |
| #define VP_ACTIVATE_TIMER 0x8000 |
| #define VP_TIMER_TIME_MASK 0x7FFF |
| |
| /************************************************************************************************** |
| * Common Timer Values - all times in ms * |
| **************************************************************************************************/ |
| /**< VP_DEV_TIMER_EXIT_RINGING_SAMPLE |
| * Used on VE880 ABS only at the moment. This is the initial time to delay switching from High Power |
| * to medium Power when exiting Ringing. It should be longer than the longest silent interval in any |
| * Ringing Cadence ideally. If not, it just means the supply would be switched to Medium Power and |
| * then quickly set back to High Power. No big deal, but not preferred. |
| */ |
| #define VP_DEV_TIMER_EXIT_RINGING_SAMPLE (5000) |
| |
| /**< VP_DEV_TIMER_EXIT_RINGING_UPDATE |
| * Used on VE880 ABS only at the moment. This is the interval used to recheck for Ringing Exit after |
| * waiting the time specified by VP_DEV_TIMER_EXIT_RINGING_SAMPLE. |
| */ |
| #define VP_DEV_TIMER_EXIT_RINGING_UPDATE (1000) |
| |
| /**< VP_WB_CHANGE_MASK_TIME |
| * The time used to mask Clock Fault after changing to or from Wideband mode on VE880 or VE890 |
| */ |
| #define VP_WB_CHANGE_MASK_TIME (20) |
| |
| /**< VP_DISCONNECT_RECOVERY_TIME |
| * Hook debounce time when exiting disconnect. This is to allow hook stability in case of high |
| * REN load conditions. Time of 100ms is sufficient for all normal field conditions, but if testing |
| * with 5REN per GR57 (40uF + 1386ohm) this time needs to be 120-130ms. |
| */ |
| #define VP_DISCONNECT_RECOVERY_TIME (100) |
| |
| /**< VP_POLREV_DEBOUNCE_TIME |
| * Debounce time to mask hook activity when reversing polarity on the FXS line. The value (120ms) |
| * is designed to prevent false off-hook from being reported when changing line polarity under |
| * load conditions of 5REN FCC Part 68 load with 16ms Switch Hook Debounce in the DC Feed Profile. |
| * Applications that require detection of hook changes after polarity reversal in less than 120ms |
| * will have to change this value. Applications that need to prevent spurious hook events for load |
| * conditions of GR57 5REN (see "Ringing Capability) using 40uf + 1386ohm may need to increase this |
| * value. Note however that 40uf + 1386ohm condition is for test purposes only, not representative |
| * of real-world conditions. |
| */ |
| #define VP_POLREV_DEBOUNCE_TIME (120) |
| |
| /**< Line Timer Definitions/Indexes |
| * Note that since the timer indexes themselves are generally used in incrememtal loops through |
| * the line timer array, these values must be sequential, unsigned type |
| */ |
| /**< VP_LINE_CID_DEBOUNCE: Hook debounce timer for conditions determined by the CID State Machine */ |
| #define VP_LINE_CID_DEBOUNCE 0 |
| |
| /**< VP_LINE_TIMER_CID_DTMF: Timer for DTMF generation in CID */ |
| #define VP_LINE_TIMER_CID_DTMF (VP_LINE_CID_DEBOUNCE + 1) |
| |
| /**< VP_LINE_TIMER_FAULT: VE790 only fault management timer */ |
| #define VP_LINE_TIMER_FAULT (VP_LINE_TIMER_CID_DTMF + 1) |
| |
| /**< VP_LINE_RING_EXIT_PROCESS: Timer used for Ringing Exit handing */ |
| #define VP_LINE_RING_EXIT_PROCESS (VP_LINE_TIMER_FAULT + 1) |
| |
| /**< VP_CSLAC_RINGING_EXIT_MAX |
| * This value sets the maximum time the API will wait for the sillicon to exit it's own internal |
| * Ringing Exit state (used for certain conditions) before forcing the line to a know value and |
| * giving up on the timer. This value is monitored in the VE880/890 VP_LINE_RING_EXIT_PROCESS |
| * timer management functions. The time specified is in mSec. |
| */ |
| #define VP_CSLAC_RINGING_EXIT_MAX (100) |
| |
| /**< VP_LINE_HOOK_FREEZE: |
| * Hook Mask when making any line change that could cause spurious hook activity. This time should |
| * be used ONLY to mask hook activity, not as part of a control sequence. When it expires, the only |
| * action remaining should be to read the signaling register and process hook activity. |
| */ |
| #define VP_LINE_HOOK_FREEZE (VP_LINE_RING_EXIT_PROCESS + 1) |
| |
| /**< VP_LINE_DISCONNECT_EXIT: Line Debounce for Disconnect Recovery */ |
| #define VP_LINE_DISCONNECT_EXIT (VP_LINE_HOOK_FREEZE + 1) |
| |
| /**< VP_LINE_GND_START_TIMER: Timer for Recovery from Tip-Open */ |
| #define VP_LINE_GND_START_TIMER (VP_LINE_DISCONNECT_EXIT + 1) |
| |
| /**< VP_LINE_CAL_LINE_TIMER: Timer used to sequence the CID state machine */ |
| #define VP_LINE_CAL_LINE_TIMER (VP_LINE_GND_START_TIMER + 1) |
| |
| /**< VP_LINE_PING_TIMER: VE880 Rev VC only used to prevent phone "ping" when exiting disconnect */ |
| #define VP_LINE_PING_TIMER (VP_LINE_CAL_LINE_TIMER + 1) |
| |
| /**< VP_LINE_TRACKER_DISABLE: Used to disable switcher with low power termination type. */ |
| #define VP_LINE_TRACKER_DISABLE (VP_LINE_PING_TIMER + 1) |
| |
| /**< VP_LINE_GPIO_CLKOUT_TIMER: VE580 only time used to slow ringing signal clock output */ |
| #define VP_LINE_GPIO_CLKOUT_TIMER (VP_LINE_TRACKER_DISABLE + 1) |
| |
| /**< VP_LINE_INTERNAL_TESTTERM_TIMER: Timer for the internal test termination */ |
| #define VP_LINE_INTERNAL_TESTTERM_TIMER (VP_LINE_GPIO_CLKOUT_TIMER + 1) |
| |
| /**< VP_LINE_SPEEDUP_RECOVERY_TIMER: Time used to manage the mettalic and battery speedup when |
| * making certain state transitions for VE880 and VE890 |
| */ |
| #define VP_LINE_SPEEDUP_RECOVERY_TIMER (VP_LINE_INTERNAL_TESTTERM_TIMER + 1) |
| |
| /**< VP_LINE_TIMER_LAST: Place holder to indicate number of line timers */ |
| #define VP_LINE_TIMER_LAST (VP_LINE_SPEEDUP_RECOVERY_TIMER + 1) |
| |
| /**< Device Timer Definitions */ |
| /* Test line timer to ensure a more consistant MPI PCM collect routine, leave |
| * this timer as the first timer. */ |
| #define VP_DEV_TIMER_TESTLINE 0 |
| |
| /* Clock fail interrupt timer - used only in 790 API */ |
| #define VP_DEV_TIMER_CLKFAIL (VP_DEV_TIMER_TESTLINE + 1) |
| |
| /* ABS Calibration timer */ |
| #define VP_DEV_TIMER_ABSCAL (VP_DEV_TIMER_CLKFAIL + 1) |
| |
| /* Lower Power Mode Switcher Changes */ |
| #define VP_DEV_TIMER_LP_CHANGE (VP_DEV_TIMER_ABSCAL + 1) |
| |
| /* ABV Caibration device timers */ |
| #define VP_DEV_TIMER_ABV_CAL (VP_DEV_TIMER_LP_CHANGE + 1) |
| |
| /* In-rush limiting enter ringing device timers */ |
| #define VP_DEV_TIMER_ENTER_RINGING (VP_DEV_TIMER_ABV_CAL + 1) |
| |
| /* Used on VE880-ABS only to time switching of the Supply Mode from HP (in Ringing) to MP */ |
| #define VP_DEV_TIMER_EXIT_RINGING (VP_DEV_TIMER_ENTER_RINGING + 1) |
| |
| /* Used to mask clock faults */ |
| #define VP_DEV_TIMER_WB_MODE_CHANGE (VP_DEV_TIMER_EXIT_RINGING + 1) |
| |
| /* Place holder to indicate number of device timers */ |
| #define VP_DEV_TIMER_LAST (VP_DEV_TIMER_WB_MODE_CHANGE + 1) |
| |
| /** FXO specific timer variables to be used for FXO type lines only */ |
| typedef enum VpCslacTimerType { |
| VP_CSLAC_FXS_TIMER, |
| VP_CSLAC_FXO_TIMER, |
| VP_CSLAC_TIMER_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE /* Portability Req.*/ |
| } VpCslacTimerType; |
| |
| |
| #if (defined (VP_CC_880_SERIES) && defined (VP880_FXO_SUPPORT)) || \ |
| (defined (VP_CC_890_SERIES) && defined (VP890_FXO_SUPPORT)) || \ |
| defined (VP_CC_580_SERIES) || defined (VP_CC_KWRAP) |
| typedef struct VpFXOTimerType { |
| uint16 highToLowTime; /**< Device timestamp of last high to low change */ |
| uint16 prevHighToLowTime; |
| bool noCount; /**< TRUE when not counting - lack of activity */ |
| bool lastState; /**< TRUE if last known high, FALSE if low */ |
| uint16 timeLastPolRev; /**< Time in 0.25ms since polrev detected */ |
| uint16 timePrevPolRev; /**< Time in 0.25ms since prev polrev detected */ |
| uint8 maxPeriod; /**< Time in 0.25ms that ringing is detected */ |
| uint16 lastStateChange; /**< Time in 1mS since last state change */ |
| uint16 lastNotLiu; /**< Time in 1mS since last Not LIU detected */ |
| uint16 disconnectDebounce; /**< Time in 1mS to debounce disconnect events */ |
| uint16 disconnectDuration; /**< Time in ticks that disconnect is detected */ |
| uint8 liuDebounce; /**< Time in 1mS to debounce LIU detection that |
| accompanies some kinds of ringing */ |
| uint8 ringOffDebounce; /**< Time in 1mS to ignore disconnect after ring_off */ |
| uint8 ringTimer; /**< When this timer expires, ringing is off */ |
| uint8 cidCorrectionTimer; /**< 1mS increments for CID correction timing */ |
| uint8 bCalTimer; /**< 1mS increments for BFilter sampling time */ |
| uint16 fxoDiscIO2Change; /**< Countdown in 1ms since IO2 changed for FXO_DISC termType */ |
| uint16 pllRecovery; /**< Timer in ticks to recover PLL when FXO Disconnect to OHT */ |
| uint16 currentMonitorTimer;/**< Used to provide FXO line current buffer */ |
| uint16 measureBFilterTimer;/**< 1mS increments for BFilter sampling time */ |
| uint8 lowVoltageTimer; /**< Timer in ticks for the low voltage |
| disconnect/LIU distinction workaround */ |
| } VpFXOTimerType; |
| #endif |
| |
| /** Union of FXO and FXS timers since only one type can exist for each line */ |
| typedef union VpCslacTimers { |
| #if (defined (VP_CC_880_SERIES) && defined (VP880_FXO_SUPPORT)) || \ |
| (defined (VP_CC_890_SERIES) && defined (VP890_FXO_SUPPORT)) || \ |
| defined (VP_CC_580_SERIES) || defined (VP_CC_KWRAP) |
| VpFXOTimerType fxoTimer; |
| #endif |
| uint16 timer[VP_LINE_TIMER_LAST]; /**< FXS Array of timers */ |
| uint16 trackingTime; /**< Used in VE880/VE890 to track the total time the Ring Exit Timer |
| * has been running. The Ring Exit Timer is restarted while waiting for |
| * the silicon to make it's internal SLIC state change (i.e., get out of |
| * the Ring Exit State). But in case the SLIC never makes the expected |
| * state change, we want to force the final change and terminate the |
| * timer. |
| */ |
| } VpCslacTimers; |
| |
| typedef struct VpCslacTimerStruct { |
| VpCslacTimerType type; |
| VpCslacTimers timers; |
| } VpCslacTimerStruct; |
| #endif |