📄 rilmain.cpp
字号:
if (!g_hDriverPresentEvent)
{
goto Error;
}
g_hNewDialOrHangupEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!g_hNewDialOrHangupEvent)
{
goto Error;
}
//xiangming add for setting the initialization of the reg
if (!SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\Data Service\\ConnInfo"), TEXT("NetworkStatus"),0))
{
RETAILMSG(1, (TEXT("[TI][RLO_Init]SetNetworkStatus fail \r\n")));
}
if (!SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\Data Service\\ConnInfo"), TEXT("CardAbilityID"),0))
{
RETAILMSG(1, (TEXT("[TI][RLO_Init]SetCardAbilityID fail \r\n")));
}
//xiangming add end
#ifndef SCI_OLD
//Get the the sci mode from registry
//The other parts for sci will rely on this registry
DWORD dwSciMode = -1;
if( !GetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\CardCom"), TEXT("SelNetMode"), &dwSciMode) )
{
#ifdef PPC_CYNTHIA850
dwSciMode = SELCARD_DEFAULT;
#else
dwSciMode = SELCARD_BY_USER;
#endif
RETAILMSG(1,(TEXT("[DF]GetRegistryCI-get SCIMode from reg fail \r\n")));
}
else
{
RETAILMSG(1,(TEXT("[DF]SCIMode-=%d \r\n"), dwSciMode));
}
if (SELCARD_BY_USER == dwSciMode)
{
g_bSciNoMenuVersion = FALSE;
}
else
{
g_bSciNoMenuVersion = TRUE;
}
if( g_bSciNoMenuVersion )
{
//Set the ms last equipment state
if( !SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\RIL"),
TEXT("LastEquipmentState"), 2))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]SetMSCardState fail \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card2"), TEXT("CardOnoff"), 1))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card2 equipmentstate state= 0x01 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card1"), TEXT("CardOnoff"), 1))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card1 equipmentstate state= 0x01 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card2"), TEXT("CardPin"), 3))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card2 PIN state= 0x03 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card1"), TEXT("CardPin"), 3))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card1 PIN state= 0x03 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\CardCom"), TEXT("Card1SimReady"), 0x00))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card1SimReady OK state= 0x00 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\CardCom"), TEXT("Card2SimReady"), 0x00))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set Card1SimReady OK state= 0x00 \r\n")));
}
if( SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\CardCom"), TEXT("CardPrimary"), 0x01))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]Set CardPrimary OK primary card= 0x01 \r\n")));
}
//Clear reg for inite
if( !SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card1"), TEXT("NetOperatorName"), DWORD(0)) )
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]ClearNetOperatorName clear card1 NetOperatorName failed!\r\n")));
}
if( !SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\Card1"), TEXT("NetOperatorName"), DWORD(0)) )
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]ClearNetOperatorName clear card1 NetOperatorName failed!\r\n")));
}
if(SetRegistryDWORD(HKEY_LOCAL_MACHINE, TEXT("System\\CardInfo\\CardCom"), TEXT("SetPrimaryCard"),DWORD(0)))
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]SET SetPrimaryCard=0 SUCCEED!\r\n")));
}
else
{
RETAILMSG(1, (TEXT("[TI][SCI_NEW]SET SetPrimaryCard=0 FAILED!\r\n")));
}
}
#endif
//add by fengguisen for Simultaneous voice and data call
//init the share memory for call flag
if(!RILDrv_CC_Init())
{
RETAILMSG(1, (TEXT("[TI]RIL: CC Init Failed!\r\n")));
goto Error;
}
//end add by fengguisen
#ifdef OEM2_DRIVER
g_hCPINNEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!g_hCPINNEvent)
{
goto Error;
}
#endif
#ifdef RIL_WATSON_REPORT
// Initialize the info cache used for watson reporting
memset(&(g_RilInfoCache), 0, sizeof(g_RilInfoCache));
// Initialize flag used to prevent multiple Watson reporting of the same problem
g_fWatsonCalled = FALSE;
// Initialize the AT Cmd log
g_RilATCmdLogBuffer.Init(RILATCMDLOGSIZE);
#endif // RIL_WATSON_REPORT
// Initialize the default Terminal profile settings.
g_RilSTKTerminalProfile.InitializeDefault();
g_hSTKInitTI = CreateEvent(NULL, TRUE, FALSE, STKINIT_TI);
if (!g_hSTKInitTI)
{
goto Error;
}
// Allocate a device handle
pDevice = new CRilHandle;
if (!pDevice || !pDevice->StartInit())
{
goto Error;
}
dwRet = DRIVERCOOKIE_FROM_RILHANDLE(pDevice);
#ifdef OEM1_DRIVER_PM
//
// PM processing
//
hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)RIL_PmProc, NULL, 0, NULL);
if (hThread == NULL)
{
RETAILMSG(1, (TEXT("[TI]RIL: Error PM CreateThread() !\r\n")));
}
// no need to keep track of it
CloseHandle(hThread);
#endif // OEM1_DRIVER_PM
//added by wuguangliang 2006/04/10
//setup an asynchronize event
g_hGetRegistrationEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
if (NULL == g_hGetRegistrationEvent)
{
RETAILMSG(1,(TEXT("[TI]RIL: Error creating Event = 0x%08x\n"),GetLastError()));
}
#ifdef OEM1_DRIVER
// Open Wave driver
g_hWavDev = CreateFile(TEXT("WAV1:"),
GENERIC_READ | GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
0, NULL);
if (g_hWavDev == INVALID_HANDLE_VALUE)
{
TBD_OUTPUT(TBDCT_INFO, TBDOL_ERROR, TEXT("RLO_Init : failed to open WavDev driver"));
goto Error;
}
#endif
DWORD dwEONSEnabled = 0;
#ifdef RIL_ENABLE_EONS
{
/* read EONS cache */
HRESULT hr = g_eonscache.Read();
if ( FAILED( hr ) )
{
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : error reading EONS cache -- result [0x%08x]\r\n"), hr));
goto Error;
}
g_eonscache.Dump();
/* mark as enabled */
dwEONSEnabled = 1;
}
#endif
/* indicate if EONS is enabled */
{
DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : RLO_Init : EONS [%d]\r\n"), (int)dwEONSEnabled));
HKEY hkey = NULL;
LONG l = RegOpenKeyEx( RIL_REGISTRY_ROOT, RIL_SECURE_REGISTRY_KEY, 0, 0, &hkey );
if ( l == ERROR_SUCCESS )
{
DWORD dwSize = sizeof(dwEONSEnabled);
l = RegSetValueEx( hkey, RIL_REGISTRY_VALUE_EONSENABLED, 0, REG_DWORD, (LPBYTE)&dwEONSEnabled, dwSize );
}
if ( hkey != NULL )
{
RegCloseKey( hkey );
}
hkey = NULL;
if ( l != ERROR_SUCCESS )
{
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : error writing to RIL secure registry location -- result [0x%08x]\r\n"), HRESULT_FROM_WIN32(l)));
goto Error;
}
}
//load calltype determination library
TCHAR tszCalltypeDll[MAXLENGTH_CALLTYPEKEY];
TCHAR tszCalltypeFunction[MAXLENGTH_CALLTYPEKEY];
if (!GetRegistrySZ(HKEY_LOCAL_MACHINE, g_tszRegKeyRemoteCalltype, TEXT("CalltypeDLL"), tszCalltypeDll, MAXLENGTH_CALLTYPEKEY))
{
DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : RLO_Init : No Calltype reg key.\r\n")));
}
else
{
HINSTANCE hCalltypeLib = LoadLibrary(tszCalltypeDll);
if (!hCalltypeLib)
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : Calltype Lib not loaded, err = 0x%08x.\r\n"),GetLastError()));
else
{
if (!GetRegistrySZ(HKEY_LOCAL_MACHINE, g_tszRegKeyRemoteCalltype, TEXT("CalltypeFunction"), tszCalltypeFunction, MAXLENGTH_CALLTYPEKEY))
{
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : No CalltypeFunction in reg key.\r\n")));
FreeLibrary(hCalltypeLib);
}
else
{
RILCALLTYPECALLBACK rctcb = (RILCALLTYPECALLBACK)GetProcAddress(hCalltypeLib,tszCalltypeFunction);
if (!rctcb)
{
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : Calltype Lib GetProcAddress failed, err = 0x%08x.\r\n"),GetLastError()));
FreeLibrary(hCalltypeLib);
}
else
{
g_rfExternalCalltypeDetermination = TRUE;
g_rlpfExternalCalltypeFunction = rctcb;
g_hCalltypeLib = hCalltypeLib;
InitializeCriticalSection(&g_csDialedCallData);
InitializeCriticalSection(&g_csRingingCallData);
DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : RLO_Init : Calltype Callback registered, dll = %s, function = %s.\r\n"),tszCalltypeDll,tszCalltypeFunction));
}
}
}
}
// InitializeCriticalSection(&g_csIncomingcallBlock);
InitializeCriticalSection(&g_csManualSearchNetwork);
// Initialize global structures
memset(&g_rcdRingingCallData, 0, sizeof(g_rcdRingingCallData));
g_rcdRingingCallData.dwCallId = RIL_MAX_TRACKED_CALL_ID;
memset(&g_rcdDialedCallData, 0, sizeof(g_rcdDialedCallData));
memset(&g_rcdWaitingCallData, 0, sizeof(g_rcdWaitingCallData));
memset(&g_rgfCallStates, 0, sizeof(g_rgfCallStates));
DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : t : RLO_Init : Started successfully\r\n")));
// Driver has started successfully, so set
// the event that says RIL driver is up.
SetEvent(g_hDriverPresentEvent);
g_RilLog.LogEvent(RILLOG_ZONE_PRESENCE, RILLOG_EVENT_RADIOPRESENT);
Error:
if (!dwRet)
{
DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : RLO_Init : RIL failed to initialize\r\n")));
RETAILMSG(1, (TEXT("[TI]RILDrv : E : RLO_Init : RIL failed to initialize\r\n")));
g_RilLog.LogEvent(RILLOG_ZONE_ERROR, RILLOG_EVENT_DRVINITFAILED);
delete pDevice;
if (g_hDriverPresentEvent)
{
(void)CloseHandle(g_hDriverPresentEvent);
g_hDriverPresentEvent = NULL;
}
#ifdef OEM2_DRIVER
if (g_hCPINNEvent)
{
(void)CloseHandle(g_hCPINNEvent);
g_hCPINNEvent = NULL;
}
#endif // OEM2_DRIVER
#ifdef RIL_RADIO_RESILIENCE
DeleteCriticalSection(&g_csReboot);
#else
if (g_hCriticalErrorEvent)
{
(void)CloseHandle(g_hCriticalErrorEvent);
g_hCriticalErrorEvent = NULL;
}
#endif // ! RIL_RADIO_RESILIENCE
DeleteCriticalSection(&g_csClosing);
#ifdef RIL_WATSON_REPORT
DeleteCriticalSection(&g_csRilInfoCache);
#endif // RIL_WATSON_REPORT
#if defined(OEM1_GPRS_DEACT)
DeleteCriticalSection(&g_csGPRSDeactLock);
#endif // OEM1_GPRS_DEACT
DeleteCriticalSection(&g_csDeactCringLock);
}
return dwRet;
}
//
// Driver de-initialization
//
BOOL RLO_Deinit(DWORD dwData)
{
FUNCTION_TRACE(RLO_Deinit);
DEBUGCHK(dwData != 0);
CRilHandle* pDevice = RILHANDLE_FROM_DRIVERCOOKIE(dwData);
BOOL fRet = FALSE;
//extern void FreeInComingCallNAndToneSrvLibrary();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -