/*===========================================================================
FILE: 
   GobiVoiceMgmtAPI.h

DESCRIPTION:
   
==========================================================================*/

#ifndef GobiVoiceMgmtAPI_H
#define GobiVoiceMgmtAPI_H
/*=========================================================================*/
// Definitions
/*=========================================================================*/
#ifdef GOBIAPI_EXPORTS
	#define IMPORTGOBI extern "C" __declspec( dllexport )   
#else  //GOBIAPI_EXPORTS
	#ifdef __cplusplus
		/* C++ callable DLL */
		#define IMPORTGOBI extern "C" __declspec( dllimport )   
	#else
		/* C callable DLL */
		#define IMPORTGOBI __declspec( dllimport )
	#endif
#endif //GOBIAPI_EXPORTS

// Calling convention for API
#define GOBICALLBACK __stdcall
#define GOBICMAPI __stdcall

#ifdef __cplusplus
   extern "C" {
#endif


#define MAXUSSDLENGTH          256//182
#define MAX_CALL_NO_LEN        81
#define MAX_DESCRIPTION_LENGTH 255
#define PASSWORD_LENGTH        5
#define PASSWORD_STRLEN		   4
#define MAX_NO_OF_CALLS        8
#define MAX_NO_OF_PB           10
#define MAX_WATITINGMSG			5
#define MAX_CELLINFO_PLMN		3
#define MAX_SESSIONINFO			512
#define MAX_PKG_DESCRIPTION		1528

typedef struct
{
    BYTE		OMAInitState;
    BYTE		sessionState;
	BYTE		HFAState;
	WORD		HFARetryTimes;
	WORD		HFARetryInterval;
	WORD		HFARetryCount;
	BYTE		FUMOState;
	LONG		FUMOResult;
	WORD		vendorNameLen;
	TCHAR		vendorName[MAX_SESSIONINFO];
	LONG		imageSize;
	WORD		pkgVerStrLen;
	TCHAR		pkgVerStr[MAX_SESSIONINFO];
	WORD		pkgNameLen;
	TCHAR		pkgName[MAX_SESSIONINFO];
	WORD		pkgDesLen;
	TCHAR		pkgDescription[MAX_PKG_DESCRIPTION];
	WORD		pkgDateLen;
	TCHAR		pkgDate[MAX_SESSIONINFO];
	WORD		pkgTimeLen;
	TCHAR		pkgTime[MAX_SESSIONINFO];
} omaSessionInfo;

typedef struct
{
    BYTE		FUMOState;
	BYTE		dummy;
	WORD		UITimeOut;
	LONG		pkgSize;
	LONG		pkgReceivedByte;
	WORD		FUMOResult;
	WORD		pkgVerStrLen;
	TCHAR		pkgVerStr[MAX_SESSIONINFO];
	WORD		pkgNameLen;
	TCHAR		pkgName[MAX_SESSIONINFO];
	WORD		pkgDesLen;
	TCHAR		pkgDescription[MAX_PKG_DESCRIPTION];
} FUMOInfo;

typedef struct
{
    BYTE		DMState;
	BYTE		UIOption;
	WORD		UITimeOut;
	WORD		alertStrLen;
	TCHAR		alertStr[MAX_SESSIONINFO];
} OMAInfo;

typedef struct
{
	ULONG		cellid;	
	CHAR		plmn[MAX_CELLINFO_PLMN];
	WORD		lac;
	WORD		arfcn;
	BYTE		bsic;
	ULONG		timing;
	WORD		rxLv;
} geranCellInfo;

typedef struct
{
	WORD		cellid;
	CHAR		plmn[MAX_CELLINFO_PLMN];
	WORD		lac;
	WORD		uarfcn;
	WORD		psc;
	WORD		rscp;
	WORD		ecio;
} umtsCellInfo;

typedef struct
{
	WORD		sid;
	WORD		nid;
	WORD		baseid;
	WORD		refpn;
	ULONG		base_lat;
	ULONG		base_long;
} cdmaCellInfo;

/**
 *  This structure contains USS Information
 *
 *  \param  ussDCS
 *          - 1 - ASCII coding scheme
 *          - 2 - 8-BIT coding scheme
 *          - 3 - UCS2
 *
 *  \param  ussLen
 *          - Range 1 to 182
 *
 *  \param  ussData
 *          - Data encoded as per the DCS
 *
 */
typedef struct 
{
    BYTE ussDCS;
    BYTE ussLen;
    CHAR ussData[MAXUSSDLENGTH+1];
} USSInfo;

/**
 *  This structure contains User to User Signaling Service Information.
 *
 *  \param  UUSType
 *          - UUS type values are:
 *              - 0x00 - UUS_DATA
 *              - 0x01 - UUS_TYPE1_IMPLICIT
 *              - 0x02 - UUS_TYPE1_REQUIRED
 *              - 0x03 - UUS_TYPE1_NOT_REQUIRED
 *              - 0x04 - UUS_TYPE2_REQUIRED
 *              - 0x05 - UUS_TYPE2_NOT_REQUIRED
 *              - 0x06 - UUS_TYPE3_REQUIRED
 *              - 0x07 - UUS_TYPE3_NOT_REQUIRED
 *              - 0xFF - Not Available
 *
 *  \param  UUSDcs
 *          - UUS data coding scheme values are:
 *              - 0x01 - UUS_DCS_USP
 *              - 0x02 - UUS_DCS_OHLP
 *              - 0x03 - UUS_DCS_X244
 *              - 0x04 - UUS_DCS_SMCF
 *              - 0x05 - UUS_DCS_IA5
 *              - 0x06 - UUS_DCS_RV12RD
 *              - 0x07 - UUS_DCS_Q931UNCCM
 *              - 0xFF - Not Available
 *
 *  \param  UUSDatalen
 *          - Number of sets of the following elements.
 *              - UUSData
 *          - If zero(0) then no further information exists.
 *
 *  \param  UUSData[MAX_DESCRIPTION_LENGTH]
 *          - UUS data encoded as per coding scheme
 *
 */
typedef struct
{
    BYTE UUSType;
    BYTE UUSDcs;
    BYTE UUSDatalen;
    CHAR UUSData[MAX_DESCRIPTION_LENGTH];
} UUSInfo;

/**
 *  This structure contains Closed User Group Information
 *
 *  \param  CUGIndex
 *          - Range 0x00... 0x7FFF
 *
 *  \param  SuppPrefCUG
 *          - Suppress preferential CUG
 *              - 0x00 - FALSE
 *              - 0x01 - TRUE
 *
 *  \param  SuppOA
 *          - Suppress OA subscription option
 *              - 0x00 - FALSE
 *              - 0x01 - TRUE
 *
 */
typedef struct
{
    WORD CUGIndex;
    BYTE SuppPrefCUG;
    BYTE SuppOA;
} CUGInfo;

/**
 *  This structure contains information about the Called Sub Party Addresses.
 *
 *  \param  extBit
 *          - Extension bit.
 *
 *  \param  subAddrType
 *          - Subaddress type.
 *              - 0x00 - NSAP
 *              - 0x01 - USER
 *
 *  \param  oddEvenInd
 *          - Even/odd indicator.
 *              - 0x00 - Even number of address signals
 *              - 0x01 - Odd number of address signals
 *
 *  \param  subAddrLen
 *          - Number of sets of the following elements:
 *              - SubAddress
 *
 *  \param  subAddr[MAX_DESCRIPTION_LENGTH]
 *          - Array of the SubAddress in BCD number format.
 *
 */
typedef struct
{
    BYTE extBit;
    BYTE subAddrType;
    BYTE oddEvenInd;
    BYTE subAddrLen;
    CHAR subAddr[MAX_DESCRIPTION_LENGTH];
} calledPartySubAdd;

/**
 *  This structure contains Voice Call Request Parameters
 *
 *  \param  callNumber[81]
 *          - Number to be dialed in ASCII string, NULL terminated.
 *          - Length Range [1 to 81]
 *
 *  \param  pCallType
 *          - the type of call to be dialed. CALL_TYPE_VOICE is automatically
 *            selected if this parameter is not provided.
 *            When CALL_TYPE_NON_STD_OTASP is selected, the call is sent as a
 *            nonstandard OTASP call regardless of the digit string
 *            Call type values are:
 *              - 0x00 - CALL_TYPE_VOICE - Voice (automatic selection)
 *              - 0x01 - CALL_TYPE_VOICE_FORCED -
 *                  Avoid modem call classification
 *              - 0x08 - CALL_TYPE_NON_STD_OTASP - Nonstandard OTASP*
 *              - 0x09 - CALL_TYPE_EMERGENCY - Emergency
 *
 *  \param  pCLIRType
 *          - CLIR type values are:
 *              - 0x01 - CLIR_SUPPRESSION - Suppression
 *              - 0x02 - CLIR_INVOCATION - Invocation
 *
 *  \param  pUUSInFo
 *          - Pointer to structure of UUSInfo
 *              - See \ref UUSInfo for more information
 *
 *  \param  pCUGInfo
 *          - Pointer to structure of CUGInfo
 *              - See \ref CUGInfo for more information
 *
 *  \param  pEmergencyCategory
 *          - Bit mask of emergency number categories. This is only applicable
 *            when the call type is set to Emergency.
 *               - Bit 0 - VOICE_EMER_CAT_POLICE_BIT - Police
 *               - Bit 1 - VOICE_EMER_CAT_AMBULANCE_BIT - Ambulance
 *               - Bit 2 - VOICE_EMER_CAT_FIRE_BRIGADE_BIT- Fire brigade
 *               - Bit 3 - VOICE_EMER_CAT_MARINE_GUARD_BIT - Marine guard
 *               - Bit 4 - VOICE_EMER_CAT_MOUNTAIN_RESCUE_BIT - Mountain rescue
 *               - Bit 5 - VOICE_EMER_CAT_MANUAL_ECALL_BIT -
 *                   Manual emergency call
 *               - Bit 6 - VOICE_EMER_CAT_AUTO_ECALL_BIT -
 *                   Automatic emergency call
 *               - Bit 7 - VOICE_EMER_CAT_SPARE_BIT - Spare bit
 *
 *  \param  pCallPartySubAdd
 *          - Pointer to structure of calledPartySubAdd
 *              - See \ref calledPartySubAdd for more information
 *
 *  \param  pSvcType
 *          - Service Type.
 *              - 0x01 - VOICE_DIAL_CALL_SRV_TYPE_AUTOMATIC - Automatic
 *              - 0x02 - VOICE_DIAL_CALL_SRV_TYPE_GSM - GSM
 *              - 0x03 - VOICE_DIAL_CALL_SRV_TYPE_WCDMA - WCDMA
 *              - 0x04 - VOICE_DIAL_CALL_SRV_TYPE_CDMA_AUTOMATIC -
 *                  CDMA automatic
 *              - 0x05 - VOICE_DIAL_CALL_SRV_TYPE_GSM_WCDMA - GSM or WCDMA
 *              - 0x06 - VOICE_DIAL_CALL_SRV_TYPE_LTE -LTE
 */
typedef struct
{
    CHAR              callNumber[MAX_CALL_NO_LEN];
    BYTE              *pCallType;
    BYTE              *pCLIRType;
    UUSInfo           *pUUSInfo;
    CUGInfo           *pCUGInfo;
    BYTE              *pEmergencyCategory;
    calledPartySubAdd *pCallPartySubAdd;
    ULONG             *pSvcType;
} tDialReqParam;

/**
 *  This structure contains information about the Alpha Identifier.
 *
 *  \param  alphaDcs
 *          - Alpha coding scheme
 *              - 0x01 - GSM Default_Char
 *              - 0x02 - UCS2
 *              - 0xFF - Not Available
 *
 *  \param  alphaLen
 *          - Number of sets of the following elements:
 *              - pAlpha_text
 *          - If zero(0) then no further information exists.
 *
 *  \param  alphaText[MAX_DESCRIPTION_LENGTH]
 *          - Data encoded as per the alpha_dcs
 *
 */
typedef struct
{
   BYTE alphaDcs;
   BYTE alphaLen;
   CHAR alphaText[MAX_DESCRIPTION_LENGTH];
} alphaIDInfo;

/**
 *  This structure contains information about the Call Control Supplementary
 *  Service Types
 *
 *  \param  svcType
 *          - Service type.
 *              - 0x01 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_ACTIVATE -
 *                  Activate
 *              - 0x02 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_DEACTIVATE -
 *                  Deactivate
 *              - 0x03 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_REGISTER -
 *                  Register
 *              - 0x04 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_ERASE - Erase
 *              - 0x05 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_INTERROGATE -
 *                  Interrogate
 *              - 0x06 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_REGISTER_PASSWORD -
 *                  Register password
 *              - 0x07 - VOICE_CC_SUPS_RESULT_SERVICE_TYPE_USSD - USSD
 *              - 0xFF - Not Available
 *
 *  \param  reason
 *          - Call control supplementary service result reason
 *          - Values:
 *              - See qaGobiApiTableCallControlReturnReasons.h for return reasons.
 *
 */
typedef struct
{
   BYTE svcType;
   BYTE reason;
} ccSUPSType;

/**
 *  This structure contains Information about call state changes. For example,
 *  when an incoming call is received, this structure is populated and indicate
 *  the incoming call information. When this incoming call is answered, the
 *  call status changes from INCOMING to CONVERSATION, which means a change
 *  in the call information and this structure is populated again with the
 *  changes and notified to/retrived by the user.
 *
 *  \param  callID
 *          - Call identifier for the call queried for information.
 *          - If zero(0) then invalid.
 *
 *  \param  callState
 *          - Call state.
 *              - 0x01 - CALL_STATE_ORIGINATION - Origination
 *              - 0x02 - CALL_STATE_INCOMING - Incoming
 *              - 0x03 - CALL_STATE_CONVERSATION - Conversation
 *              - 0x04 - CALL_STATE_CC_IN_PROGRESS -
 *                 Call is originating but waiting for call control to complete
 *              - 0x05 - CALL_STATE_ALERTING - Alerting
 *              - 0x06 - CALL_STATE_HOLD - Hold
 *              - 0x07 - CALL_STATE_WAITING - Waiting
 *              - 0x08 - CALL_STATE_DISCONNECTING - Disconnecting
 *              - 0x09 - CALL_STATE_END - End
 *              - 0x0A - CALL_STATE_SETUP - MT call is in Setup state in 3GPP
 *              - 0xFF - Not Available
 *
 *  \param  callType
 *          - Call type.
 *              - 0x00 - CALL_TYPE_VOICE - Voice
 *              - 0x02 - CALL_TYPE_VOICE_IP - Voice over IP
 *              - 0x06 - CALL_TYPE_OTAPA - OTAPA
 *              - 0x07 - CALL_TYPE_STD_OTASP - Standard OTASP
 *              - 0x08 - CALL_TYPE_NON_STD_OTASP - Nonstandard OTASP
 *              - 0x09 - CALL_TYPE_EMERGENCY - Emergency
 *              - 0xFF - Not Available
 *
 *  \param  direction
 *          - Direction.
 *              - 0x01 - CALL_DIRECTION_MO - MO call
 *              - 0x02 - CALL_DIRECTION_MT - MT call
 *              - 0xFF - Not Available
 *
 *  \param  mode
 *          - Mode.
 *          - If the mode field is "0x01 - CDMA",the optional Service Option,
 *            Voice Privacy, and OTASP Status (only for OTASP calls) TLVs are
 *            included in the response.
 *              - 0x01 - CALL_MODE_CDMA - CDMA
 *              - 0x02 - CALL_MODE_GSM - GSM
 *              - 0x03 - CALL_MODE_UMTS - UMTS
 *              - 0x04 - CALL_MODE_LTE - LTE
 *              - 0x05 - CALL_MODE_TDS - TD-SCDMA
 *              - 0xFF - Not Available
 *
 *  \param  isEmpty
 *          - Multiparty indicator.
 *              - 0x00 - False
 *              - 0x01 - True
 *
 *  \param  ALS
 *          - Alternate Line Service line indicator.
 *          - Feature for supporting two different phone numbers on the same
 *            mobile device.
 *              - 0x00 - ALS_LINE1 - Line 1 (default)
 *              - 0x01 - ALS_LINE2 - Line 2
 *
 */
typedef struct
{
    BYTE callID;
    BYTE callState;
    BYTE callType;
    BYTE direction;
    BYTE mode;
	BYTE isMpty;
	BYTE als;
} allcallInfo;

/**
 *  This structure contains Information about call state changes. For example,
 *  when an incoming call is received, this structure is populated and indicate
 *  the incoming call information. When this incoming call is answered, the
 *  call status changes from INCOMING to CONVERSATION, which means a change
 *  in the call information and this structure is populated again with the
 *  changes and notified to/retrived by the user.
 *
 *  \param  callID
 *          - Call identifier for the call queried for information.
 *          - If zero(0) then invalid.
 *
 *  \param  callState
 *          - Call state.
 *              - 0x01 - CALL_STATE_ORIGINATION - Origination
 *              - 0x02 - CALL_STATE_INCOMING - Incoming
 *              - 0x03 - CALL_STATE_CONVERSATION - Conversation
 *              - 0x04 - CALL_STATE_CC_IN_PROGRESS -
 *                 Call is originating but waiting for call control to complete
 *              - 0x05 - CALL_STATE_ALERTING - Alerting
 *              - 0x06 - CALL_STATE_HOLD - Hold
 *              - 0x07 - CALL_STATE_WAITING - Waiting
 *              - 0x08 - CALL_STATE_DISCONNECTING - Disconnecting
 *              - 0x09 - CALL_STATE_END - End
 *              - 0x0A - CALL_STATE_SETUP - MT call is in Setup state in 3GPP
 *              - 0xFF - Not Available
 *
 *  \param  callType
 *          - Call type.
 *              - 0x00 - CALL_TYPE_VOICE - Voice
 *              - 0x02 - CALL_TYPE_VOICE_IP - Voice over IP
 *              - 0x06 - CALL_TYPE_OTAPA - OTAPA
 *              - 0x07 - CALL_TYPE_STD_OTASP - Standard OTASP
 *              - 0x08 - CALL_TYPE_NON_STD_OTASP - Nonstandard OTASP
 *              - 0x09 - CALL_TYPE_EMERGENCY - Emergency
 *              - 0xFF - Not Available
 *
 *  \param  direction
 *          - Direction.
 *              - 0x01 - CALL_DIRECTION_MO - MO call
 *              - 0x02 - CALL_DIRECTION_MT - MT call
 *              - 0xFF - Not Available
 *
 *  \param  mode
 *          - Mode.
 *          - If the mode field is "0x01 - CDMA",the optional Service Option,
 *            Voice Privacy, and OTASP Status (only for OTASP calls) TLVs are
 *            included in the response.
 *              - 0x01 - CALL_MODE_CDMA - CDMA
 *              - 0x02 - CALL_MODE_GSM - GSM
 *              - 0x03 - CALL_MODE_UMTS - UMTS
 *              - 0x04 - CALL_MODE_LTE - LTE
 *              - 0x05 - CALL_MODE_TDS - TD-SCDMA
 *              - 0xFF - Not Available
 *
 */
typedef struct
{
    BYTE callID;
    BYTE callState;
    BYTE callType;
    BYTE direction;
    BYTE mode;
} callInfo;


/**
 *  This structure contains an array of Call Info
 *
 *  \param  numInstances
 *          - Number of getAllCallInfo that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  getAllCallInfo[MAX_NO_OF_CALLS]
 *          - Array of CallInfo.
 *          - See \ref getAllCallInfo for more information.
 *
 */
typedef struct
{
    BYTE      		numInstances;
    allcallInfo 	callInfo[MAX_NO_OF_CALLS];
} arrCallInfo;

/**
 *  This structure contains information for Connected Peer Numbers.
 *
 *  \param  numPI
 *          - Number presentation indicator.
 *              - 0x00 - PRESENTATION_ALLOWED - Allowed presentation
 *              - 0x01 - PRESENTATION_RESTRICTED - Restricted presentation
 *              - 0x02 - PRESENTATION_NUM_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x04 - PRESENTATION_PAYPHONE -
 *                 Payphone presentation (GSM/UMTS specific)
 *              - 0xFF - Not Available
 *
 *  \param  numSI
 *          - Number screening indicator.
 *              - 0x00 - QMI_VOICE_SI_USER_PROVIDED_NOT_SCREENED -
 *                  Provided user is not screened
 *              - 0x01 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_PASSED -
 *                  Provided user passed verification
 *              - 0x02 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_FAILED -
 *                  Provided user failed verification
 *              - 0x03 - QMI_VOICE_SI_NETWORK_PROVIDED - Provided network
 *
 *  \param  numType
 *          - Number type.
 *              - 0x00 - QMI_VOICE_NUM_TYPE_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_TYPE_INTERNATIONAL - International
 *              - 0x02 - QMI_VOICE_NUM_TYPE_NATIONAL - National
 *              - 0x03 - QMI_VOICE_NUM_TYPE_NETWORK_SPECIFIC - Network-specific
 *              - 0x04 - QMI_VOICE_NUM_TYPE_SUBSCRIBER - Subscriber
 *              - 0x05 - QMI_VOICE_NUM_TYPE_RESERVED - Reserved
 *              - 0x06 - QMI_VOICE_NUM_TYPE_ABBREVIATED - Abbreviated
 *              - 0x07 - QMI_VOICE_NUM_TYPE_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  numPlan
 *          - Number plan.
 *              - 0x00 - QMI_VOICE_NUM_PLAN_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_PLAN_ISDN - ISDN
 *              - 0x03 - QMI_VOICE_NUM_PLAN_DATA - Data
 *              - 0x04 - QMI_VOICE_NUM_PLAN_TELEX - Telex
 *              - 0x08 - QMI_VOICE_NUM_PLAN_NATIONAL - National
 *              - 0x09 - QMI_VOICE_NUM_PLAN_PRIVATE - Private
 *              - 0x0B - QMI_VOICE_NUM_PLAN_RESERVED_CTS -
 *                  Reserved cordless telephony system
 *              - 0x0F - QMI_VOICE_NUM_PLAN_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *
 *  \param  number[MAX_CALL_NO_LEN]
 *          - number of numLen length, NULL terminated.
 *
 */
typedef struct
{
    BYTE numPI;
    BYTE numSI;
    BYTE numType;
    BYTE numPlan;
    BYTE numLen;
    CHAR number[MAX_CALL_NO_LEN];
} peerNumInfo;

/**
 *  This structure contains information for Connected Peer Numbers.
 *
 *  \param  callID
 *          - Unique call identifier for the call.
 *
 *  \param  numPI
 *          - Number presentation indicator.
 *              - 0x00 - PRESENTATION_ALLOWED - Allowed presentation
 *              - 0x01 - PRESENTATION_RESTRICTED - Restricted presentation
 *              - 0x02 - PRESENTATION_NUM_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x04 - PRESENTATION_PAYPHONE -
 *                 Payphone presentation (GSM/UMTS specific)
 *              - 0xFF - Not Available
 *
 *  \param  numSI
 *          - Number screening indicator.
 *              - 0x00 - QMI_VOICE_SI_USER_PROVIDED_NOT_SCREENED -
 *                  Provided user is not screened
 *              - 0x01 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_PASSED -
 *                  Provided user passed verification
 *              - 0x02 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_FAILED -
 *                  Provided user failed verification
 *              - 0x03 - QMI_VOICE_SI_NETWORK_PROVIDED - Provided network
 *
 *  \param  numType
 *          - Number type.
 *              - 0x00 - QMI_VOICE_NUM_TYPE_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_TYPE_INTERNATIONAL - International
 *              - 0x02 - QMI_VOICE_NUM_TYPE_NATIONAL - National
 *              - 0x03 - QMI_VOICE_NUM_TYPE_NETWORK_SPECIFIC - Network-specific
 *              - 0x04 - QMI_VOICE_NUM_TYPE_SUBSCRIBER - Subscriber
 *              - 0x05 - QMI_VOICE_NUM_TYPE_RESERVED - Reserved
 *              - 0x06 - QMI_VOICE_NUM_TYPE_ABBREVIATED - Abbreviated
 *              - 0x07 - QMI_VOICE_NUM_TYPE_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  numPlan
 *          - Number plan.
 *              - 0x00 - QMI_VOICE_NUM_PLAN_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_PLAN_ISDN - ISDN
 *              - 0x03 - QMI_VOICE_NUM_PLAN_DATA - Data
 *              - 0x04 - QMI_VOICE_NUM_PLAN_TELEX - Telex
 *              - 0x08 - QMI_VOICE_NUM_PLAN_NATIONAL - National
 *              - 0x09 - QMI_VOICE_NUM_PLAN_PRIVATE - Private
 *              - 0x0B - QMI_VOICE_NUM_PLAN_RESERVED_CTS -
 *                  Reserved cordless telephony system
 *              - 0x0F - QMI_VOICE_NUM_PLAN_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *
 *  \param  number[MAX_CALL_NO_LEN]
 *          - number of numLen length, NULL terminated.
 *
 */
typedef struct
{
    BYTE callID;
    BYTE numPI;
    BYTE numSI;
    BYTE numType;
    BYTE numPlan;
    BYTE numLen;
    CHAR number[MAX_CALL_NO_LEN];
} allpeerNumInfo;

typedef struct
{
    BYTE      		numInstances;
    allpeerNumInfo 	info[MAX_NO_OF_CALLS];
} arrPeerNumInfo;

/**
 *  This structure contains information about the numbers that are dialed from
 *  the device or from which a call is received on the device.
 *
 *  \param  presentationInd
 *          - Presentation indicator.
 *              - 0x00 - PRESENTATION_ALLOWED - Allowed presentation
 *              - 0x01 - PRESENTATION_RESTRICTED - Restricted presentation
 *              - 0x02 - PRESENTATION_NUM_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x04 - PRESENTATION_PAYPHONE -
 *                 Payphone presentation (GSM/UMTS specific)
 *              - 0xFF - Not Available
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  remPartyNumber[MAX_CALL_NO_LEN]
 *          - Array of numbers in ASCII, NULL ending.
 *
 */
typedef struct
{
 	BYTE PI;
    BYTE numLen;
    CHAR number[MAX_CALL_NO_LEN];
} remotePartyNum;


/**
 *  This structure contains information about the numbers that are dialed from
 *  the device or from which a call is received on the device.
 *
 *  \param  callID
 *          - Unique call identifier for the call.
 *
 *  \param  presentationInd
 *          - Presentation indicator.
 *              - 0x00 - PRESENTATION_ALLOWED - Allowed presentation
 *              - 0x01 - PRESENTATION_RESTRICTED - Restricted presentation
 *              - 0x02 - PRESENTATION_NUM_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x04 - PRESENTATION_PAYPHONE -
 *                 Payphone presentation (GSM/UMTS specific)
 *              - 0xFF - Not Available
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  remPartyNumber[MAX_CALL_NO_LEN]
 *          - Array of numbers in ASCII, NULL ending.
 *
 */
typedef struct
{
    BYTE callID;
	BYTE PI;
    BYTE numLen;
    CHAR number[MAX_CALL_NO_LEN];
} allremotePartyNum;

/**
 *  This structure contains an array of Remote Party Numbers
 *
 *  \param  numInstances
 *          - Number of remotePartyNum that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  RmtPtyNum[MAX_NO_OF_CALLS]
 *          - Array of remotePartyNum.
 *          - See \ref getAllCallRmtPtyNum for more information.
 *
 */
typedef struct
{
    BYTE                	numInstances;
    allremotePartyNum 		rmtPtyNum[MAX_NO_OF_CALLS];
} arrRemotePartyNum;

/**
 *  This structure contains Diagnostic Information
 *
 *  \param  diagInfoLen
 *          - Provides the length of information which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  diagnosticInfo[MAX_DESCRIPTION_LENGTH]
 *          - Diagnostic information.
 *
 */
typedef struct
{
   BYTE diagInfoLen;
   CHAR diagnostic[MAX_DESCRIPTION_LENGTH];
} diagInfo;

/**
 *  This structure contains Diagnostic Information
 *
 *  \param  callID
 *          - Unique call identifier for the call.
 *
 *  \param  diagInfoLen
 *          - Provides the length of information which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  diagnosticInfo[MAX_DESCRIPTION_LENGTH]
 *          - Diagnostic information.
 *
 */
typedef struct
{
   BYTE callID;
   BYTE diagInfoLen;
   CHAR diagnostic[MAX_DESCRIPTION_LENGTH];
} alldiagInfo;

/**
 *  This structure contains an array of Diagnostic Information.
 *
 *  \param  numInstances
 *          - Number of DiagInfo that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  DiagInfo[MAX_NO_OF_CALLS]
 *          - Array of DiagInfo.
 *          - See \ref allCallsDiagInfo for more information.
 *
 */
typedef struct
{
    BYTE	     numInstances;
    alldiagInfo	 diag[MAX_NO_OF_CALLS];
} arrDiagInfo;

/**
 *  This structure contains information for Alpha Identifier for All Calls
 *
 *  \param  callID
 *          - Unique call identifier for the call.
 *
 *  \param  AlphaIDInfo
 *          - See \ref alphaIDInfo for more information.
 *
 */
typedef struct
{
	BYTE   		numInstances;
    BYTE        callID[MAX_NO_OF_CALLS];
    alphaIDInfo info[MAX_NO_OF_CALLS];
} arrAlphaIDInfo;

/**
 *  This structure contains information about the names that are dialed from
 *  the device or from which a call is received on the device.
 *
 *  \param  namePI
 *          - Name presentation indicator.
 *              - 0x00 - PRESENTATION_NAME_PRESENTATION_ALLOWED -
 *                 Allowed presentation
 *              - 0x01 - PRESENTATION_NAME_PRESENTATION_RESTRICTED -
 *                 Restricted presentation
 *              - 0x02 - PRESENTATION_NAME_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x03 - PRESENTATION_NAME_NAME_PRESENTATION_RESTRICTED -
 *                 Restricted name presentation
 *              - 0xFF - Not Available
 *
 *  \param  codingScheme
 *          - Refer to Table10 qaGobiApiTableCodingScheme.h for coding schemes
 *          - 0xFF - Not Available
 *
 *  \param  nameLen
 *          - Provides the length of name which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callerName[MAX_DESCRIPTION_LENGTH]
 *          - Name in ASCII, NULL ending.
 *
 */
typedef struct
{
    BYTE namePI;
    BYTE codingScheme;
    BYTE nameLen;
    CHAR name[MAX_DESCRIPTION_LENGTH];
} remotePartyName;

/**
 *  This structure contains information about the names that are dialed from
 *  the device or from which a call is received on the device.
 *
 *  \param  callID
 *          - Unique call identifier for the call.
 *
 *  \param  namePI
 *          - Name presentation indicator.
 *              - 0x00 - PRESENTATION_NAME_PRESENTATION_ALLOWED -
 *                 Allowed presentation
 *              - 0x01 - PRESENTATION_NAME_PRESENTATION_RESTRICTED -
 *                 Restricted presentation
 *              - 0x02 - PRESENTATION_NAME_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x03 - PRESENTATION_NAME_NAME_PRESENTATION_RESTRICTED -
 *                 Restricted name presentation
 *              - 0xFF - Not Available
 *
 *  \param  codingScheme
 *          - Refer to Table10 qaGobiApiTableCodingScheme.h for coding schemes
 *          - 0xFF - Not Available
 *
 *  \param  nameLen
 *          - Provides the length of name which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callerName[MAX_DESCRIPTION_LENGTH]
 *          - Name in ASCII, NULL ending.
 *
 */
typedef struct
{
    BYTE callID;
    BYTE namePI;
    BYTE codingScheme;
    BYTE nameLen;
    CHAR name[MAX_DESCRIPTION_LENGTH];
} allremotePartyName;

/**
 *  This structure contains an array of Remote Party Numbers
 *
 *  \param  numInstances
 *          - Number of remotePartyNum that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  RmtPtyNum[MAX_NO_OF_CALLS]
 *          - Array of remotePartyNum.
 *          - See \ref remotePartyName for more information.
 *
 */
typedef struct
{
    BYTE                numInstances;
    allremotePartyName 	RmtPtyName[MAX_NO_OF_CALLS];
} arrRemotePartyName;


/**
 *  This structure contains an array of Call End Reasons.
 *
 *  \param  numInstances
 *          - Number of callID, callEndReason that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callID[MAX_NO_OF_CALLS]
 *          - Array of Unique call identifier for the call.
 *
 *  \param  callEndReason[MAX_NO_OF_CALLS]
 *          - Array of Call End Reason .
 *          - See Table9 qaGobiApiTableVoiceCallEndReasons.h for a list of valid
 *            voice-related call end reasons
 *
 */
typedef struct
{
   BYTE numInstances;
   BYTE callID[MAX_NO_OF_CALLS];
   WORD callEndReason[MAX_NO_OF_CALLS];
} arrCallEndReason;

/**
 *  This structure contains array an of Servicing option.
 *
 *  \param  numInstances
 *          - Number of callID, srvOption that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callID[MAX_NO_OF_CALLS]
 *          - Array of Unique call identifier for the call.
 *
 *  \param  srvOption[MAX_NO_OF_CALLS]
 *          - Array of Service option.
 *          - See Table9 qaGobiApiTableServiceOptions.h for standard service
 *            option number assignments.
 *
 */
typedef struct
{
  BYTE numInstances;
  BYTE callID[MAX_NO_OF_CALLS];
  WORD srvOption[MAX_NO_OF_CALLS];
} arrSvcOption;


/**
 *  This structure contains an array of User to User Signaling Service
 *  Information
 *
 *  \param  numInstances
 *          - Number of allCallsUUSInfo that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callID[MAX_NO_OF_CALLS]
 *          - Array of Unique call identifier for the call.
 *
 *  \param  AllCallsUUSInfo[MAX_NO_OF_CALLS]
 *          - Array of allCallsUUSInfo.
 *          - See \ref allCallsUUSInfo for more information.
 *
 */
typedef struct
{
    BYTE            numInstances;
	BYTE 			callID[MAX_NO_OF_CALLS];	
    UUSInfo 		UUSInfo[MAX_NO_OF_CALLS];
} arrUUSInfo;


/**
 *  This structure contains an array of Alerting Type.
 *
 *  \param  numInstances
 *          - Number of callID, AlertingType that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callID[MAX_NO_OF_CALLS]
 *          - Array of Unique call identifier for the call.
 *
 *  \param  AlertingType[MAX_NO_OF_CALLS]
 *          - Array of Alerting type.
 *              - 0x00 - ALERTING_LOCAL - Local
 *              - 0x01 - ALERTING_REMOTE - Remote
 *
 */
typedef struct
{
    BYTE numInstances;
    BYTE callID[MAX_NO_OF_CALLS];
    BYTE alertingType[MAX_NO_OF_CALLS];
} arrAlertingType;


/**
 *  This structure contains an array of Alerting Pattern.
 *
 *  \param  numInstances
 *          - Number of callID, alertingPattern that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callID[MAX_NO_OF_CALLS]
 *          - Array of Unique call identifier for the call.
 *
 *  \param  alertingPattern[MAX_NO_OF_CALLS]
 *          - Array of Alerting pattern.
 *              - 0x00 - QMI_VOICE_ALERTING_PATTERN_1 - Pattern 1
 *              - 0x01 - QMI_VOICE_ALERTING_PATTERN_2 - Pattern 2
 *              - 0x02 - QMI_VOICE_ALERTING_PATTERN_3 - Pattern 3
 *              - 0x04 - QMI_VOICE_ALERTING_PATTERN_5 - Pattern 5
 *              - 0x05 - QMI_VOICE_ALERTING_PATTERN_6 - Pattern 6
 *              - 0x06 - QMI_VOICE_ALERTING_PATTERN_7 - Pattern 7
 *              - 0x07 - QMI_VOICE_ALERTING_PATTERN_8 - Pattern 8
 *              - 0x08 - QMI_VOICE_ALERTING_PATTERN_9 - Pattern 9
 *
 */
typedef struct
{
     BYTE  numInstances;
     BYTE  callID[MAX_NO_OF_CALLS];
     ULONG alertingPattern[MAX_NO_OF_CALLS];
} arrAlertingPattern;

/**
 *  This structure contains information about the Calling Line Identification
 *  Restriction (CLIR) supplementary service responses.
 *
 *  \param  ActiveStatus
 *          - Active status.
 *          - Values:
 *              - 0x00 - ACTIVE_STATUS_INACTIVE - Inactive
 *              - 0x01 - ACTIVE_STATUS_ACTIVE - Active
 *              - 0xFF - Not Available
 *
 *  \param  ProvisionStatus
 *          - Provisioned status.
 *          - Values:
 *              - 0x00 - PROVISION_STATUS_NOT_PROVISIONED - Not provisioned
 *              - 0x01 - PROVISION_STATUS_PROVISIONED_PERMANENT -
 *                  Permanently provisioned
 *              - 0x02 - PROVISION_STATUS_PRESENTATION_RESTRICTED -
 *                  Restricted presentation
 *              - 0x03 - PROVISION_STATUS_PRESENTATION_ALLOWED -
 *                  Allowed presentation
 *              - 0xFF - Not Available
 *
 */
typedef struct
{
    BYTE ActiveStatus;
    BYTE ProvisionStatus;
} CLIRResp;

/**
 *  This structure contains information about the COLP, CLIP
 *  COLR, CNAP responses.
 *
 *  \param  ActiveStatus
 *          - Active status.
 *          - Values:
 *              - 0x00 - ACTIVE_STATUS_INACTIVE - Inactive
 *              - 0x01 - ACTIVE_STATUS_ACTIVE - Active
 *              - 0xFF - Not Available
 *
 *  \param  ProvisionStatus
 *          - Provisioned status.
 *          - Values:
 *              - 0x00 - PROVISION_STATUS_NOT_PROVISIONED - Not provisioned
 *              - 0x01 - PROVISION_STATUS_PROVISIONED - Provisioned
 *              - 0xFF - Not Available
 *
 */
typedef struct
{
    BYTE ActiveStatus;
    BYTE ProvisionStatus;
} statusResp;

/**
 *  This structure contains information of ECT number.
 *
 *  \param  ectCallState
 *          - ECT call states
 *				- 0x00 - ECT_CALL_STATE_NONE – None
 *              - 0x01 - ECT_CALL_STATE_ALERTING – Alerting
 *              - 0x02 - ECT_CALL_STATE_ACTIVE – Active
 *
 *  \param  pi
 *          - Presentation indicator.
 *				- 0x00 – presentationAllowedAddress
 *				- 0x01 – presentationRestricted
 *				- 0x02 – numberNotAvailable
 *				- 0x04 – presentationRestrictedAddress
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  number
 *          - Number in ASCII, NULL ending.
 *
 *
 */
typedef struct
{
     BYTE  ectCallState;
     BYTE  pi;
	 BYTE  numLen;
     CHAR number[MAX_DESCRIPTION_LENGTH];
} ectInfo;

/**
 *  This structure contains Supplementary Service request parameters related to
 *  different features and their activation, deactivation, registration
 *  and erasure (applicable only for 3GPP)
 *
 *  \param  numberType
 *          - Call forwarding number type
 *              - 0x00 - QMI_VOICE_NUM_TYPE_UNKNOWN
 *                  Unknown
 *              - 0x01 - QMI_VOICE_NUM_TYPE_INTERNATIONAL
 *                  International
 *              - 0x02 - QMI_VOICE_NUM_TYPE_NATIONAL
 *                  National
 *              - 0x03 - QMI_VOICE_NUM_TYPE_NETWORK_SPECIFIC
 *                  Network-specific
 *              - 0x04 - QMI_VOICE_NUM_TYPE_SUBSCRIBER
 *                  Subscriber
 *              - 0x05 - QMI_VOICE_NUM_TYPE_RESERVED
 *                  Reserved
 *              - 0x06 - QMI_VOICE_NUM_TYPE_ABBREVIATED
 *                  Abbreviated
 *              - 0x07 - QMI_VOICE_NUM_TYPE_RESERVED_EXTENSION
 *                  Reserved extension
 *
 *  \param  numberPlan
 *          - Call forwarding number plan
 *              - 0x00 - QMI_VOICE_NUM_PLAN_UNKNOWN
 *                  Unknown
 *              - 0x01 - QMI_VOICE_NUM_PLAN_ISDN
 *                  ISDN
 *              - 0x03 - QMI_VOICE_NUM_PLAN_DATA
 *                  Data
 *              - 0x04 - QMI_VOICE_NUM_PLAN_TELEX
 *                  Telex
 *              - 0x08 - QMI_VOICE_NUM_PLAN_NATIONAL
 *                  National
 *              - 0x09 - QMI_VOICE_NUM_PLAN_PRIVATE
 *                  Private
 *              - 0x0B - QMI_VOICE_NUM_PLAN_RESERVED_CTS
 *                  Reserved cordless telephony system
 *              - 0x0F - QMI_VOICE_NUM_PLAN_RESERVED_EXTENSION
 *                  Reserved extension
 */
typedef struct
{
    BYTE numberType;
    BYTE numberPlan;
} callFwdTypeAndPlan;

/**
 *  This structure contains Supplementary Service request parameters related to
 *  different features and their activation, deactivation, registration
 *  and erasure (applicable only for 3GPP)
 *
 *  \param  voiceSvc
 *          - Manages all call-independent supplementary services, such as
 *            activation, deactivation, registration, and erasure (mandatory)
 *              - 0x01 - VOICE_SERVICE_ACTIVATE
 *              - 0x02 - VOICE_SERVICE_DEACTIVATE
 *              - 0x03 - VOICE_SERVICE_REGISTER
 *              - 0x04 - VOICE_SERVICE_ERASE
 *
 *  \param  reason
 *          - supplementary service reason values (mandatory)
 *              - 0x01 - QMI_VOICE_REASON_FWD_UNCONDITIONAL\n
 *                   Unconditional call forwarding
 *              - 0x02 - QMI_VOICE_REASON_FWD_MOBILEBUSY\n
 *                  Forward when the mobile is busy
 *              - 0x03 - QMI_VOICE_REASON_FWD_NOREPLY\n
 *                  Forward when there is no reply
 *              - 0x04 - QMI_VOICE_REASON_FWD_UNREACHABLE\n
 *                  Forward when the call is unreachable
 *              - 0x05 - QMI_VOICE_REASON_FWD_ALLFORWARDING\n
 *                  All forwarding
 *              - 0x06 - QMI_VOICE_REASON_FWD_ALLCONDITIONAL\n
 *                  All conditional forwarding
 *              - 0x07 - QMI_VOICE_REASON_BARR_ALLOUTGOING\n
 *                  All outgoing calls are barred
 *              - 0x08 - QMI_VOICE_REASON_BARR_OUTGOINGINT\n
 *                  Outgoing internal calls are barred
 *              - 0x09 - QMI_VOICE_REASON_BARR_OUTGOINGINTEXTOHOME\n
 *                  Outgoing calls external to home are barred
 *              - 0x0A - QMI_VOICE_REASON_BARR_ALLINCOMING\n
 *                  All incoming calls are barred
 *              - 0x0B - QMI_VOICE_REASON_BARR_INCOMINGROAMING\n
 *                  Roaming incoming calls are barred
 *              - 0x0C - QMI_VOICE_REASON_BARR_ALLBARRING\n
 *                  All calls are barred
 *              - 0x0D - QMI_VOICE_REASON_BARR_ALLOUTGOINGBARRING\n
 *                  All outgoing calls are barred
 *              - 0x0E - QMI_VOICE_REASON_BARR_ALLINCOMINGBARRING\n
 *                  All incoming calls are barred
 *              - 0x0F - QMI_VOICE_REASON_CALLWAITING\n
 *                  Call waiting
 *
 *  \param  pServiceClass
 *          - Service class is a combination (sum) of information
 *            class constants (optional)
 *              - See \ref serviceClassInformation for more information
 *
 *  \param  pCallBarringPasswd
 *          - Password is required if call barring is provisioned using a
 *            password. Password consists of 4 ASCII digits.
 *            Range: 0000 to 9999 (optional)
 *
 *  \param  pCallForwardingNumber
 *          - Call forwarding number to be registered with the network. This has
 *            to be included in the request only when the service is set to
 *            VOICE_SERVICE_REGISTER. NULL terminated ASCII string. (optional)
 *
 *  \param  pTimerVal
 *          - Call forwarding no reply timer value in seconds. This has to be
 *            included in the request only when the service is set to
 *            VOICE_SERVICE_REGISTER and the reason is
 *            QMI_VOICE_REASON_FWD_NOREPLY. (optional)
 *              - Range: 5 to 30 in steps of 5
 *
 *  \param  pCallFwdTypeAndPlan
 *          - Information about call forwarding type and plan. This parameter is
 *            ignored when the Call Forwarding Number is not included (optional)
 *              - See \ref callFwdTypeAndPlan for more information
 *
 */
typedef struct
{
    BYTE voiceSvc;
    BYTE reason;
    BYTE *pServiceClass;
    BYTE *pCallBarringPasswd;
    BYTE *pCallForwardingNumber;
    BYTE *pTimerVal;
    callFwdTypeAndPlan *pCallFwdTypeAndPlan;
} voiceSetSUPSServiceReq;

/**
 *  This structure contains information for Get Call Forwarding Information.
 *
 *  \param  SvcStatus
 *          - Service status. Values:
 *              - 0x00 - SERVICE_STATUS_INACTIVE - Inactive
 *              - 0x01 - SERVICE_STATUS_ACTIVE - Active
 *
 *  \param  SvcClass
 *          - Service Class is a combination (sum) of information class
 *            constants
 *          - See qaGobiApiTableSupServiceInfoClasses.h for service classes.
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *
 *  \param  number[MAX_DESCRIPTION_LENGTH]
 *          - number of numLen length, NULL terminated.
 *
 *  \param  noReplyTimer
 *          - No reply timer value in seconds
 *          - A value of 0 indicates that noReplyTimer is ignored.
 */
typedef struct
{
    BYTE SvcStatus;
    BYTE SvcClass;
    BYTE numLen;
    CHAR number[MAX_DESCRIPTION_LENGTH];
    BYTE noReplyTimer;
} callFWInfo;

/**
 *  This structure contains an array of Call Forwarded Information.
 *
 *  \param  numInstances
 *          - Number of callFWInfo that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  CallFWInfo[MAX_NO_OF_CALLS]
 *          - Array of callFWInfo.
 *              - See \ref callFWInfo for more information.
 *
 */
typedef struct
{
    BYTE       numInstances;
    callFWInfo CallFWInfo[MAX_NO_OF_CALLS];
} getCallFWInfo;


/**
 *  This structure contains information for Get Call Forwarding Information.
 *
 *  \param  SvcStatus
 *          - Service status. Values:
 *              - 0x00 - SERVICE_STATUS_INACTIVE - Inactive
 *              - 0x01 - SERVICE_STATUS_ACTIVE - Active
 *
 *  \param  SvcClass
 *          - Service Class is a combination (sum) of information class
 *            constants
 *          - See qaGobiApiTableSupServiceInfoClasses.h for service classes.
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *
 *  \param  number[MAX_DESCRIPTION_LENGTH]
 *          - number of numLen length, NULL terminated.
 *
 *  \param  noReplyTimer
 *          - No reply timer value in seconds
 *          - A value of 0 indicates that noReplyTimer is ignored.
 */
typedef struct
{
    BYTE SvcStatus;
    BYTE SvcClass;
	BYTE noReplyTimer;
	BYTE pi;
	BYTE si;
	BYTE numType;
    BYTE numLen;
    CHAR number[MAX_DESCRIPTION_LENGTH];
} extCallFWInfo;

/**
 *  This structure contains an array of Call Forwarded Information.
 *
 *  \param  numInstances
 *          - Number of callFWInfo that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  CallFWInfo[MAX_NO_OF_CALLS]
 *          - Array of callFWInfo.
 *              - See \ref callFWInfo for more information.
 *
 */
typedef struct
{
    BYTE       		numInstances;
    extCallFWInfo 	extFWInfo[MAX_NO_OF_CALLS];
} getExtCallFWInfo;


/**
 *  This structure contains Voice Set Call Barring Password Request Parameters
 *
 *  \param  Reason
 *          - Call Barring Reason
 *          - Values:
 *              - 0x07 - QMI_VOICE_REASON_BARR_ALLOUTGOING - All outgoing
 *              - 0x08 - QMI_VOICE_REASON_BARR_OUTGOINGINT - Outgoing internal
 *              - 0x09 - QMI_VOICE_REASON_BARR_OUTGOINGINTEXTOHOME -
 *                  Outgoing external to home
 *              - 0x0A - QMI_VOICE_REASON_BARR_ALLINCOMING - All incoming
 *              - 0x0B - QMI_VOICE_REASON_BARR_INCOMINGROAMING -
 *                  Roaming incoming
 *              - 0x0C - QMI_VOICE_REASON_BARR_ALLBARRING -
 *                  All calls are barred
 *              - 0x0D - QMI_VOICE_REASON_BARR_ALLOUTGOINGBARRING -
 *                  All outgoing calls are barred
 *              - 0x0E - QMI_VOICE_REASON_BARR_ALLINCOMINGBARRING -
 *                  All incoming calls are barred
 *
 *  \param  oldPasswd[PASSWORD_LENGTH]
 *          - Old password.
 *              - Password consists of 4 ASCII digits.
 *              - Range: 0000 to 9999.
 *
 *  \param  newPasswd[PASSWORD_LENGTH]
 *          - New password.
 *              - Password consists of 4 ASCII digits.
 *              - Range: 0000 to 9999.
 *
 *  \param  newPasswdAgain[PASSWORD_LENGTH]
 *          - New password Again.
 *              - Password consists of 4 ASCII digits.
 *              - Range: 0000 to 9999.
 *
 */
typedef struct
{
    BYTE reason;
    CHAR oldPwd[PASSWORD_LENGTH];
    CHAR newPwd[PASSWORD_LENGTH];
    CHAR newPwdAgain[PASSWORD_LENGTH];
} callBarringPwd;

/**
 *  This structure contains information about the Air Timer.
 *
 *  \param  namID
 *          - Index of the NAM(Number Assignment Module) to be configured.
 *          - Range 0 to 3.
 *          - Some modems support only 1 or 2 NAMs.
 *          - 0xFF,if not available.
 *
 *  \param  airTimerValue
 *          - Time in minutes.
 *          - Cumulative air time is slammed.
 *          - 0xFFFFFFFF,if not available.
 *
 */
typedef struct
{
    BYTE  namID;
    ULONG airTimerValue;
} airTimer;

/**
 *  This structure contains information about the Roam Timer.
 *
 *  \param  namID
 *          - Index of the NAM(Number Assignment Module) to be configured.
 *          - Range 0 to 3.
 *          - Some modems support only 1 or 2 NAMs.
 *          - 0xFF,if not available.
 *
 *  \param  roamTimerValue
 *          - Time in minutes.
 *          - Cumulative air time is slammed.
 *          - 0xFFFFFFFF,if not available.
 *
 */
typedef struct
{
    BYTE  namID;
    ULONG roamTimerValue;
} roamTimer;

/**
 *  This structure contains information about the Preferred Voice Service Options.
 *
 *  \param  namID
 *          - Index of the NAM(Number Assignment Module) to be configured.
 *          - Range 0 to 3.
 *          - Some modems support only 1 or 2 NAMs.
 *          - 0xFF,if not available.
 *
 *  \param  evrcCapability
 *          - EVRC capability.
 *          - Values:
 *              - 0x00 - Disable
 *              - 0x01 - Enable
 *              - 0xFF - Not Available
 *
 *  \param  homePageVoiceSO
 *          - Home page voice SO; most preferred CDMA SO to be requested from
 *            the network when receiving an incoming (MT) voice call within
 *            the home network.
 *          - Values:
 *              - 0x0000 - VOICE_SO_WILD - Any service option
 *              - 0x0001 - VOICE_SO_IS_96A - IS-96A
 *              - 0x0003 - VOICE_SO_EVRC - EVRC
 *              - 0x0011 - VOICE_SO_13K_IS733 - 13K_IS733
 *              - 0x0038 - VOICE_SO_SELECTABLE_MODE_VOCODER -
 *                  Selectable mode vocoder
 *              - 0x0044 - VOICE_SO_4GV_NARR0W_BAND - 4GV narrowband
 *              - 0x0046 - VOICE_SO_4GV_WIDE_BAND - 4GV wideband
 *              - 0x8000 - VOICE_SO_13K - 13K
 *              - 0x8001 - VOICE_SO_IS_96 - IS-96
 *              - 0x8023 - VOICE_SO_WVRC - WVRC
 *              - 0xFFFF - Not Available
 *
 *  \param  homeOrigVoiceSO
 *          - Home origination voice SO; most preferred CDMA SO to be requested
 *            from the network when receiving an incoming (MT) voice call within
 *            the home network.
 *          - Values:
 *              - 0x0000 - VOICE_SO_WILD - Any service option
 *              - 0x0001 - VOICE_SO_IS_96A - IS-96A
 *              - 0x0003 - VOICE_SO_EVRC - EVRC
 *              - 0x0011 - VOICE_SO_13K_IS733 - 13K_IS733
 *              - 0x0038 - VOICE_SO_SELECTABLE_MODE_VOCODER -
 *                  Selectable mode vocoder
 *              - 0x0044 - VOICE_SO_4GV_NARR0W_BAND - 4GV narrowband
 *              - 0x0046 - VOICE_SO_4GV_WIDE_BAND - 4GV wideband
 *              - 0x8000 - VOICE_SO_13K - 13K
 *              - 0x8001 - VOICE_SO_IS_96 - IS-96
 *              - 0x8023 - VOICE_SO_WVRC - WVRC
 *              - 0xFFFF - Not Available
 *
 *  \param  roamOrigVoiceSO
 *          - Roaming origination voice SO; most preferred CDMA SO to be
 *            requested from the network when receiving an incoming (MT)
 *            voice call within the home network.
 *          - Values:
 *              - 0x0000 - VOICE_SO_WILD - Any service option
 *              - 0x0001 - VOICE_SO_IS_96A - IS-96A
 *              - 0x0003 - VOICE_SO_EVRC - EVRC
 *              - 0x0011 - VOICE_SO_13K_IS733 - 13K_IS733
 *              - 0x0038 - VOICE_SO_SELECTABLE_MODE_VOCODER -
 *                  Selectable mode vocoder
 *              - 0x0044 - VOICE_SO_4GV_NARR0W_BAND - 4GV narrowband
 *              - 0x0046 - VOICE_SO_4GV_WIDE_BAND - 4GV wideband
 *              - 0x8000 - VOICE_SO_13K - 13K
 *              - 0x8001 - VOICE_SO_IS_96 - IS-96
 *              - 0x8023 - VOICE_SO_WVRC - WVRC
 *              - 0xFFFF - Not Available
 *
 */
typedef struct
{
    BYTE namID;
    BYTE evrcCapability;
    WORD homePageVoiceSO;
    WORD homeOrigVoiceSO;
    WORD roamOrigVoiceSO;
} prefVoiceSO;

/**
 *  This structure contains the Current Adaptive Multi Rate Configuration
 *  Information.
 *
 *  \param  gsmAmrStat
 *          - GSM AMR Status
 *              - 0x00 - Disable
 *              - 0x01 - Enable
 *              - 0xFF - Not Available
 *
 *  \param  wcdmaAmrStat
 *          - WCDMA AMR Status
 *          - One or a combination of the following bitmask values:
 *              - Bit 0 - AMR codec advertised is not supported
 *              - Bit 1 - Controls WCDMA AMR wideband
 *              - Bit 2 - Controls GSM half rate AMR
 *              - Bit 3 - Controls GSM AMR wideband
 *              - Bit 4 - Controls GSM AMR narrowband
 *          - 0xFF, if not available
 *
 */
typedef struct
{
    BYTE gsmAmrStat;
    BYTE wcdmaAmrStat;
} curAMRConfig;

/**
 *  This structure contains information about the DTMF (Dual Tone
 *  Multi-Frequency).
 *
 *  \param  callID
 *          - Call identifier for the current call.
 *
 *  \param  DTMFEvent
 *          - DTMF event
 *              - 0x00 - DTMF_EVENT_REV_BURST - Sends a CDMA-burst DTMF
 *              - 0x01 - DTMF_EVENT_REV_START_CONT -
 *                 Starts a continuous DTMF tone
 *              - 0x03 - DTMF_EVENT_REV_STOP_CONT -
 *                 Stops a continuous DTMF tone
 *              - 0x05 - DTMF_EVENT_FWD_BURST -
 *                 Received a CDMA-burst DTMF message
 *              - 0x06 - DTMF_EVENT_FWD_START_CONT -
 *                 Received a start-continuous DTMF tone order
 *              - 0x07 - DTMF_EVENT_FWD_STOP_CONT -
 *                 Received a stop-continuous DTMF tone order
 *
 *  \param  digitCnt
 *          - Number of set of following element i.e. digitBuff.
 *
 *  \param  digitBuff[MAX_DESCRIPTION_LENGTH]
 *          - DTMF digit buffer in ASCII string which is NULL terminated
 *
 */
typedef struct
{
    BYTE callID;
    BYTE DTMFEvent;
    BYTE digitCnt;
    BYTE digitBuff[MAX_DESCRIPTION_LENGTH];
} DTMFInfo;


/**
 *  This structure contains information about the Signal Information
 *
 *  \param  sigType
 *          - Singal Type.
 *
 *  \param  alertPitch
 *          - Alter pitch. 
 *
 *  \param  signal
 *          - Signal tone.
 *
 */
typedef struct
{
    BYTE sigType;
    BYTE alertPitch;
    BYTE signal;
} signalInfo;

/**
 *  This structure contains information about the current caller ID.
 *
 *  \param  presentationInd
 *          - Presentation indicator.
 *
 *  \param  callerLen
 *          - Provides the length of number which follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  callerID[MAX_CALL_NO_LEN]
 *          - Caller ID in ASCII.
 *
 */
typedef struct
{
 	BYTE PI;
    BYTE callerIDLen;
    CHAR callerID[MAX_CALL_NO_LEN];
} callerIDInfo;

/**
 *  This structure contains information for Redirecting Numbers.
 *
 *  \param  numPI
 *          - Number presentation indicator.
 *              - 0x00 - PRESENTATION_ALLOWED - Allowed presentation
 *              - 0x01 - PRESENTATION_RESTRICTED - Restricted presentation
 *              - 0x02 - PRESENTATION_NUM_UNAVAILABLE -
 *                 Unavailable presentation
 *              - 0x04 - PRESENTATION_PAYPHONE -
 *                 Payphone presentation (GSM/UMTS specific)
 *              - 0xFF - Not Available
 *
 *  \param  numSI
 *          - Number screening indicator.
 *              - 0x00 - QMI_VOICE_SI_USER_PROVIDED_NOT_SCREENED -
 *                  Provided user is not screened
 *              - 0x01 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_PASSED -
 *                  Provided user passed verification
 *              - 0x02 - QMI_VOICE_SI_USER_PROVIDED_VERIFIED_FAILED -
 *                  Provided user failed verification
 *              - 0x03 - QMI_VOICE_SI_NETWORK_PROVIDED - Provided network
 *
 *  \param  numType
 *          - Number type.
 *              - 0x00 - QMI_VOICE_NUM_TYPE_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_TYPE_INTERNATIONAL - International
 *              - 0x02 - QMI_VOICE_NUM_TYPE_NATIONAL - National
 *              - 0x03 - QMI_VOICE_NUM_TYPE_NETWORK_SPECIFIC - Network-specific
 *              - 0x04 - QMI_VOICE_NUM_TYPE_SUBSCRIBER - Subscriber
 *              - 0x05 - QMI_VOICE_NUM_TYPE_RESERVED - Reserved
 *              - 0x06 - QMI_VOICE_NUM_TYPE_ABBREVIATED - Abbreviated
 *              - 0x07 - QMI_VOICE_NUM_TYPE_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  numPlan
 *          - Number plan.
 *              - 0x00 - QMI_VOICE_NUM_PLAN_UNKNOWN - Unknown
 *              - 0x01 - QMI_VOICE_NUM_PLAN_ISDN - ISDN
 *              - 0x03 - QMI_VOICE_NUM_PLAN_DATA - Data
 *              - 0x04 - QMI_VOICE_NUM_PLAN_TELEX - Telex
 *              - 0x08 - QMI_VOICE_NUM_PLAN_NATIONAL - National
 *              - 0x09 - QMI_VOICE_NUM_PLAN_PRIVATE - Private
 *              - 0x0B - QMI_VOICE_NUM_PLAN_RESERVED_CTS -
 *                  Reserved cordless telephony system
 *              - 0x0F - QMI_VOICE_NUM_PLAN_RESERVED_EXTENSION -
 *                  Reserved extension
 *
 *  \param  reason
 *          - Redirecting reason.
 *
 *  \param  numLen
 *          - Provides the length of number which follow.
 *
 *  \param  number[MAX_CALL_NO_LEN]
 *          - number of numLen length, NULL terminated.
 *
 */
typedef struct
{
    BYTE numPI;
    BYTE numSI;
    BYTE numType;
    BYTE numPlan;
	BYTE reason;
    BYTE numLen;
    CHAR number[MAX_CALL_NO_LEN];
} redirectNumInfo;

/**
 *  This structure contains information about the line control.
 *
 *  \param  polarity
 *          - Included polarity.
 *
 *  \param  toggle
 *          - Toggle mode.
 *
 *  \param  reversePolarity
 *          - Reverse polarity.
 *
 *  \param  time
 *          - Power denial time.
 *
 */
typedef struct
{
 	BYTE polarity;
    BYTE toggle;
    BYTE reversePolarity;
    BYTE time;
} lineCtlInfo;

/**
 *  This structure contains information about the Extended Display Record.
 *
 *  \param  type
 *          - Display Type.
 *
 *  \param  extDisplayLen
 *          - Ext display info Len.
 *
 *  \param  extDisplay[MAX_DESCRIPTION_LENGTH]
 *          - Caller ID in ASCII.
 *
 */
typedef struct
{
 	BYTE type;
    BYTE extDisplayLen;
    CHAR extDisplay[MAX_DESCRIPTION_LENGTH];
} extDisplayInfo;


typedef struct
{
 	WORD recordID;
    BYTE numType;
    BYTE numPlan;
    BYTE numLen;
	BYTE number[MAX_DESCRIPTION_LENGTH];
	BYTE nameLen;
	BYTE name[MAX_DESCRIPTION_LENGTH];	
} phonebookEntry;

/**
 *  This structure contains an array of PhoneBook Entry
 *
 *  \param  numInstances
 *          - Number of phonebookEntry that follow.
 *          - If zero(0) then no further information exists.
 *
 *  \param  phonebookEntry[MAX_NO_OF_PB]
 *          - Array of phonebookEntry.
 *          - See \ref phonebookEntry for more information.
 *
 */
typedef struct
{
    BYTE      		numInstances;
    phonebookEntry 	phoneInfo[MAX_NO_OF_PB];
} arrPBInfo;

typedef struct
{
	BYTE emergencyNumberType;
	BYTE sessionTypeValid;
	BYTE sessionType;
	BYTE categoryValid;
	BYTE category;
	BYTE numLen;
	BYTE number[MAX_CALL_NO_LEN];
} emergencyNumberEntry;

/**
 *  This structure contains information about the waiting message information.
 *
 *  \param  numInstances
 *          - number of waiting message info.
 *
 *  \param  msgType[MAX_WATITINGMSG]
 *          - Type of waiting message.
 *
 *  \param  indStatus[MAX_WATITINGMSG]
 *          - indicated whether the indication is active.
 *
 *  \param  msgCount[MAX_WATITINGMSG]
 *          - number of message.
 
 */
typedef struct
{
    BYTE    numInstances;
    BYTE 	msgType[MAX_WATITINGMSG];
    BYTE 	indStatus[MAX_WATITINGMSG];
    BYTE 	msgCount[MAX_WATITINGMSG];
} waitingMsgInfo;

// Voice Call Status callback function
typedef void (GOBICALLBACK * tFNCallInfo)(
	arrCallInfo*		allCallInfo,
	arrRemotePartyNum* 	remoteNumInfo,
	arrRemotePartyName* remoteName,
	arrAlertingType* 	alertType,
	arrSvcOption*		servieOpt,
	arrCallEndReason*   callEnd,
	arrAlphaIDInfo* alphaIDInfo,
	arrPeerNumInfo*  connectedPartyInfo,
	arrDiagInfo* diagInfo,
	arrPeerNumInfo* calledPartyInfo,
	arrPeerNumInfo* redirectInfo,
	arrAlertingPattern* alertPattern);

// Voice Privacy callback function
typedef void (GOBICALLBACK * tFNPrivacyInfo)(
	BYTE* pCallID,
	BYTE* pVoicePrivacy);
	
// Voice OTASP Status callback function
typedef void (GOBICALLBACK * tFNOTASPStatus)(
	BYTE* pCallID,
	BYTE* pOtaspStatus);

typedef void (GOBICALLBACK * tFNSupsInfo)(
	BYTE* pCallID,
	BYTE* pType,
	WORD* pIndex,
	ectInfo* pECT);

typedef void (GOBICALLBACK * tFNUSSDNoWait)(
	WORD* pError,
	WORD* pFailure,
	USSInfo* pUSSD,
	alphaIDInfo* pAlpha);
	
typedef void (GOBICALLBACK * tFNAOCLowFunds)();
	
typedef void (GOBICALLBACK * tFNUSSDRelease)();	

typedef void (GOBICALLBACK * tFNUSSD)(
	BYTE* 	 pType,
	USSInfo* pUSSD);

typedef void (GOBICALLBACK * tFNUUS)(
	BYTE* 	 pCallID,
	UUSInfo* pUUS);	

typedef void (GOBICALLBACK * tFNDTMF)(
	DTMFInfo* pDTMFInfo,
	BYTE*	  pOnLength,
	BYTE* 	  pOffLength);	
	
typedef void (GOBICALLBACK * tFNSUPS)(
	BYTE* 	  pType,
	BYTE*	  pCCModified,
	BYTE* 	  pClass,
	BYTE* 	  pReason,
	CHAR* 	  pNumber,
	BYTE* 	  pTimer,
	USSInfo*  pUSS,
	BYTE* 	  pCallID,
	BYTE* 	  pAlpha,
	CHAR* 	  pPwd,
	CHAR* 	  pNewPwd,
	CHAR* 	  pNewPwdAgain,
	BYTE* 	  pDataSource,
	LONG* 	  pCause,
	getCallFWInfo* 	  pCallFwdData,
	CLIRResp* 	  	  pCLIR,
	statusResp* 	  pCLIP,
	statusResp* 	  pCOLP,
	statusResp* 	  pCOLR,
	statusResp* 	  pCNAP);	
	
typedef void (GOBICALLBACK * tFNInfoRec)(
	BYTE* 	  			pCallID,
	signalInfo*			pSignal,
	callerIDInfo* 		pCallIDInfo,
	CHAR* 	  			pDisplay,
	CHAR* 	  			plvDisplayExt,
	CHAR* 	  			pCallerName,
	BYTE*				pCallWaiting,
	peerNumInfo* 		pConnectedInfo,
	peerNumInfo* 		pCallingPartyInfo,
	peerNumInfo* 		pCalledPartyInfo,
	redirectNumInfo*	pRedirectInfo,
	BYTE* 	  			pCLIRCause,
	BYTE* 	  			pUplink,
	BYTE* 	  			pDownlink,
	BYTE* 	  			pNSS,
	lineCtlInfo* 		pLineCtlInfo,
	extDisplayInfo* 	pDisplayExtInfo);	

// PHONEBOOK
// Phonebook Record Read callback function
typedef void (GOBICALLBACK * tFNPbRecordRead)(
	BYTE sessionType,
	WORD pbType,
	arrPBInfo* phoneBookEntry );
	
// Phonebook Ready callback function
typedef void (GOBICALLBACK * tFNAllPbInitDone)(
	BYTE noOfInstance,
	BYTE* arrSessionType,
	WORD* arrPbBitMask);

//Phonebook Emergency List callback function
typedef void (GOBICALLBACK * tFNEmergencyList)(
	BYTE noOfInstance,
	emergencyNumberEntry* arrEmergencyNumberEntry);
	
// SwiOMAEx callback function	
typedef void (GOBICALLBACK * tFNSwiOmaExEvent)(
	FUMOInfo* 	  		pFUMOInfo,
	OMAInfo*			pOMAInfo);	


#ifdef __cplusplus
   };
#endif

/*=========================================================================*/
// Prototypes
/*=========================================================================*/
IMPORTGOBI ULONG GOBICMAPI	AnswerCall(
    // req params
	BYTE*		pInCallID,
	// resp params
	BYTE*		pOutCallID);

IMPORTGOBI ULONG GOBICMAPI	EndCall( 
	// req params
	BYTE*		pInCallID,
	// resp params
	BYTE*		pOutCallID
	);
IMPORTGOBI ULONG GOBICMAPI	DialCall( 
	// req params
	tDialReqParam* pDialReq,
	// resp params
	BYTE*			pCallID,
	alphaIDInfo*	pAlpha,
	BYTE*			pCCResult,
	ccSUPSType*		pServiceType
	);

IMPORTGOBI ULONG GOBICMAPI	GetConfig( 
	// req params
	BYTE*		pAutoAns,
	BYTE*		pAirTimer,
	BYTE*		pRoamTimer,
	BYTE*		pTTYMode,
	BYTE*		pPerfVoiceSO,
	BYTE*		pAMRstatus,
	BYTE*		pVoicePrivacy,
	BYTE*		pNamID,
	BYTE*		pVoiceDomainPref,
	// resp params
	BYTE*			pAutoAnsStatus,
	airTimer*		pAirTimerCount,
	roamTimer*		pRoamTimerCount,
	BYTE*			pCurTTYMode,
	prefVoiceSO*	pCurPrefVoiceSO,
	curAMRConfig*	pCurAMRConfig,
	BYTE*			pCurPrivacyPref,
	BYTE* 			pCurDomain
	);

IMPORTGOBI ULONG GOBICMAPI	SetConfig( 
	// req params
	BYTE*			pAutoAnswer,
	airTimer*		pAirTimer,
	roamTimer*		pRoamTimer,
	BYTE*			pTTYMode,
	prefVoiceSO*	pPrefVoiceSO,
	BYTE*			pPrefVoiceDomain,
	// resp params
	BYTE*		pAutoAnsStatus,
	BYTE*		pAirTimerStatus,
	BYTE*		pRoamTimerStatus,
	BYTE*		pTTYConfigStatus,
    BYTE*		pPrefVoiceSOStatus,
    BYTE*		pVoiceDomainStatus
	);
#endif //GobiVoiceMgmtAPI_H