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

📄 mminetwork.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
      TRACE_EVENT ("network_long == 0");
    }

      list_menu_data->List[i].flagFunc = item_flag_none;

  }
  /*
   * Fill common parameter for list handling
   */


  list_menu_data->ListLength     = network_data.pplmn_mem.maxRcd;
  list_menu_data->ListPosition    = 1;
  list_menu_data->CursorPosition   = 1;
  list_menu_data->SnapshotSize	= network_data.pplmn_mem.maxRcd;
  list_menu_data->Font          = 0;
  list_menu_data->LeftSoftKey   = TxtSoftSelect;
  list_menu_data->RightSoftKey  = TxtSoftBack;
  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
  list_menu_data->Reason         = 0;
  list_menu_data->Strings        = TRUE;
  list_menu_data->Attr           = &network_menuAttrib;
  list_menu_data->autoDestroy    = TRUE; 
  list_menu_data->listCol = COLOUR_LIST_XX;

  return list_menu_data;
}

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

 $Function:    	network_create_mobile_list

 $Description:	 
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static ListMenuData * network_create_mobile_list (T_network_OPT * data)
{
  UBYTE i;

  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof(ListMenuData));

  if (list_menu_data EQ 0)
  {
    return NULL;
	TRACE_EVENT ("failed to create the list");
  }


  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_SHOW_OF_PLMN * sizeof (T_MFW_MNU_ITEM));

  if (list_menu_data->List EQ 0)
  {
    return NULL;
	TRACE_EVENT ("failed to create the list");
  }

  TRACE_EVENT ("network_create_mobile_list ()");  



  /*
   * Fill Menu List
   */
  for (i=0; i < MAX_SHOW_OF_PLMN; i++)
  {
	mnuInitDataItem(&list_menu_data->List[i]);
 
   /*
    * set network name
    */


#ifdef NO_ASCIIZ
    if (data->pplmn[i].network_long.len NEQ 0 )
    {
		list_menu_data->List[i].str = (char *)data->pplmn[i].network_long.data;
	}
#else     
    if (strlen((char *)data->pplmn[i].network_long) NEQ 0 )
    {
		list_menu_data->List[i].str = (char *)data->pplmn[i].network_long;
	}
#endif
    else
    {
      list_menu_data->List[i].str = GET_TEXT(TxtEmpty);
	}


      list_menu_data->List[i].flagFunc = item_flag_none;

  }
  /*
   * Fill common parameter for list handling
   */


  list_menu_data->ListLength     = MAX_SHOW_OF_PLMN;
  list_menu_data->ListPosition     = 1;
  list_menu_data->CursorPosition  = 1;
  list_menu_data->SnapshotSize   = MAX_SHOW_OF_PLMN;
  list_menu_data->Font           = 0;
  list_menu_data->LeftSoftKey     = TxtSoftSelect;
  list_menu_data->RightSoftKey   = TxtSoftBack;
  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
  list_menu_data->Reason         = 0;
  list_menu_data->Strings        = TRUE;
  list_menu_data->Attr           = &network_menuAttrib;
  list_menu_data->autoDestroy    = TRUE;  /*destroy the menulist after press any sofkey*/
  list_menu_data->listCol = COLOUR_LIST_XX;

  return list_menu_data;
}


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

 $Function:    	network_submenu

 $Description:	Creates a submenu for the preferred list. 
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static ListMenuData * network_submenu (T_network * data, T_MFW_NETWORK_STRUCT * plmn_list)
{
  UBYTE i;
 

  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData));

  if (list_menu_data EQ 0)
    return NULL;

  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((NETWORK_MENU_ITEM) * sizeof (T_MFW_MNU_ITEM));
  if (list_menu_data->List EQ 0)
    return NULL;

  /*
   * Fill Menu List
   */
  for (i=0;i<(NETWORK_MENU_ITEM);i++)
  {
	mnuInitDataItem(&list_menu_data->List[i]);
    
   /*
    * set network name
    */
#ifdef NO_ASCIIZ
    if (plmn_list->network_long.len NEQ 0)
		list_menu_data->List[i].str = (char *)plmn_list->network_long.data;
#else 
    if (strlen((char *)plmn_list->network_long) NEQ 0)
		list_menu_data->List[i].str = (char *)plmn_list->network_long;
#endif

    else
    ;
		//strncpy ((char *)list_menu_data->List[i].str,(char *)empty, 6);


    plmn_list ++;

  }
  /*
   * Fill common parameter for list handling
   */
  list_menu_data->ListLength     = data->pplmn_mem.maxRcd;
  list_menu_data->ListPosition   = 1;
  list_menu_data->CursorPosition = 1;
  list_menu_data->SnapshotSize   = data->pplmn_mem.maxRcd;
  list_menu_data->Font           = 0;
  list_menu_data->LeftSoftKey    = TxtSoftSelect;
  list_menu_data->RightSoftKey   = TxtSoftBack;
  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
  list_menu_data->Reason         = NETWORK_PREF_LIST_SELECTED;
  list_menu_data->Strings        = TRUE;
  list_menu_data->Attr           = &network_menuAttrib;
  list_menu_data->listCol = COLOUR_LIST_XX;

  return list_menu_data;
}



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

 $Function:    	network_list_cb

 $Description:	Callback function list dialog.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_list_cb(T_MFW_HND win, ListMenuData * ListData)
{
  TRACE_FUNCTION ("network_list_cb()");
  if (ListData->Reason != LISTS_REASON_BACK)
  {
	SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL);
  }

}

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

 $Function:    	network_pref_list_cb

 $Description:	Callback function pref. list dialog.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_pref_list_cb(T_MFW_HND win, ListMenuData * ListData)
{
  TRACE_FUNCTION ("network_pref_list_cb()");

  if (ListData->Reason EQ LISTS_REASON_SELECT)
  {
     
// call here the MenuOptions with the items "Select from the list"
//		
	  FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));

	  FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));


	//keep the position of the selected PLMN, need it later to update the list
	network_data.Listposition = ListData->ListPosition;

	network_MNU_start(win,&network_OPTAttrib);
  }
  else
  {
	  
	  //user pressed Exit to go back to the network submenu
	  FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));

	  FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));
	  
	  FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));

  }

  
}

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

 $Function:    	network_mobile_list_cb

 $Description:	Callback function international list dialog.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_mobile_list_cb(T_MFW_HND win, ListMenuData * ListData)
{

	UBYTE i;

	T_MFW_PPLMN_MODE mode;

    T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;
    T_network_OPT    * data     = (T_network_OPT *)win_data->user;

	TRACE_EVENT ("network_mobile_list_cb()");


    switch (ListData->Reason)
    {
		case LISTS_REASON_SELECT: /*  */
			
			mode =   REPLACE_PREF_PLMN;    /* Overwrite an existing entry  at a given index */

			//update now the pref. PLMN list
			//Overwrite an existing entry
			//(network_data.Listposition) "+1" because the zero is counted as well
			nm_change_pref_plmn(mode,(network_data.Listposition) +1 , 0, data->pplmn[ListData->ListPosition].network_numeric);

			// destroy the Menu 
		    network_MNU_destroy(data->win);

		    // request the pref. PLMN list
		    nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);

		    
		    
	    break;
		case LISTS_REASON_BACK: /* back to previous menu */

			TRACE_EVENT ("pressed Back-key");
			network_MNU_destroy(data->win);

	    break;
		default:
	    return;
    }


}

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

 $Function:    	network_start_animation

 $Description:	Starts the network animation.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_start_animation(void)
{
  T_DISPLAY_DATA display_info;

  TRACE_FUNCTION ("network_start_animation()");

	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Searching for", "Networks", COLOUR_STATUS_NETWORKS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
  /*
   * Call Info Screen
   */

  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}


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

 $Function:    	network_start_animation_plmn_selection

 $Description:	Starts the plmn selection animation.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_start_animation_plmn_selection(int plmn_value)
{
  T_DISPLAY_DATA display_info;
  T_MFW_PLMN_LIST * plmn_list;

  TRACE_FUNCTION ("network_start_animation()");

	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Requesting....", NULL, COLOUR_STATUS_NETWORKS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
	
  /*
   * Call Info Screen
   */

  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}


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

 $Function:    	network_forbidden_plmn

 $Description:	Starts the forbidden plmn data screen.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_forbidden_plmn(void)
{
  T_DISPLAY_DATA display_info;

  TRACE_FUNCTION ("network_start_animation()");

	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtForbidden, COLOUR_STATUS_NETWORKS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
  /*
   * Call Info Screen
   */

  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}


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

 $Function:    	network_selected

 $Description:	displays info screen on network selected
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_selected(void)
{
  T_DISPLAY_DATA display_info;

  TRACE_FUNCTION ("network_start_animation()");

	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtSelected, COLOUR_STATUS_NETWORKS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
  /*
   * Call Info Screen
   */

  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}

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

 $Function:    	network_no_plmns

 $Description:	 Indicate Info Screen that the network list is empty.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_no_plmns(void)
{
  T_DISPLAY_DATA display_info;

  TRACE_FUNCTION ("network_no_plmns()");

	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "No networks", "available", COLOUR_STATUS_NETWORKS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, THREE_SECS, KEY_CLEAR| KEY_RIGHT );
  /*
   * Call Info Screen
   */
  info_dialog (0, &display_info);

}
/*******************************************************************************

 $Function:    	network_stop_animation

 $Description:	 Stops the network animation.
    	     
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void network_stop_animation(void)
{
  TRACE_FUNCTION ("network_stop_animation()");

  if (network_data.network_search_win)
  {
	SEND_EVENT(network_data.network_search_win,DIALOG_DESTROY,0,0);
    network_data.network_search_win = 0;
  }
}
/*******************************************************************************

 $Function:    	network_animation_cb

 $Description:	Callback for information dialog (not used)n
    	     
 $Returns:		

⌨️ 快捷键说明

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