⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callctrl.h

📁 手机RILGSM实现的源代码
💻 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 + -