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

📄 mminetwork.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    T_MFW_NETWORK_STRUCT  * plmn_ident;

    MMI_TRACE_EVENT(("<<<talcon,network--event:%d",event ));


    switch( event )
    {
    case NETWORK_NO_SERVICE:
    case NETWORK_LIMITED_SERVICE:

        TRACE_EVENT ("NETWORK NO/LIMITED SERVICE");
        /*
         * Set Status
         */
        /*
           glowing: modify the following statement for processing
           the NETWORK_LIMITED_SERVICE 
        */
        data->status = event;
        //data->status = NETWORK_NO_SERVICE;

        /*
         * Check if network log is enabled
         */
        if( network_log_enabled () )
        {
            SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
        }
        else
        {
            /*
              glowing: modify the following statement for processing
              the NETWORK_LIMITED_SERVICE 
             */
            //SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
            SEND_EVENT (idle_get_window(), event, 0, 0);

            if( data->network_list NEQ NULL )
            {
                switch( data->network_list_status )
                {
                case NETWORK_LIST_REGISTRATION:
                    /*
                     * Present list of available PLMNs again
                     *
                     * NOTE: if NETWORK_LIMITED_SERVICE has indicated
                     *       that THE manually selected network is now forbidden
                     *       the menu list must be updated (but don't ask me how).
                     */
                    network_stop_animation ();
                    data->network_list_status = NETWORK_LIST_DISPLAY_FIRST;

                    if( network_data.aborted != TRUE )  //xsf add if sentence 11.11
                    {
                        //listDisplayListMenu (win, data->network_list, (ListCbFunc)network_list_cb,0);
                        network_forbidden_plmn();
                        //begin of xsf add 2003.02.25
                        if( data->network_list NEQ NULL )
                        {
                            FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM));
                            FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
                            data->network_list = NULL;
                        }
                        //end of xsf add 2003.02.25
                    }
                    else
                        network_data.aborted = FALSE;
                    break;
                case NETWORK_LIST_SELECTED:
                    /*
                     * After registration start, MFW returns the current status
                     */
                    data->network_list_status= NETWORK_LIST_REGISTRATION;
                    data->keep_plmn_list = TRUE;
                    break;
                }
            }
        }
#ifdef MMI_HOMEZONE_ENABLED
        /* sh - tell homezone there is no network */
        homezoneUpdate(0,0);
#endif
        break;

    case NETWORK_SEARCH_NETWORK:
        TRACE_EVENT ("NETWORK SEARCH NETWORK");
        SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0);
        break;

    case NETWORK_FULL_SERVICE:
        TRACE_EVENT ("NETWORK FULL SERVICE");

	#ifdef MMS_WAP_ENABLED
		{	
			static BYTE first = TRUE;
			if(first)
			{
				extern void mms_pushfile_init();
				first = FALSE;
				mms_pushfile_init();
			}
		}
	#endif        

        /*
         * Set Status
         */
        data->status = NETWORK_FULL_SERVICE;

        /*
         * Copy Network Name in textual and numerical format
         *
         * NOTE: Service Provider Name is not used
         *       Operator Name from SIM needs CPHS support by MFW
         */
        plmn_ident = (T_MFW_NETWORK_STRUCT *)parameter;

#ifdef NO_ASCIIZ
        memcpy (data->plmn_name, &plmn_ident->network_long.data, 20);
#else
        memcpy (data->plmn_name, plmn_ident->network_long, 20);
#endif      
        memcpy (data->network_name, plmn_ident->network_numeric, 6);

        /*
         * If network name is not known use numeric representation as default.
         */
#ifdef NO_ASCIIZ
        if( plmn_ident->network_long.len EQ 0 )
#else       
        if( strlen ((char *)(plmn_ident->network_long)) EQ 0 )
#endif
            strcpy ((char *)data->plmn_name, (char *)data->network_name);

        /*
         * Store Roaming Indicator
         */
        data->roaming_indicator = plmn_ident->roaming_indicator;

        /*begin of zy add 03y/01m/13d*/
        if( data->roaming_indicator==1 )
            iconsSetState(iconRoam);
        else if( data->roaming_indicator==0 )
            iconsDeleteState(iconRoam);
        /*end of zy add 03y/01m/13d*/
        network_stop_animation ();
        /*
         * Inform Idle screen
         */
        SEND_EVENT (idle_get_window(), NETWORK_FULL_SERVICE, 0, 0);

        /*
         * If network list is available
         */
        if( data->network_list NEQ NULL )
        {
            switch( data->network_list_status )
            {
            case NETWORK_LIST_REGISTRATION:

                data->keep_plmn_list = FALSE;
                break;
            case NETWORK_LIST_SELECTED:
                /*
                 * After registration start, MFW returns the current status
                 */
                data->network_list_status= NETWORK_LIST_REGISTRATION;

                if( network_data.aborted != TRUE )
                    network_selected();
                else
                    network_data.aborted = FALSE;
                //xsf remarked it 2003.02.27 if(data->keep_plmn_list EQ FALSE) 
                if( data->network_list NEQ NULL )
                {
                    TRACE_EVENT("NETWORK_LIST_REGISTRATION No 1");

                    FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM));

                    FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
                    //listsDestroy(data->network_list->win);   //xsf add 2003.03.12
                    data->network_list = NULL;
                }

                break;
            }
            // API - Moved from previous position  //condat 1119
            //		network_selected(); 
        }
        break;

    case NETWORK_NO_NETWORK:
        TRACE_EVENT ("NETWORK NO NETWORK");

        //SetSignalPicNumberZero();		//xzy add for no network update signal pic number
        /*
         * No PLMN found after search for available PLMNs
         */
        network_stop_animation ();
        if( network_log_enabled () )
        {
            data->status = NETWORK_NO_SERVICE;
            SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
        }
        else
        {
            /*
             * No Networks found.
             */
            data->status = NETWORK_NO_SERVICE;
            SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
        }
#ifdef MMI_HOMEZONE_ENABLED
        /* sh - tell homezone there is no network */
        homezoneUpdate(0,0);
#endif
        break;

    case NETWORK_PLMN_LIST:
        TRACE_EVENT ("NETWORK PLMN LIST");
        TRACE_EVENT (">>NETWORK PLMN LIST");
        /*
         * PLMN list found
         */
        if( network_data.aborted != TRUE )
        {
            if( network_log_enabled () )
            {
                data->status = NETWORK_NO_SERVICE;
                SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
            }
            else
            {
                T_MFW_PLMN_LIST * plmn_list;
                /*...................... Networks founds................*/   
                data->status = NETWORK_NO_SERVICE;
                /*...... If network list is available, destroy...... */ 
                if( data->network_list NEQ NULL )
                {

                    FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM));  //xsf replace MAX_PLMN_ID with , data->network_list->ListLength 
                    FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
                    data->network_list = NULL;
                }
                /*
                 * If list is empty, show info screen
                 */
                plmn_list = (T_MFW_PLMN_LIST *)parameter;
                if( plmn_list->count EQ 0 )
                {
                    network_stop_animation ();
                    network_no_plmns ();
                }
                else
                {
                    /*
                     * Create and present list of available PLMNs
                     *
                     */
                    data->network_list = network_create_list (data, parameter);
                    data->network_list_status = NETWORK_LIST_DISPLAY_FIRST;
                    network_stop_animation ();
                    listDisplayListMenu (win, data->network_list,  (ListCbFunc)network_list_cb,0);
                    //xsf remarked 2002.10.31 SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
                }
            }
        }
        else
        {
            network_data.aborted = FALSE;
        }
#ifdef MMI_HOMEZONE_ENABLED
        /* sh - tell homezone there is no network */
        homezoneUpdate(0,0);
#endif
        break;

    case NETWORK_LIST_SELECT_PLMN:
        TRACE_EVENT ("NETWORK LIST_SELECT");
        //TRACE_EVENT (">> NETWORK LIST_SELECT");
        /*
         * A network has been selected from the PLMN available list
         * Start manual registration and start Search animation.
         */
        network_start_animation_plmn_selection (value);
        data->network_list_status = NETWORK_LIST_SELECTED;
        nm_select_plmn ((U8 *)network_data.network_search_name[value]);
        break;
    case NETWORK_PPLMN_MEM_LIST:
        {
            T_MFW_PPLMN_MEM *pplmn_mem;
            UBYTE i;

            TRACE_EVENT ("NETWORK PPLMN MEM LIST");

            TRACE_EVENT (">> NETWORK PPLMN MEM LIST");
            /*  Save the number of PLMN records:
             *  maxRcd  = maximum preferred PLMN records on the SIM card
             *  usedRcd = used preferred PLMN records on the SIM card
             */
            pplmn_mem = (T_MFW_PPLMN_MEM *)parameter; 

            network_data.pplmn_mem.maxRcd  = pplmn_mem->maxRcd;
            network_data.pplmn_mem.usedRcd = pplmn_mem->usedRcd;

            /*
             * Request preferred PLMN list from the SIM
             */


            network_data.pplmn = (T_MFW_NETWORK_STRUCT *)ALLOC_MEMORY ((pplmn_mem->maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));

            if( network_data.pplmn EQ 0 )
            {
                return;
            }

            if( pplmn_mem->usedRcd > 0 )
            {
                // request MFW to fill up the pref. PLMN list
                nm_pref_plmn_list(network_data.pplmn, pplmn_mem->maxRcd, 1);
            }
            else
            {
                // doesnt make sense to request the MFW to fill up the list
                // when the "pplmn_mem->usedRcd" is  0

                for( i=0; i < (network_data.pplmn_mem.maxRcd); i++ )
                {
#ifdef NO_ASCIIZ
                    network_data.pplmn[i].network_long.len = 0;
                    network_data.pplmn[i].network_short.len = 0;
#else			 	
                    memset(network_data.pplmn[i].network_long,   '\0', LONG_NAME);
                    memset(network_data.pplmn[i].network_short,   '\0', SHORT_NAME);
#endif
                    memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH);
                }

                data->network_list = network_create_pref_list (data);
                listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
            }

        }
        break;

    case NETWORK_PREFERRED_LIST:
        {         

            UBYTE i;


            // TRACE_EVENT ("NETWORK PREFERRED LIST");
            TRACE_EVENT (">>NETWORK PREFERRED LIST");
            /*
             *  Create and present the preferred list of PLMNs
             * 
             */

            //nm      network_stop_animation ();


            data->network_list = network_create_pref_list (data);
            listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
        }   
        break;

    case NETWORK_CELL_SELECT:
        {
            /* If Homezone is active, inform it of the new cell data */
            T_MFW_CELL_STRUCT *cell_data;

            TRACE_EVENT(">>NETWORK CELL SELECT");

            cell_data = (T_MFW_CELL_STRUCT *)parameter;

#ifdef MMI_HOMEZONE_ENABLED
            /* SPR759 - SH - send cell reselection info to homezone */
            homezoneUpdate(cell_data->lid, cell_data->ci);
#endif
        }
    }
}

/*

/*******************************************************************************

 $Function:    	network_win_cb

 $Description:	network top window

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    /*
     * Top Window has no output
     */
    return 1;
}


/*******************************************************************************

 $Function:    	network_nm_cb

 $Description:	network handler (mfw callback handler)

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para)
{
    TRACE_FUNCTION("network_nm_cb");

    switch( event )
    {
    case E_NM_FULL_SERVICE:
        g_nmService = NM_FULL_SERVICE;
        SEND_EVENT (network_data.network_win, NETWORK_FULL_SERVICE, 0, para);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -