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

📄 rilmain.cpp

📁 手机RILGSM实现的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    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 + -