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

📄 mminetwork.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        {
          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;
              listDisplayListMenu (win, data->network_list, (ListCbFunc)network_list_cb,0);
              network_forbidden_plmn();
              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");
      /*
       * 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, SIZE_PLMN_NAME);
#else
      memcpy (data->plmn_name, plmn_ident->network_long, SIZE_PLMN_NAME);
#endif      
      memcpy (data->network_name, plmn_ident->network_numeric, SIZE_NETWORK_NAME);

      /*
       * 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;

      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:
            if(data->keep_plmn_list EQ FALSE)
            {
	            TRACE_EVENT("NETWORK_LIST_REGISTRATION No 1");

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

                FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
                data->network_list = NULL;
            }
            data->keep_plmn_list = FALSE;
            break;
          case NETWORK_LIST_SELECTED:
            /*
             * After registration start, MFW returns the current status
             */
            TRACE_EVENT("NETWORK_LIST_REGISTRATION");
            data->network_list_status= NETWORK_LIST_REGISTRATION;
			/* Commented out and moved
       		network_selected(); */
            break;
        }
        // API - Moved from previous position
		network_selected(); 
      }
      break;

    case NETWORK_NO_NETWORK:
      TRACE_EVENT ("NETWORK NO NETWORK");
      /*
       * 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, MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM));
			  
			  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);
			  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");
      /*
       *  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
	break;

  }
  }
}

/*

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

 $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:
      SEND_EVENT (network_data.network_win, NETWORK_FULL_SERVICE, 0, para);
      break;

    case E_NM_LIMITED_SERVICE:
      SEND_EVENT (network_data.network_win, NETWORK_LIMITED_SERVICE, 0, para);
      break;

    case E_NM_NO_SERVICE:
      SEND_EVENT (network_data.network_win, NETWORK_NO_SERVICE, 0, para);
   	  break;

    case E_NM_SEARCH_NETWORK:
	  SEND_EVENT (network_data.network_win, NETWORK_SEARCH_NETWORK, 0, para);
   	  break;

    case E_NM_NO_NETWORK:
	  SEND_EVENT (network_data.network_win, NETWORK_NO_NETWORK, 0, para);
  	  break;

	case E_NM_PLMN_LIST:
	  SEND_EVENT (network_data.network_win, NETWORK_PLMN_LIST, 0, para);
      break;

	case E_NM_DEREGISTRATION:
		TRACE_EVENT("MmiNetwork:E_NM_DEREGISTRATION");
		mainShutdown();
		break;
	case E_NM_PREF_PLMN_LIST:
		TRACE_EVENT("MmiNetwork:E_NM_PREF_PLMN_LIST");
        SEND_EVENT (network_data.network_win, NETWORK_PREFERRED_LIST, 0, para);
		break;
	case E_NM_PPLMN_MEM:
		TRACE_EVENT("MmiNetwork:E_NM_PPLMN_MEM");
        SEND_EVENT (network_data.network_win, NETWORK_PPLMN_MEM_LIST, 0, para);
		break;
	/* SH 29-04-02 - Cell reselection */
	case E_NM_CELL_SELECT:
		TRACE_EVENT("MmiNetwork:E_NM_CELL_SELECT");
		SEND_EVENT (network_data.network_win, NETWORK_CELL_SELECT, 0, para);
		break;
	/* SPR919 - SH - Band selection */
	case E_NM_BAND:
		TRACE_EVENT("MmiNetwork:E_NM_BAND");
		nm_registration (nm_get_mode (),0, 0);
		break;
		
    default:
  	  return 0;
  }
  return 1;
}

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

 $Function:    	nm_flag_log_off

 $Description:	 Attribut function for menu entries.
    	       It defines whether the network log off function shall
	            be displayed or not.

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
USHORT nm_flag_log_off (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi)
{
  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED)
    return 0;

  return MNU_ITEM_HIDE;
}
/*******************************************************************************

 $Function:    	nm_flag_log_off

 $Description:	 Attribut function for menu entries.
    	       It defines whether the network log off function shall
	            be displayed or not.

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
USHORT nm_flag_log_on (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi)
{
  if (FFS_flashData.network_name == NULL)
  {
    return MNU_ITEM_HIDE;
  }
  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_NOT_USED)
    return 0;

  return MNU_ITEM_HIDE;
}

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

 $Function:    	network_set_mode_auto

 $Description:	 Start a automatic registration
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
int network_set_mode_auto(T_MFW_MNU *m, T_MFW_MNU_ITEM *i)
{
  TRACE_FUNCTION ("network_set_mode_auto()");

  /*
   * Save the automatic mode in PCM for next power on
   */
  nm_set_mode(NM_AUTOMATIC);

  /*
   * Start the registration of full service
   */
  nm_registration (NM_AUTOMATIC,0, FALSE);

  /*
   * remove network log if needed

⌨️ 快捷键说明

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