| /** \file vp_CSLAC_types.h |
| * vp_CSLAC_types.h |
| * |
| * Header file for internal variables used in CSLAC type API. |
| * |
| * Copyright (c) 2011, Microsemi |
| * |
| * $Revision: 9103 $ |
| * $LastChangedDate: 2011-11-14 11:15:45 -0600 (Mon, 14 Nov 2011) $ |
| */ |
| |
| #ifndef VP_CSLAC_TYPES_H |
| #define VP_CSLAC_TYPES_H |
| |
| #include "vp_api_fxo_params.h" |
| #include "vp_api_timer.h" |
| |
| #define VP_CSLAC_DEV_PROFILE_VERSION_INT_SW_CONFIG_FR 5 |
| #define VP_CSLAC_DEV_PROFILE_VERSION_INT_SW_CONFIG 4 |
| #define VP_CSLAC_DEV_PROFILE_VERSION_LINECARD_PARAM 3 |
| #define VP_CSLAC_DEV_PROFILE_VERSION_VBH_REG 2 |
| #define VP_CSLAC_DEV_PROFILE_VERSION_SW_CONFIG 1 |
| |
| #define VP_CSLAC_FXO_VERSION_DTMF_LEVEL 1 |
| #define VP_CSLAC_FXO_VERSION_POH 2 |
| |
| #define VP_CSLAC_DC_PROFILE_VERSION_890 1 |
| |
| #define VP_CSLAC_RING_PROFILE_VERSION_890 1 |
| |
| #define VP_CSLAC_TICKSTEP_0_5MS (0x80) /**< CSLAC Tickrate for 0.5mS */ |
| #define VP_CSLAC_TICKSTEP_1MS (0x100) /**< CSLAC Tickrate for 1mS */ |
| |
| #define VP_CID_TIMESCALE 1 /**< Timescale in mS for CID time data */ |
| |
| #define VP_CSLAC_DEV_PROF_TABLE_SIZE 1 |
| #define VP_CSLAC_AC_PROF_TABLE_SIZE 2 |
| #define VP_CSLAC_DC_PROF_TABLE_SIZE 2 |
| #define VP_CSLAC_RINGING_PROF_TABLE_SIZE 2 |
| #define VP_CSLAC_TONE_CADENCE_PROF_TABLE_SIZE 11 |
| #define VP_CSLAC_TONE_PROF_TABLE_SIZE 10 |
| #define VP_CSLAC_RING_CADENCE_PROF_TABLE_SIZE 4 |
| #define VP_CSLAC_METERING_PROF_TABLE_SIZE 2 |
| #define VP_CSLAC_CALLERID_PROF_TABLE_SIZE 2 |
| #define VP_CSLAC_FXO_CONFIG_PROF_TABLE_SIZE 1 |
| #define VP_CSLAC_CUSTOM_TERM_PROF_TABLE_SIZE 4 |
| |
| /* Special Howler Bit-Mask 'xxxx 11xx' */ |
| #define VP_CSLAC_SPECIAL_TONE_MASK (0x0C) |
| #define VP_CSLAC_STD_TONE (0x00) |
| #define VP_CSLAC_HOWLER_TONE (0x04) /* UK BTNR 1080 Specification */ |
| #define VP_CSLAC_AUS_HOWLER_TONE (0x08) |
| #define VP_CSLAC_NTT_HOWLER_TONE (0x0C) |
| |
| #define VP_CSLAC_TONE_TYPE 5 |
| |
| #define VP_CSLAC_READ_RESPONSE_MASK (VP_LINE_EVID_LLCMD_RX_CMP \ |
| | VP_LINE_EVID_RD_OPTION \ |
| | VP_LINE_EVID_GAIN_CMP) |
| |
| typedef struct VpCSLACDeviceProfileTableType { |
| VpProfilePtrType pDevProfileTable[VP_CSLAC_DEV_PROF_TABLE_SIZE]; |
| VpProfilePtrType pAcProfileTable[VP_CSLAC_AC_PROF_TABLE_SIZE]; |
| VpProfilePtrType pDcProfileTable[VP_CSLAC_DC_PROF_TABLE_SIZE]; |
| VpProfilePtrType pRingingProfileTable[VP_CSLAC_RINGING_PROF_TABLE_SIZE]; |
| VpProfilePtrType pToneCadProfileTable[VP_CSLAC_TONE_CADENCE_PROF_TABLE_SIZE]; |
| VpProfilePtrType pToneProfileTable[VP_CSLAC_TONE_PROF_TABLE_SIZE]; |
| VpProfilePtrType pRingingCadProfileTable[VP_CSLAC_RING_CADENCE_PROF_TABLE_SIZE]; |
| VpProfilePtrType pMeteringProfileTable[VP_CSLAC_METERING_PROF_TABLE_SIZE]; |
| VpProfilePtrType pCallerIdProfileTable[VP_CSLAC_CALLERID_PROF_TABLE_SIZE]; |
| VpProfilePtrType pFxoConfigProfileTable[VP_CSLAC_FXO_CONFIG_PROF_TABLE_SIZE]; |
| VpProfilePtrType pCustomTermProfileTable[VP_CSLAC_CUSTOM_TERM_PROF_TABLE_SIZE]; |
| } VpCSLACDeviceProfileTableType; |
| |
| /** |
| * The following structure is used by the device as a bitmask indicating |
| * whether or not a given profile table entry is valid. In the bit location a |
| * value '1' = profile is current, '0' = profile is not current. |
| */ |
| typedef struct VpCSLACProfileTableEntryType { |
| uint16 devProfEntry; |
| uint16 acProfEntry; |
| uint16 dcProfEntry; |
| uint16 ringingProfEntry; |
| uint16 toneCadProfEntry; |
| uint16 toneProfEntry; |
| uint16 ringCadProfEntry; |
| uint16 meterProfEntry; |
| uint16 cidCadProfEntry; |
| uint16 fxoConfigProfEntry; |
| uint16 customTermProfEntry; |
| } VpCSLACProfileTableEntryType; |
| |
| #define VP_PROF_ENTRY_INVALID 0 |
| #define VP_PROF_ENTRY_VALID 1 |
| |
| typedef union VpGetResultsOptionsDataType { |
| VpOptionCriticalFltType criticalFaultOption; |
| VpOptionEventMaskType eventMaskOption; |
| VpOptionPulseModeType pulseModeOption; |
| VpOptionPulseType pulseTypeOption; |
| VpOptionRingControlType ringControlOption; |
| VpOptionZeroCrossType zeroCross; |
| VpOptionTimeslotType timeSlotOption; |
| VpOptionCodecType codecOption; |
| VpOptionPcmHwyType pcmHwyOption; |
| VpOptionLoopbackType loopBackOption; |
| VpOptionLineStateType lineStateOption; |
| VpOptionPcmTxRxCntrlType pcmTxRxCtrl; |
| VpDeviceIoAccessDataType deviceIoData; |
| VpOptionDeviceIoType deviceIo; |
| VpLoopCondResultsType loopCond; |
| bool autoShutdownEn; |
| VpOptionAbsGainType absGain; |
| } VpGetResultsOptionsDataType; |
| |
| typedef struct VpGetResultsOptionsType { |
| VpGetResultsOptionsDataType optionData; |
| uint8 chanId; |
| VpOptionIdType optionType; |
| } VpGetResultsOptionsType; |
| |
| #define VP_CID_DTMF_ON_TIME 70 /**< Nominal 70mS +/- 5mS */ |
| #define VP_CID_DTMF_OFF_TIME 70 /**< Minimum 65mS */ |
| |
| typedef enum VpCidGeneratorControlType { |
| VP_CID_GENERATOR_DATA, |
| VP_CID_GENERATOR_KEYED_CHAR, |
| VP_CID_SIGGEN_EOT, |
| VP_CID_NO_CHANGE, /**< Load tones only, do not change generator |
| * state |
| */ |
| VP_CID_GENERATOR_MARKOUT, |
| VP_CID_CTRL_TYPE_CNT, |
| |
| VP_CID_GENC_ENUM_SIZE = FORCE_STANDARD_C_ENUM_SIZE /* Portability Req.*/ |
| } VpCidGeneratorControlType; |
| |
| /* Previously VpCidStatusFlagType values */ |
| #define VP_CID_RESET_VALUE (0x0000) |
| |
| #define VP_CID_IS_DEBOUNCE (0x0001) /**< Set when debounce has expired */ |
| #define VP_CID_CLIAWAITTONE (0x0002) |
| #define VP_CID_REPEAT_MSG (0x0004) |
| #define VP_CID_AWAIT_TONE (0x0008) /**< Set if waiting for CPE ACK Tone */ |
| |
| #define VP_CID_TERM_FSK (0x0010) /**< Set if stopping FSK generator */ |
| #define VP_CID_END_OF_MSG (0x0020) /**< Set if API detects an end of |
| * message in the buffered data |
| */ |
| |
| #define VP_CID_FSK_GEN_VALID (0x0040) /**< Set if FSK Generator is programmed |
| * for Caller ID signals. |
| */ |
| |
| #define VP_CID_IN_PROGRESS (0x0080) /**< Set if Caller ID is in progress */ |
| #define VP_CID_ACTIVE_RING_SEQ (0x0100) /**< Set if active CID Ring sequence */ |
| |
| #define VP_CID_PRIMARY_FULL (0x0200) /**< Set when primary buffer contains |
| * CID data |
| */ |
| #define VP_CID_SECONDARY_FULL (0x0400) /**< Set when secondary buffer contains |
| * CID data |
| */ |
| #define VP_CID_PRIMARY_IN_USE (0x0800) /**< Set when primary buffer in use */ |
| #define VP_CID_SECONDARY_IN_USE (0x1000) /**< Set when secondary buffer in use */ |
| #define VP_CID_WAIT_ON_ACTIVE (0x2000) /**< Set when a "wait on" mode is |
| * active. Should only be cleared in |
| * the timer function (since currently |
| * support only for Wait on CID or time |
| */ |
| #define VP_CID_MID_CHECKSUM (0x4000) /**< Set when a checksum value is being |
| * sent. |
| */ |
| #define VP_CID_MUTE_ON (0x8000) /**< Set when a "Mute On" CID operator |
| * is active. |
| */ |
| #define VP_CID_FSK_ACTIVE (0x10000) /**< Set while the FSK Generator is needed */ |
| |
| |
| typedef enum VpCidDtmfStatusType { |
| VP_CID_DTMF_RESET_VALUE = 0, |
| VP_CID_ACTIVE_ON_TIME = 1, |
| VP_CID_ACTIVE_OFF_TIME = 2 |
| } VpCidDtmfStatusType; |
| |
| /** Caller ID variables used by the line */ |
| typedef struct VpCallerIdType { |
| uint32 status; /**< 'OR'ed combination of VpCidStatusFlagType */ |
| |
| VpCidDtmfStatusType dtmfStatus; /**< Used only for DTMF CID Message Data */ |
| |
| uint16 cliTimer; /**< Time in increments of device ticks */ |
| uint8 currentData; /**< Data to repeat on the line */ |
| uint16 cidCheckSum; /**< Checksum to append to message data */ |
| |
| uint8 cliDebounceTime; /**< Hook debouce specified in device ticks */ |
| VpProfilePtrType pCliProfile; /**< Currently running CID Profile */ |
| |
| VpDigitType cliDetectTone1; |
| VpDigitType cliDetectTone2; |
| |
| uint8 cliMPIndex; /**< Current Index into primary message buffer */ |
| uint8 cliMSIndex; /**< Current Index into secondary message buffer */ |
| |
| uint8 cliIndex; /**< Current Index into profile data */ |
| |
| uint8 primaryBuffer[VP_SIZEOF_CID_MSG_BUFFER]; |
| uint8 secondaryBuffer[VP_SIZEOF_CID_MSG_BUFFER]; |
| |
| uint8 primaryMsgLen; /**< Length of data in the primary buffer */ |
| uint8 secondaryMsgLen; /**< Length of data in the secondary buffer */ |
| VpDigitType digitDet; /**< Stores the last DTMF digit detected during |
| * Caller ID (if enabled via tone detection). |
| */ |
| uint8 messageDataRemain; /**< Tracks the total number of message bytes remaining */ |
| |
| /* |
| * At the end of FSK Message Data, some systems require a mark-out time. As |
| * specified in the Profile Wizard, this is defined in # of bytes with each |
| * byte corresponding to 8.33ms (1200 baud with 1 start + 1 stop + 8 data |
| * bits = 10/1200 = 8.33ms). |
| */ |
| uint8 markOutByteCount; /* Retains the value specified in the profile */ |
| uint8 markOutByteRemain; /* Current value remaining. Clean up when = 0 */ |
| } VpCallerIdType; |
| |
| typedef enum VpCadenceStatusType { |
| VP_CADENCE_RESET_VALUE = 0x0, |
| VP_CADENCE_STATUS_ACTIVE = 0x1, |
| VP_CADENCE_STATUS_BRANCHING = 0x2, |
| VP_CADENCE_STATUS_MID_TIMER = 0x4, |
| VP_CADENCE_STATUS_SENDSIG = 0x8, |
| VP_CADENCE_STATUS_METERING = 0x10, |
| VP_CADENCE_STATUS_BRANCHING_LVL2 = 0x20, |
| VP_CADENCE_STATUS_IGNORE_POLARITY = 0x40 |
| } VpCadenceStatusType; |
| |
| /** Variables to control the cadence on the line using the Sequencer */ |
| #define VP_CSLAC_MAX_BRANCH_DEPTH 2 |
| #define VP_CSLAC_BRANCH_LVL_0 0 |
| #define VP_CSLAC_BRANCH_LVL_1 1 |
| |
| typedef struct VpSeqDataType { |
| VpProfilePtrType pActiveCadence; /**< Currently Active Cadence */ |
| VpProfilePtrType pCurrentPos; /**< Current position in profile */ |
| |
| VpCadenceStatusType status; |
| |
| uint8 index; /**< Index in the the cadence table */ |
| uint8 length; /**< Length of executable cadence instructions */ |
| |
| /**< Remaining number of repeats to perform for each branch depth */ |
| uint8 count[VP_CSLAC_MAX_BRANCH_DEPTH]; |
| |
| uint16 timeRemain; |
| uint8 branchAt; /**< Outermost step we're branching */ |
| uint16 meteringBurst; /**< Tracks the number of metering pulses sent */ |
| bool meterPendingAbort; /**< Indicates that metering should abort after the |
| * current pulse ends */ |
| VpLineStateType meterAbortLineState; /**< The line state that should be set |
| * when metering aborts */ |
| |
| /* The following variables are for controlling signal generator ramp */ |
| #define VPCSLAC_MAX_GENERATOR_DATA 11 |
| uint8 regData[VPCSLAC_MAX_GENERATOR_DATA]; /**< Scratchpad to reduce MPI |
| * traffic. |
| */ |
| /* |
| * These values should correspond to device specific values for the |
| * freqency/level being set -- not a generic value. |
| */ |
| uint16 startFreq; |
| bool isFreqIncrease; |
| uint16 stopFreq; |
| uint16 freqStep; |
| |
| uint16 startLevel; |
| uint16 stopLevel; |
| uint16 levelStep; |
| uint8 toneType; |
| } VpSeqDataType; |
| /* |
| * Used to save values of registers that will be modified for Special Howler Tones. These |
| * tones require very high amplitude which can be done on VE880/890 using some back-door |
| * controls. Note that VE880/890 have the same command set in the case of these registers |
| */ |
| #define VP_CSLAC_ICR1_LEN (4) |
| #define VP_CSLAC_ICR2_LEN (4) |
| #define VP_CSLAC_ICR3_LEN (4) |
| #define VP_CSLAC_ICR4_LEN (4) |
| #define VP_CSLAC_DC_FEED_LEN (2) |
| #define VP_CSLAC_VP_GAIN_LEN (1) |
| #define VP_CSLAC_GR_LEN (2) |
| #define VP_CSLAC_R_LEN (14) |
| #define VP_CSLAC_DISN_LEN (1) |
| #define VP_CSLAC_OP_FUNC_LEN (1) |
| #define VP_CSLAC_SW_REG_LEN (3) |
| |
| typedef struct VpHowlerModeCachedValues { |
| bool isInHowlerMode; /**< Set to TRUE when in Howler Mode and values below are good */ |
| |
| uint8 icr1Reg[VP_CSLAC_ICR1_LEN]; /**< ICR1 = 0xEC/ED */ |
| uint8 icr2Reg[VP_CSLAC_ICR2_LEN]; /**< ICR2 = 0xEE/EF */ |
| uint8 icr3Reg[VP_CSLAC_ICR3_LEN]; /**< ICR3 = 0xF2/F3 */ |
| uint8 icr4Reg[VP_CSLAC_ICR4_LEN]; /**< ICR4 = 0xEC/ED */ |
| uint8 dcFeed[VP_CSLAC_DC_FEED_LEN]; |
| |
| uint8 digitalRxLoss[VP_CSLAC_VP_GAIN_LEN]; /**< VP Gain Reg - only changing Digital RX Loss */ |
| uint8 grValue[VP_CSLAC_GR_LEN]; |
| uint8 rValue[VP_CSLAC_R_LEN]; |
| |
| uint8 disn[VP_CSLAC_DISN_LEN]; |
| |
| /* |
| * Z and B will be disabled using the Operating Function Register instead of writing |
| * "disable" coefficients. Obviously - less MPI traffic by at least 33 bytes |
| */ |
| uint8 opFunc[VP_CSLAC_OP_FUNC_LEN]; /**< Only disabling Z and B Filters */ |
| |
| uint8 swReg[VP_CSLAC_SW_REG_LEN]; /**< Used to change Tracking floor voltge to -30V */ |
| } VpHowlerModeCachedValues; |
| |
| /** Variables to control the CID sequence on the line using the CID Sequencer */ |
| typedef struct VpCidSeqDataType { |
| VpProfilePtrType pActiveCadence; /**< Currently Active Cadence */ |
| VpProfilePtrType pCurrentPos; /**< Current position in profile */ |
| |
| uint8 index; /**< Index in the the cadence table */ |
| uint16 timeRemain; |
| } VpCidSeqDataType; |
| |
| typedef VpStatusType |
| (*VpSeqInstructionFuncPtrType) ( |
| VpLineCtxType *pLineCtx, |
| VpProfilePtrType pSequenceData); |
| |
| #define VP_SEQ_OPERATOR_MASK 0xE0 |
| #define VP_SEQ_SUBTYPE_MASK 0x1F |
| #define VP_SEQUENCER_TICKRATE 0x0500 /* 5mS - Used with MS_TO_TICKRATE */ |
| |
| /**< The super commands are the upper 3 bits of the command byte and therefore should never be |
| * used with types exceeding 8-bit |
| */ |
| #define VP_SEQ_SPRCMD_COMMAND_INSTRUCTION (0x00) |
| #define VP_SEQ_SPRCMD_TIME_INSTRUCTION (0x20) |
| #define VP_SEQ_SPRCMD_BRANCH_INSTRUCTION (0x40) |
| |
| /**< The sub commands are the lower 5 bits of the command byte */ |
| #define VP_SEQ_SUBCMD_SIGGEN (0x00) |
| #define VP_SEQ_SUBCMD_LINE_STATE (0x01) |
| #define VP_SEQ_SUBCMD_START_CID (0x02) |
| #define VP_SEQ_SUBCMD_WAIT_ON (0x07) /**< Wait for CID or time to continue */ |
| |
| #define VP_SEQ_SUBCMD_RAMP_GENERATORS (0x08) /**< Forces frequency/amplitude change of the tone |
| * generator. Tone Cadence associated with this |
| * command must be specified as "ramp" type. |
| */ |
| |
| /**< API Internal Use only operators */ |
| #define VP_SEQ_SUBCMD_METERING (0x10) /**< Cadence Metering */ |
| |
| /**< Bit-Fields for Tone Generator Control (see Profile Wizard Spec). */ |
| #define VP_SEQ_SIGGEN_ALL_DISABLED (0x00) |
| #define VP_SEQ_SIGGEN_A_EN (0x01) |
| #define VP_SEQ_SIGGEN_B_EN (0x02) |
| #define VP_SEQ_SIGGEN_C_EN (0x04) |
| #define VP_SEQ_SIGGEN_D_EN (0x08) |
| |
| /**< Definition for the states in the Profile Wizard output. These must always be used/accessed |
| * as uint8 types. Do everything possible to create compiler errors if they're used any differently |
| */ |
| typedef uint8 VpProfileCadencerStateTypes; |
| #define VP_PROFILE_CADENCE_STATE_STANDBY ((VpProfileCadencerStateTypes)0) |
| #define VP_PROFILE_CADENCE_STATE_TIP_OPEN ((VpProfileCadencerStateTypes)1) |
| #define VP_PROFILE_CADENCE_STATE_TALK ((VpProfileCadencerStateTypes)2) |
| #define VP_PROFILE_CADENCE_STATE_ACTIVE ((VpProfileCadencerStateTypes)3) |
| #define VP_PROFILE_CADENCE_STATE_RSVD ((VpProfileCadencerStateTypes)4) |
| #define VP_PROFILE_CADENCE_STATE_OHT ((VpProfileCadencerStateTypes)5) |
| #define VP_PROFILE_CADENCE_STATE_DISCONNECT ((VpProfileCadencerStateTypes)6) |
| #define VP_PROFILE_CADENCE_STATE_RINGING ((VpProfileCadencerStateTypes)7) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_STANDBY ((VpProfileCadencerStateTypes)8) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_TIP_OPEN ((VpProfileCadencerStateTypes)9) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_TALK ((VpProfileCadencerStateTypes)10) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_ACTIVE ((VpProfileCadencerStateTypes)11) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_RSVD ((VpProfileCadencerStateTypes)12) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_OHT ((VpProfileCadencerStateTypes)13) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_DISCONNECT ((VpProfileCadencerStateTypes)14) |
| #define VP_PROFILE_CADENCE_STATE_POLREV_RINGING ((VpProfileCadencerStateTypes)15) |
| #define VP_PROFILE_CADENCE_STATE_FXO_OHT ((VpProfileCadencerStateTypes)16) |
| #define VP_PROFILE_CADENCE_STATE_FXO_LOOP_OPEN ((VpProfileCadencerStateTypes)17) |
| #define VP_PROFILE_CADENCE_STATE_FXO_LOOP_CLOSE ((VpProfileCadencerStateTypes)18) |
| #define VP_PROFILE_CADENCE_STATE_FXO_LOOP_TALK ((VpProfileCadencerStateTypes)19) |
| #define VP_PROFILE_CADENCE_STATE_MSG_WAIT_NORM ((VpProfileCadencerStateTypes)20) |
| #define VP_PROFILE_CADENCE_STATE_MSG_WAIT_POLREV ((VpProfileCadencerStateTypes)21) |
| #define VP_PROFILE_CADENCE_STATE_UNKNOWN ((VpProfileCadencerStateTypes)255) |
| |
| /* struct VpDialPulseDetectType is for FXS lines when detecting digits */ |
| typedef enum VpDialPulseDetectStatesType { |
| VP_DP_DETECT_STATE_LOOP_OPEN = 0, |
| VP_DP_DETECT_STATE_LOOP_CLOSE = 1, |
| VP_DP_DETECT_STATE_IDLE = 2 |
| } VpDialPulseDetectStatesType; |
| |
| typedef struct VpDialPulseDetectType { |
| int digits; |
| uint16 lo_time; |
| uint16 lc_time; |
| VpDialPulseDetectStatesType state; /**< Dial Pulse State Machine state */ |
| bool hookSt; |
| uint8 signalingData; |
| } VpDialPulseDetectType; |
| |
| /* struct VpDigitGenerationDataType is for FXO lines when generating digits */ |
| typedef struct VpDigitGenerationDataType { |
| uint16 dtmfOnTime; |
| uint16 dtmfOffTime; |
| uint8 breakTime; |
| uint8 makeTime; |
| uint16 flashTime; |
| uint16 dpInterDigitTime; |
| uint8 dtmfHighFreqLevel[2]; |
| uint8 dtmfLowFreqLevel[2]; |
| } VpDigitGenerationDataType; |
| |
| /** Virtual Device Registers - Used to reduce MPI accesses to the Device */ |
| typedef struct VpVirtualDeviceReg { |
| uint8 sigRegMSB; /**< Signaling Register's Most Significant byte */ |
| uint8 sigRegLSB; /**< Signaling Register's Least Significant byte */ |
| uint8 iMaskMSB; /**< Interrupt mask for the current line */ |
| uint8 iMaskLSB; /**< Interrupt mask for the current line */ |
| uint8 iMaskMSBSP; /**< Interrupt mask for the current line */ |
| uint8 iMaskLSBSP; /**< Interrupt mask for the current line */ |
| uint8 ccR1SP; |
| uint8 ccR5SP; /**< Scratchpad for CCR5 used during metering */ |
| uint8 ccR8SP; /**< Scratchpad for CCR8 used during calibration */ |
| uint8 ioReg; /**< IO Register for QSLAC SLIC states */ |
| } VpVirtualDeviceReg; |
| |
| /**< |
| * IMPORTANT: Make sure to update the type used for "state" member inside |
| * objects, structs, and passed to functions where the comment states the value |
| * is a bit-mask of "VpDeviceStateType". Seach by "VpDeviceStateType". |
| * There are no instance of this type itself. |
| */ |
| typedef enum VpDeviceStateType { |
| /**< Indicates if function is running from InitDevice. Not the same as in |
| * the middle of an initialization process (including calibration). Used to |
| * allow InitDevice function calling other functions to be enabled. Otherwise, |
| * some functions will return "Device Not Initialized" error. |
| */ |
| VP_DEV_INIT_IN_PROGRESS = 0x0001, |
| |
| VP_DEV_INIT_CMP = 0x0002, /**< Set if device has been initialized */ |
| VP_DEV_IN_CAL = 0x0004, /**< Set if device is busy calibrating */ |
| VP_DEV_PENDING_INT = 0x0008, /**< Set if there is a pending interrupt */ |
| |
| VP_DEV_ABS_BAT_CAL = 0x0010, /**< Set when running ABS (batt switch) Cal */ |
| VP_DEV_ABV_CAL = 0x0020, /**< Set when running ABV Calibration on Tracker */ |
| VP_DEV_ABV_CAL_ABS = 0x0040, /**< Set when running ABV Calibration on ABS */ |
| VP_DEV_DISC_PENDING = 0x0080, /**< Set when a Disconnect Timer was suspsended */ |
| |
| VP_DEV_TEST_BUFFER_READ = 0x0100, /**< Set if test buffer was read this tick */ |
| |
| /**< Set if device in process of warm reboot. Note that warm reboot |
| * detection alone only helps skipping of VpCalCodec() because it is run |
| * with VpInitDevice(). But it does not ensure that VpCalLine() was |
| * previously run. |
| */ |
| VP_DEV_WARM_REBOOT = 0x0200 |
| |
| } VpDeviceStateType; |
| |
| typedef struct VpCSLACDeviceStatusType { |
| uint16 state; /**< This is a bit-mask of VpDeviceStateType values */ |
| uint8 globStatReg; /**< Holds state of the device stat reg */ |
| uint8 calibrating; /**< Calibration timer */ |
| uint8 numIntServiced; /**< Max interrupts to be serviced during tick */ |
| } VpCSLACDeviceStatusType; |
| |
| #define VP_CSLAC_MAX_RCN_PCN_SIZE 2 |
| typedef struct VpDeviceStaticInfoType { |
| uint8 rcnPcn[VP_CSLAC_MAX_RCN_PCN_SIZE]; /**< Revision Code Number and |
| * Product Code Number as |
| * applicable |
| */ |
| uint8 maxChannels; /**< How many lines supported by this device */ |
| } VpDeviceStaticInfoType; |
| |
| typedef struct VpDeviceDynamicInfoType { |
| uint8 lastChan; /**< The last line checked */ |
| bool clkFault; /** TRUE if a clock fault is active */ |
| bool bat1Fault; /** TRUE if a bat1 fault is active and device level */ |
| bool bat2Fault; /** TRUE if a bat2 fault is active and device level */ |
| bool bat3Fault; /** TRUE if a bat3 fault is active and device level */ |
| } VpDeviceDynamicInfoType; |
| |
| /** Line state variables used by the line (api internal) */ |
| #ifdef STRICT_SIGNED_ENUM_VALUES |
| typedef uint16 VpCslacLineCondType; |
| |
| #define VP_CSLAC_STATUS_INVALID (0x0000) |
| |
| /* FXS Type Status */ |
| #define VP_CSLAC_HOOK (0x0001) |
| #define VP_CSLAC_GKEY (0x0002) |
| |
| /* FXO Type Status */ |
| #define VP_CSLAC_RAW_DISC (0x0001) |
| #define VP_CSLAC_RINGING (0x0004) |
| #define VP_CSLAC_DISC (0x0008) |
| |
| #define VP_CSLAC_AC_FLT (0x0010) |
| #define VP_CSLAC_DC_FLT (0x0020) |
| #define VP_CSLAC_THERM_FLT (0x0040) |
| #define VP_CSLAC_CAL_ENABLE (0x0080) |
| |
| #define VP_CSLAC_CAL_FAIL (0x0100) |
| #define VP_CSLAC_POLREV (0x0200) |
| #define VP_CSLAC_POLREV_REPORTED (0x0400) |
| #define VP_CSLAC_LIU (0x0800) |
| |
| #define VP_CSLAC_LINE_LEAK_TEST (0x1000) |
| #define VP_CSLAC_RING_AMP_DET (0x2000) |
| #define VP_CSLAC_RINGING_EXIT (0x4000) |
| #define VP_CSLAC_STATUS_VALID (0x8000) |
| #else |
| typedef enum VpCslacLineCondType { |
| VP_CSLAC_STATUS_INVALID = 0x0000, |
| |
| /* FXS Type Status */ |
| VP_CSLAC_HOOK = 0x0001, |
| VP_CSLAC_GKEY = 0x0002, |
| |
| /* FXO Type Status */ |
| VP_CSLAC_RAW_DISC = 0x0001, /* |
| * Set on 890 when device level disconnect |
| * status is set. Cleared otherwise. |
| */ |
| |
| VP_CSLAC_RINGING = 0x0004, /**< Set when Ringing detected on Line */ |
| VP_CSLAC_DISC = 0x0008, /**< Set when Disconnect detected on Line */ |
| |
| VP_CSLAC_AC_FLT = 0x0010, |
| VP_CSLAC_DC_FLT = 0x0020, |
| VP_CSLAC_THERM_FLT = 0x0040, |
| VP_CSLAC_CAL_ENABLE = 0x0080, /**< Set when the line is in a state that |
| * will allow device calibration |
| */ |
| |
| VP_CSLAC_CAL_FAIL = 0x0100, |
| VP_CSLAC_POLREV = 0x0200, |
| VP_CSLAC_POLREV_REPORTED = 0x0400, |
| VP_CSLAC_LIU = 0x0800, |
| |
| VP_CSLAC_LINE_LEAK_TEST = 0x1000, /**< Set when line is being tested for |
| * resistive leak. Clear when test is |
| * complete. |
| */ |
| VP_CSLAC_RING_AMP_DET = 0x2000, |
| VP_CSLAC_RINGING_EXIT = 0x4000, /**< Set when FXS line is exiting Ringing */ |
| VP_CSLAC_STATUS_VALID = 0x8000 |
| } VpCslacLineCondType; |
| #endif |
| |
| typedef enum VpCslacCalType { |
| VP_CSLAC_CAL_NONE = 0x0, |
| VP_CSLAC_CAL_VOC, |
| VP_CSLAC_CAL_ABV |
| } VpCslacCalType; |
| |
| typedef struct VpApiIntLineStateType { |
| VpLineStateType currentState; /**< Current state of the line */ |
| VpLineStateType previous; /**< Previous sate of the line */ |
| VpLineStateType usrCurrent; /**< Current user set state of the line */ |
| |
| /**< Differences between the usrCurrent state and currentState occur during most API internal |
| * line state control operations. E.g., Ringing Cadence and Calibration. When performing line |
| * state control functions on behalf of the Application (e.g., VpSendSignal()), these should |
| * be the same. For ex: if running a Forrward Disconnect Send Signal operation, for the duration |
| * the line is in VP_LINE_DISCONNECT the reported state using VpGetLineState() should be |
| * VP_LINE_DISCONNECT - not the state the line was in prior to performing VpSendSignal(). |
| */ |
| |
| uint16 condition; /**< 'OR' Combination of VpCslacLineCondType */ |
| VpCslacCalType calType; |
| } VpApiIntLineStateType; |
| |
| /**< Indexes into the Custome Term Profile Type. #define instead of enums becuase the values |
| * must never be negative (many compilers treat enum = int type) and types larger than 8-bit is |
| * a waste. |
| */ |
| #define VP_CUSTOM_TERM_SLIC_TYPE (6) |
| #define VP_CUSTOM_TERM_NUM_STATES (7) |
| |
| /**< Indexes into the FXO/Dialing Profile Type. #define instead of enums becuase the values |
| * must never be negative (many compilers treat enum = int type) and types larger than 8-bit is |
| * a waste. |
| */ |
| #define VP_FXO_DIAL_PRFL_DTMF_ON_MSB (6) |
| #define VP_FXO_DIAL_PRFL_DTMF_ON_LSB (7) |
| #define VP_FXO_DIAL_PRFL_DTMF_OFF_MSB (8) |
| #define VP_FXO_DIAL_PRFL_DTMF_OFF_LSB (9) |
| #define VP_FXO_DIAL_PRFL_FLASH_HOOK_MSB (10) |
| #define VP_FXO_DIAL_PRFL_FLASH_HOOK_LSB (11) |
| #define VP_FXO_DIAL_PRFL_PULSE_BREAK (12) |
| #define VP_FXO_DIAL_PRFL_PULSE_MAKE (13) |
| #define VP_FXO_DIAL_PRFL_INTERDIG_MSB (14) |
| #define VP_FXO_DIAL_PRFL_INTERDIG_LSB (15) |
| #define VP_FXO_DIAL_PRFL_RING_PRD_MAX (16) |
| #define VP_FXO_DIAL_PRFL_RING_PRD_MIN (17) |
| #define VP_FXO_DIAL_PRFL_RING_VOLT_MIN (18) |
| #define VP_FXO_DIAL_PRFL_DISC_VOLT_MIN (19) |
| #define VP_FXO_DIAL_PRFL_LIU_THRESH_MIN (20) |
| #define VP_FXO_DIAL_PRFL_RSVD (21) |
| #endif |
| |
| |
| |
| |