📄 callctrl.h
字号:
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
callctrl.h
Abstract:
Notes:
--*/
//----------------------------------------------------------------------------------------------------------------------------------------------------------
// Date Author Activity ID Activity Headline
// 2007-05-22 fengguisen CEDB200055583 add new code for cc of Cynthia850
// 2007-10-22 Cuiguoqing WM600020011 write some codes for modify ring tone on cynthia850_ver2.04.
// 2007-11-13 sunrenhong WM600022706 add the interface for reject call history
// 2007-11-21 zhongchuren WM600023517 Fix the issue with power On/Off
// 2007-11-26 qinxuetao WM600024004 Fix the deadlock issue while updating +CLCC times
// 2007-11-30 sunrenhong WM600024521 give BT interface
// 2007-12-26 Cuiguoqing WM600027248 Synchronize Gallic some codes for CallSettings ring sound and script issue.
// 2007-12-28 Cuiguoqing WM600027051 Modify some codes to solve the issue that user can't adjust ring level after vibrate type call in ver2.16.
//----------------------------------------------------------------------------------------------------------------------------------------------------------
#pragma once
#include "rilproxyext_ioctl.h"
#define CALLCTRL_CMDBUF_LENGTH (MAX_PATH + MAXLENGTH_ADDRESS + MAXLENGTH_SUBADDR)
#define CALLCTRL_ALLOC_NUMBER 16
#define MAX_SOUNDTONESTRING_SIZE 256
//BT need
#define WODM_PARAM_CLOSE_A2DP 0
#define WODM_PARAM_OPEN_A2DP 1
#define WODM_OPEN_CLOSE_A2DP 517
#define BTSF_A2DP_CONNECTED 4
//
// Structure used for keeping track of address and calltype of a dialed call.
// Used only when using external calltype determination.
// This global spans the command and notification threads, and must be
// protected using CRITICAL_SECTION g_csDialedCallData.
//
struct DIALEDCALLDATA
{
BOOL fValid;
DWORD dwCalltype;
WCHAR wszAddress [MAXLENGTH_ADDRESS];
};
//
// Structure used for keeping track of the ID and calltype of a ringing call,
// along with flags controlling the sending of ring notifications.
// Used only when using external calltype determination.
// This global spans the command and notification threads, and must be
// protected using CRITICAL_SECTION g_csRingingCallData.
//
struct RINGINGCALLDATA
{
BOOL fCalltypeValid;
DWORD dwCalltype;
BOOL fCallIdValid;
DWORD dwCallId;
BOOL fDelayRingNotification;
BOOL fForceRingNotification;
};
//
// Structure used for keeping track of address and calltype of a waiting call
// Used only when using external calltype determination.
// This global is currently only used in the command thread. If access is
// changed to span multiple threads, it must be protected using a
// CRITICAL_SECTION.
//
struct WAITINGCALLDATA
{
BOOL fValid;
DWORD dwCalltype;
WCHAR wszAddress [MAXLENGTH_ADDRESS];
};
HRESULT RILDrv_Dial(DWORD dwParam, LPCSTR szAddress, DWORD dwType, DWORD dwOptions);
HRESULT RILDrv_Answer(DWORD dwParam);
HRESULT RILDrv_Hangup(DWORD dwParam);
HRESULT RILDrv_SendDTMF(DWORD dwParam, LPCSTR lpszChars, DWORD dwDuration);
HRESULT RILDrv_GetCallList(DWORD dwParam);
HRESULT RILDrv_GetSpecialCallList(DWORD dwParam);
HRESULT RILDrv_ManageCalls(DWORD dwParam, DWORD dwCommand, DWORD dwID);
HRESULT RILDrv_TransferCall(DWORD dwParam, const RILADDRESS* lpAddress, const RILSUBADDRESS* lpSubAddress);
HRESULT RILDrv_GetLineStatus(DWORD dwParam);
HRESULT RILDrv_GetCurrentAddressId(DWORD dwParam);
HRESULT RILDrv_SetCurrentAddressId(DWORD dwParam, DWORD dwAddressId);
HRESULT RILDrv_SendFlash(DWORD dwParam, RILADDRESS raRilAddress);
//
//Is used to check in a call progress or not
BOOL ISInCALLProgress();
//
//Ative call if all in hold state
void ActiveIFALLHOLD();
//
//Get incoming caller id if call connect are exist, else return -1
DWORD GetReleaseIncomingCallID();
//add by fengguisen for Simultaneous voice and data call
#define CALLCTRL_MAX_CLCC_BUFFER_LENGTH (sizeof(RILCALLINFO) * 6)
//share memory struct for dual-card
typedef struct
{
UINT8 nRILDriver1CallFlag; //RILDriver 1 CALL FLAG, TI
UINT8 nRILDriver1CallStatus; //RILDriver 1 CALL Status, TI
UINT8 nRILDriver2CallFlag; //RILDriver 2 CALL FLAG,dragonfly
UINT8 nRILDriver2CallStatus; //RILDriver 2 CALL Status, dragonfly
UINT16 nCallIDBitMap; //Call ID Map
BOOL bCLCCCombineFlag; //if need to combine the clcc of driver 1 and driver 2
BOOL bCLCCBufOK; //if the driver 2 had writen the parsed clcc info to clcc buffer of share memory
UINT16 nCLCCBufLength; //CLCC Buffer Length
} CALLCTRL_SHARE_MEMORY_OPTION,*LPCALLCTRL_SHARE_MEMORY_OPTION;
//share memory struct for dual-card
typedef struct
{
CALLCTRL_SHARE_MEMORY_OPTION stSM_Option;
BYTE szCLCCBuf[CALLCTRL_MAX_CLCC_BUFFER_LENGTH];//Driver2 clcc buffer
} CALLCTRL_SHARE_MEMORY,*LPCALLCTRL_SHARE_MEMORY;
//define call id array for clcc
typedef struct
{
BOOL bUsed; // 1 :used 0:unused
BOOL bCallExistFlag; //Call exist flag for clcc query
UINT8 nCallIDInDriver ; //Call ID in RILDriver 1
UINT8 nCallIDInTotal; //Call ID in Total Drivers
DWORD dwCallStatus; //Call Status
UINT8 nCallType ; //Call Type
BOOL bConference ; //if the call is joined in a Conference
BOOL bDial;
UINT8 Reserve[1] ; //
} CALLCTRL_CID,*LPCALLCTRL_CID;
//define cc option for ChangePhoneCallStatus
typedef struct
{
BOOL bAddCall; // 0:delete call flag 1:add call flag
UINT8 nCallType; //type of the call ,see ENUM_DMDC_CALL_TYPE
BOOL bReleaseTotalCID; //if need to release the Total call ID
UINT8 nTotalCID; //total call id
BOOL bArranageCID; //if need to arrange new call id
UINT8 nLocalCID; //call id in driver
BOOL bVoice2ndTo1st; // change 2nd voice call to 1st voice call flag
//add by fengguisen for new CHINA MOBILE specification
BOOL bVoice1stToFakeHangUp; // change 2nd voice call to 1st voice call flag
BOOL bDial ;//Dial outgoing flag
}CC_OPTION;
#define CALLCTRL_MAX_CID 7
#define RIL_CALLTYPE_GPRS 10
//define the call flag bit in nRILDriver1CallFlag of share memory
typedef enum
{
CALL_FLAG_UNKNOWN, //UNKNOWN
CALL_FLAG_CSD , //bit 1 : CSD CALL FLAG
CALL_FLAG_GPRS, //bit 2:GPRS CALL FLAG
CALL_FLAG_VOICE_FIRST , //bit 3: first VOICE CALL flag
CALL_FLAG_ANSWER_SECOND, //bit 4: second call answering flag
CALL_FLAG_GETCALLLIST, //bit 5:get call list when answer the second voice call
//add by fengguisen for new CHINA MOBILE specification
CALL_FLAG_FAKEHANGUP, //bit 6:fake hang up when answer the second voice call
CALL_FLAG_MAX
} ENUM_DMDC_CALL_FLAG;
//define the call type for nCallType in CALLCTRL_CID_MAP
typedef enum
{
CALL_TYPE_UNKNOWN, //UNKNOWN
CALL_TYPE_CSD , //CSD CALL
CALL_TYPE_GPRS, //GPRS
CALL_TYPE_VOICE_FIRST , //first line voice call
CALL_TYPE_VOICE_SECOND, //second line voice call
//add by fengguisen for new CHINA MOBILE specification
CALL_TYPE_VOICE_FAKEHANGUP, //FakeHangUp state voice call
CALL_TYPE_VOICE_STATUS_CHANGE,
CALL_TYPE_DATA_STATUS_CHANGE,
CALL_TYPE_MAX
} ENUM_DMDC_CALL_TYPE;
//add by fengguisen for HOLD&ACTIVE
//define the Total Call Status for nCallStatusInDriver in CALLCTRL_CID_MAP
typedef enum
{
CALL_STATUS_UNKNOWN, //UNKNOWN
CALL_STATUS_VOICE_1ST_INCOMING , //first incoming call
CALL_STATUS_VOICE_2ND_INCOMING , //second incoming call
CALL_STATUS_VOICE_ACTIVE , //voice active status
CALL_STATUS_VOICE_HOLD , //voice hold status
CALL_STATUS_VOICE_DIALING , //voice dialing status
CALL_STATUS_DATA_ACTIVE , //data active status
CALL_STATUS_DATA_DIALING , //data dialing status
CALL_STATUS_MAX
} ENUM_DMDC_CALL_STATUS_IN_DRIVER;
//xiangming add for the G/E icon function at 070718
typedef enum
{
GPRS_SYSTEMTYPE_FLAG_EDGE = 1,
GPRS_SYSTEMTYPE_FLAG_GPRS,
GPRS_SYSTEMTYPE_FLAG_GSM
}GPRS_REGISTER_STATUS;
//xiangming add for the G/E icon function at 070718 end
void SetSpecIncomingCallFlag(BOOL flag);
BOOL GetSpecIncomingCallFlag(void);
HRESULT RILDrv_ResumeFilterFlag(DWORD dwParam);
BOOL GetSystemIDLEFlag();
void SetSystemIDLEFlag(BOOL bFlag);
//new modify functions
BOOL ChangePhoneCallStatus(CC_OPTION stOption ,BOOL& bOutSpecHangUp) ;
//new add functions
#if 0
void Set2ndCallDisconnectFlag(BOOL bFlag);
BOOL Get2ndCallDisconnectFlag(void);
#endif
BOOL GetIncomingRINGFlag();
void SetIncomingRINGFlag(BOOL bFlag);
BOOL GetSpecShouldAnswerFlag();
void SetSpecShouldAnswerFlag(BOOL bFlag);
BOOL RILDrv_CC_Init();
BOOL RILDrv_CC_InitCLCCBuf();
BOOL RILDrv_CC_GetShareMemOpt(CALLCTRL_SHARE_MEMORY_OPTION &ShareMemOpt);
BOOL RILDrv_CC_GetShareMemory(CALLCTRL_SHARE_MEMORY &ShareMemory);
BOOL RILDrv_CC_IsCallExist(UINT8 nTotalCallFlag,UINT8 nFindFlag);
BOOL RILDrv_CC_SetCallFlag(UINT8 &nTotalCallFlag,UINT8 nSetFlag,BOOL bYES);
BOOL RILDrv_CC_ArrangeCallID(UINT8 nCIDInDriver,UINT8 nInCallType,UINT16 & nCallBitMap);
BOOL RILDrv_CC_GetFreeTotalCallID(UINT8 &nOutCallIDInTotal);
BOOL RILDrv_CC_ReleaseCallID(UINT8 nCallIDInDriver);
BOOL RILDrv_CC_GetCallTypeFromID(UINT8 nInCallIDInDriver,UINT8 &nOutCallType,UINT8 &nOutCallIDInTotal);
BOOL RILDrv_CC_GetCallIDFromType(UINT8 nInCallType,UINT8 &nOutCallIDInDriver);
BOOL RILDrv_CC_CIDTotalToLocal(UINT8 nInCallIDInTotal, UINT8 &nOutCallIDInDriver);
BOOL RILDrv_CC_CIDLocalToTotal(UINT8 nInCallIDInDriver,UINT8 &nOutCallIDInTotal);
BOOL RILDrv_CC_HandleCLCCRsp(BOOL& bSendSpechangup);
VOID RILDrv_CC_PrepareForParseCLCC();
VOID RILDrv_CC_DeleteCallIDByType(UINT8 nInCallType);
UINT8 RILDrv_CC_GetCallAmountByType(UINT8 nInCallType);
BOOL RILDrv_CC_SetAnswer2ndFlag(BOOL bFlag);
BOOL RILDrv_CC_ArrangeCIDForOutgoingCall(UINT8 nCIDInDriver,UINT8 nInCallType);
HRESULT RILDrv_SetEnterIDLEFlag(DWORD dwParam);
BOOL RILDrv_CC_SetGetCallListFlag(BOOL bFlag);
UINT GetCLCCTimes();
UINT UpdateCLCCTimes(BOOL bFlag);
BOOL RILDrv_SetCallNetwork(DWORD VNet);
BOOL RILDrv_CCRestoreAfterReboot();
//add by fengguisen for new CHINA MOBILE specification
HRESULT RILDrv_FakeHangUp(DWORD dwParam);
BOOL RILDrv_CC_SetFakeHangUpFlag(BOOL bFlag);
BOOL GetFakeHangUpFlagInLocal();
void SetFakeHangUpFlagInLocal(BOOL bFlag);
BOOL RILDrv_CC_GetCallStatusFromID(UINT8 nInCallIDInDriver,DWORD &dwOutCallStatus);
BOOL RILDrv_CC_GenerateCLCCRspString(char * pszOutCLCC);
//BOOL GetSpecFakeDisconnectFlag();
//void SetSpecFakeDisconnectFlag(BOOL bFlag);
HRESULT RILDrv_SetTo2ndCall(DWORD dwParam);
BOOL RILDrv_CC_IsHoldAndActive();
UINT8 RILDrv_CC_GetCPASStatus();
UINT8 RILDrv_CC_GetCallAmountByStatus(UINT8 nInCallStatus);
BOOL RILDrv_CC_UpdateCallStatusInDriver(UINT8 nCIDInDriver,UINT8 nCallStatus,BOOL bYES,BOOL bConference);
BOOL RILDrv_CC_IsInConference();
BOOL RILDrv_CC_GetCallIDFromStatus(UINT8 nInCallStatus,UINT8 &nOutCallIDInDriver);
BOOL RILDrv_CC_IsCallStatusExist(UINT8 nTotalCallStatus,INT8 nFindStatus);
BOOL RILDrv_CC_SetCallStatusInDriver(UINT8 &nTotalCallStatus,UINT8 nCallStatus,BOOL bYES);
BOOL RILDrv_CC_CombineCLCC(void*& pBlob, UINT& cbBlob);
void SetNotifyCLCC2MSFlag(BOOL bFlag);
BOOL GetNotifyCLCC2MSFlag();
BOOL RILDrv_CC_GetCIDFromDirAndType(BOOL bOutgoing,UINT8 nCallType,UINT8 &nCIDInDriver);
HRESULT RILDrv_GetCallStatus(DWORD dwParam,PH_CC_CallStatus* pstCallStatus);
HRESULT RILDrv_AnswerThe2ndCallOnly(DWORD dwParam);
HRESULT RILDrv_CC_ParseCLCCForDriver(LPCSTR szRsp, void*& pBlob, UINT& cbBlob);
BOOL RILDrv_CC_GetDialingCallID(UINT8 nInCallType,UINT8 &nOutCallIDInDriver);
HRESULT RILDrv_HangUpDialingCall(DWORD dwParam);
HRESULT RILDrv_HanugUpSecondIncomingCall(DWORD dwParam);
//BOOL GetHangUpDialingCallFlag();
//void SetHangUpDialingCallFlag(BOOL bFlag);
//end add
//xiangming add for the G/E icon function at 070718
BOOL RILDrv_Network_SetFlag(UINT8 &nTotalCallFlag, UINT8 nNetworkFlag);
UINT8 RILDrv_Network_GetFlag(UINT8 nTotalCallFlag);
//xiangming add for the G/E icon function at 070718 end
BOOL RILDrv_CC_WhetherRejectCall();
BOOL RILDrv_CC_WhetherExistLocalId( UINT v_LocalID);
void RILDrv_CC_SetTempCallIdBuffer(RILREMOTEPARTYINFO vTemp);
void RILDrv_CC_GetTempCallIdBuffer(RILREMOTEPARTYINFO & vTemp);
void RILDrv_CC_TurnOffAudioWetherOrNot(void);
void RIL_CC_RELEASE_STATUS();
HRESULT ParseCHLDResulut(LPCSTR szRsp, void*& pBlob, UINT& cbBlob);
LRESULT RILDrv_ModifyUserScriptFlag(BOOL bModify);
LRESULT RILDrv_ModifyUserSoundFlag(BOOL bModify);
BOOL RILDrv_ClearTone(void);
BOOL RILDrv_RestoreTone(void);
BOOL RILDrv_GetAndSetTone(void);
HRESULT RILDrv_GetALLCallStatus(DWORD dwParam,PH_CC_ALLCallStatus* pstCallStatus);
void RILDrv_CC_SetSecondCallIncoming(BOOL bYes);
void RILDrv_CC_CreatRejectCallList(const LPCTSTR szPhoneNumber);
HRESULT RILDrv_CC_DialCondition(DWORD dwType);
HRESULT RILDrv_HangUpAllCall(DWORD dwParam);
void RILDrv_CC_OpenOrCloseBTState(BOOL bflag);
HRESULT RILDrv_GetSecondIncomingCallStatus(DWORD dwParam,BYTE* pByteNetwork);
void RILDrv_CC_SetCsdFlag(DWORD v_net);
void RILDrv_CC_ReleaseCallMapAndSharedMemory(UINT8 nCIDArrayIndex);
void RILDrv_CC_CheckDialCallFlag(BOOL &bSendSpecHangup,DWORD cbBlob);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -