NetworkSetupDualMode.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:60k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  * NetworkSetupDualMode.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  * MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  * This file is intends for WCDMA/GSM network setup.
  48.  *
  49.  * Author:
  50.  * -------
  51.  * -------
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * removed!
  58.  *
  59.  * removed!
  60.  * removed!
  61.  * removed!
  62.  *
  63.  * removed!
  64.  * removed!
  65.  * removed!
  66.  *
  67.  * removed!
  68.  * removed!
  69.  * removed!
  70.  *
  71.  * removed!
  72.  * removed!
  73.  * removed!
  74.  *
  75.  * removed!
  76.  * removed!
  77.  * removed!
  78.  *
  79.  * removed!
  80.  * removed!
  81.  * removed!
  82.  *
  83.  * removed!
  84.  * removed!
  85.  * removed!
  86.  *
  87.  * removed!
  88.  * removed!
  89.  * removed!
  90.  *
  91.  * removed!
  92.  * removed!
  93.  * removed!
  94.  *
  95.  * removed!
  96.  * removed!
  97.  * removed!
  98.  *
  99.  * removed!
  100.  * removed!
  101.  * removed!
  102.  *
  103.  * removed!
  104.  * removed!
  105.  * removed!
  106.  *
  107.  * removed!
  108.  * removed!
  109.  * removed!
  110.  *
  111.  * removed!
  112.  * removed!
  113.  * removed!
  114.  *
  115.  * removed!
  116.  * removed!
  117.  * removed!
  118.  *
  119.  * removed!
  120.  * removed!
  121.  * removed!
  122.  *
  123.  * removed!
  124.  * removed!
  125.  * removed!
  126.  *
  127.  * removed!
  128.  * removed!
  129.  * removed!
  130.  *
  131.  * removed!
  132.  * removed!
  133.  * removed!
  134.  *
  135.  *------------------------------------------------------------------------------
  136.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  137.  *============================================================================
  138.  ****************************************************************************/
  139. #include "MMI_features.h"
  140. #include "StdC.h"
  141. #include "L4Dr1.h"
  142. #include "L4Dr.h"
  143. #include "FrameworkStruct.h"
  144. #include "NetworkSetupDefs.h"
  145. #include "NetworkSetupGProt.h"
  146. #include "DebugInitDef.h"
  147. #include "MainMenuDef.h"
  148. #include "ProtocolEvents.h"
  149. #include "SettingProfile.h"
  150. #include "SettingDefs.h"
  151. #include "PrefNwksGprot.h"
  152. #include "CommonScreens.h"
  153. #include "MessagesExDcl.h"
  154. #include "SimDetectionGprot.h"
  155. #include "SimDetectionGexdcl.h"
  156. #include "MessagesResourceData.h"
  157. #include "PreferredNwksStruct.h"
  158. #include "PrefNwksGprot.h"
  159. #include "StatusIconRes.h"
  160. #include "CustResDef.h"
  161. #include "wgui_status_icons.h"
  162. /* Referred from NetworkSetup.c */
  163. extern NetworkSetupContext gNetworkSetup;
  164. extern NetworkSetupDisplay gNetworkSetupDisplay;
  165. extern NetworkSetupMsgQueue gNetworkSetupMsgQueue;
  166. /* Referred from PreferredNwks.c */
  167. extern PrefNetworkListContext gPrefList;
  168. extern PrefNetworkListDisplay gPrefListDisplay;
  169. #ifdef __MMI_USER_CTRL_PLMN_SUPPORT__
  170. extern UserCtrlPlmnListContext gUserCtrlPlmnList;
  171. #endif
  172. extern S8 gHomePLMNNum[];
  173. extern U8 gPLMN[];
  174. S8 *gServiceString[3];  /* inline selection between 'WCDMA' and 'GSM/GPRS' */
  175. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__)
  176. /**************************************************************
  177.    MMI 3G Network Setup Self Test
  178. **************************************************************/
  179. /* Do NOT define this compile option because it will cause confliction with L4's definitions */
  180. #ifdef __MMI_DUAL_MODE_SELF_TEST__
  181. #define PRT_NW_SET_RAT_MODE_REQ MSG_ID_MMI_NW_SET_RAT_MODE_REQ
  182. #define PRT_NW_SET_RAT_MODE_RSP MSG_ID_MMI_NW_SET_RAT_MODE_RSP
  183. #define L4C_RAT_NONE 0
  184. #define L4C_RAT_GSM  1
  185. #define L4C_RAT_UMTS 2
  186. #define L4C_RAT_GSM_UMTS 3
  187. typedef struct
  188. {
  189.     LOCAL_PARA_HDR kal_uint8 rat;
  190. } mmi_nw_set_rat_mode_req_struct;
  191. /*****************************************************************************
  192.  * FUNCTION
  193.  *  mmi_netset_send_rat_mode_rsp_to_mmi
  194.  * DESCRIPTION
  195.  *  
  196.  * PARAMETERS
  197.  *  void
  198.  * RETURNS
  199.  *  void
  200.  *****************************************************************************/
  201. void mmi_netset_send_rat_mode_rsp_to_mmi(void)
  202. {
  203.     /*----------------------------------------------------------------*/
  204.     /* Local Variables                                                */
  205.     /*----------------------------------------------------------------*/
  206.     MYQUEUE Message;
  207.     /*----------------------------------------------------------------*/
  208.     /* Code Body                                                      */
  209.     /*----------------------------------------------------------------*/
  210.     Message.oslSrcId = MOD_MMI;
  211.     Message.oslDestId = MOD_MMI;
  212.     Message.oslMsgId = PRT_NW_SET_RAT_MODE_RSP;
  213.     Message.oslDataPtr = NULL;  /* (oslParaType *)myMsgPtr; */
  214.     Message.oslPeerBuffPtr = NULL;
  215.     OslMsgSendExtQueue(&Message);
  216. }
  217. #endif /* __MMI_DUAL_MODE_SELF_TEST__ */ 
  218. /*****************************************************************************
  219.  * FUNCTION
  220.  *  mmi_netset_highlight_service_selection
  221.  * DESCRIPTION
  222.  *  Highlight handler for service selection
  223.  * PARAMETERS
  224.  *  void
  225.  * RETURNS
  226.  *  void
  227.  *****************************************************************************/
  228. void mmi_netset_highlight_service_selection(void)
  229. {
  230.     /*----------------------------------------------------------------*/
  231.     /* Local Variables                                                */
  232.     /*----------------------------------------------------------------*/
  233.     /*----------------------------------------------------------------*/
  234.     /* Code Body                                                      */
  235.     /*----------------------------------------------------------------*/
  236.     /* change left and right soft key */
  237.     ChangeLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);
  238.     ChangeRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
  239.     /* set left and right soft key handler */
  240.     SetLeftSoftkeyFunction(mmi_netset_entry_service_selection, KEY_EVENT_UP);
  241.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  242.     /* set key handler for left and right arrow key */
  243.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  244.     SetKeyHandler(mmi_netset_entry_service_selection, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  245. }
  246. /*****************************************************************************
  247.  * FUNCTION
  248.  *  mmi_netset_hint_service_selection
  249.  * DESCRIPTION
  250.  *  Hint handler for service selection
  251.  * PARAMETERS
  252.  *  index       [IN]        Hint index
  253.  * RETURNS
  254.  *  void
  255.  *****************************************************************************/
  256. void mmi_netset_hint_service_selection(U16 index)
  257. {
  258.     /*----------------------------------------------------------------*/
  259.     /* Local Variables                                                */
  260.     /*----------------------------------------------------------------*/
  261.     /*----------------------------------------------------------------*/
  262.     /* Code Body                                                      */
  263.     /*----------------------------------------------------------------*/
  264.     switch (gNetworkSetupDisplay.CurrentService + 1)
  265.     {
  266.         case L4C_RAT_GSM:
  267.             pfnUnicodeStrcpy((PS8) hintData[index], (PS8) GetString(STR_ID_NETSET_ITEM_GSM));
  268.             break;
  269.         case L4C_RAT_UMTS:
  270.             pfnUnicodeStrcpy((PS8) hintData[index], (PS8) GetString(STR_ID_NETSET_ITEM_WCDMA));
  271.             break;
  272.         case L4C_RAT_GSM_UMTS:
  273.         default:
  274.             pfnUnicodeStrcpy((PS8) hintData[index], (PS8) GetString(STR_ID_NETSET_MITEM9186_AUTOMATIC));
  275.             break;
  276.     }
  277. }
  278. /*****************************************************************************
  279.  * FUNCTION
  280.  *  mmi_netset_entry_service_selection
  281.  * DESCRIPTION
  282.  *  Entry function for service selection
  283.  * PARAMETERS
  284.  *  void
  285.  * RETURNS
  286.  *  void
  287.  *****************************************************************************/
  288. void mmi_netset_entry_service_selection(void)
  289. {
  290.     /*----------------------------------------------------------------*/
  291.     /* Local Variables                                                */
  292.     /*----------------------------------------------------------------*/
  293.     U8 nNumofItem = 3;
  294.     U8 *guiBuffer;
  295.     U16 nStrItemList[3] = {STR_ID_NETSET_ITEM_GSM, STR_ID_NETSET_ITEM_WCDMA, STR_ID_NETSET_MITEM9186_AUTOMATIC};
  296.     /*----------------------------------------------------------------*/
  297.     /* Code Body                                                      */
  298.     /*----------------------------------------------------------------*/
  299.     EntryNewScreen(SCR_ID_NETSET_SERVICE_SELECTION, NULL, mmi_netset_entry_service_selection, NULL);
  300.     guiBuffer = GetCurrGuiBuffer(SCR_ID_NETSET_SERVICE_SELECTION);
  301.     RegisterHighlightHandler(mmi_netset_highlight_service_selection_item);
  302.     ShowCategory11Screen(
  303.         STR_ID_NETSET_SERVICE_SELECTION,
  304.         MAIN_MENU_TITLE_SETTINGS_ICON,
  305.         STR_GLOBAL_OK,
  306.         IMG_GLOBAL_OK,
  307.         STR_GLOBAL_BACK,
  308.         IMG_GLOBAL_BACK,
  309.         nNumofItem,
  310.         nStrItemList,
  311.         gNetworkSetupDisplay.SelectedService, /* diamond, 2006/05/26 current setting */
  312.         guiBuffer);
  313.     /* set left and right soft key handler */
  314.     SetLeftSoftkeyFunction(mmi_netset_set_rat_mode, KEY_EVENT_UP);
  315.     SetRightSoftkeyFunction(mmi_netset_exit_service_selection, KEY_EVENT_UP);
  316.     /* set key handler for left and right arrow key */
  317.     SetKeyHandler(0, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  318.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  319. }
  320. /*****************************************************************************
  321.  * FUNCTION
  322.  *  mmi_netset_highlight_service_selection_item
  323.  * DESCRIPTION
  324.  *  Highlight handler for service selection
  325.  * PARAMETERS
  326.  *  index       [IN]        Highlight index
  327.  * RETURNS
  328.  *  void
  329.  *****************************************************************************/
  330. void mmi_netset_highlight_service_selection_item(S32 index)
  331. {
  332.     /*----------------------------------------------------------------*/
  333.     /* Local Variables                                                */
  334.     /*----------------------------------------------------------------*/
  335.     /*----------------------------------------------------------------*/
  336.     /* Code Body                                                      */
  337.     /*----------------------------------------------------------------*/
  338.     /* which item is currently selected */
  339.     gNetworkSetupDisplay.SelectedService = (U8) index;
  340. }
  341. /*****************************************************************************
  342.  * FUNCTION
  343.  *  mmi_netset_exit_service_selection
  344.  * DESCRIPTION
  345.  *  Exit function for service selection
  346.  * PARAMETERS
  347.  *  void
  348.  * RETURNS
  349.  *  void
  350.  *****************************************************************************/
  351. void mmi_netset_exit_service_selection(void)
  352. {
  353.     /*----------------------------------------------------------------*/
  354.     /* Local Variables                                                */
  355.     /*----------------------------------------------------------------*/
  356.     /*----------------------------------------------------------------*/
  357.     /* Code Body                                                      */
  358.     /*----------------------------------------------------------------*/
  359.     NETSETCheckAndRestoreNetwork();
  360.     GoBackHistory();
  361. }
  362. #if 0
  363. /* under construction !*/
  364. /* under construction !*/
  365. /* under construction !*/
  366. /* under construction !*/
  367. /* under construction !*/
  368. /* under construction !*/
  369. /* under construction !*/
  370. /* under construction !*/
  371. /* under construction !*/
  372. /* under construction !*/
  373. /* under construction !*/
  374. /* under construction !*/
  375. /* under construction !*/
  376. /* under construction !*/
  377. /* under construction !*/
  378. /* under construction !*/
  379. /* under construction !*/
  380. /* under construction !*/
  381. /* under construction !*/
  382. #ifdef __MANUAL_MODE_NW_SEL__
  383. /* under construction !*/
  384. #endif 
  385. /* under construction !*/
  386. /* under construction !*/
  387. /* under construction !*/
  388. /* under construction !*/
  389. /* under construction !*/
  390. /* under construction !*/
  391. /* under construction !*/
  392. /* under construction !*/
  393. /* under construction !*/
  394. /* under construction !*/
  395. /* under construction !*/
  396. /* under construction !*/
  397. /* under construction !*/
  398. /* under construction !*/
  399. /* under construction !*/
  400. /* under construction !*/
  401. /* under construction !*/
  402. /* under construction !*/
  403. /* under construction !*/
  404. /* under construction !*/
  405. /* under construction !*/
  406. /* under construction !*/
  407. /* under construction !*/
  408. /* under construction !*/
  409. /* under construction !*/
  410. /* under construction !*/
  411. #ifdef __MANUAL_MODE_NW_SEL__
  412. /* under construction !*/
  413. #endif 
  414. /* under construction !*/
  415. /* under construction !*/
  416. /* under construction !*/
  417. /* under construction !*/
  418. /* under construction !*/
  419. #endif /* 0 */
  420. /*****************************************************************************
  421.  * FUNCTION
  422.  *  mmi_netset_service_selection_progress
  423.  * DESCRIPTION
  424.  *  Progressing screen of  service selection
  425.  * PARAMETERS
  426.  *  void
  427.  * RETURNS
  428.  *  void
  429.  *****************************************************************************/
  430. void mmi_netset_service_selection_progress(void)
  431. {
  432.     /*----------------------------------------------------------------*/
  433.     /* Local Variables                                                */
  434.     /*----------------------------------------------------------------*/
  435.     /*----------------------------------------------------------------*/
  436.     /* Code Body                                                      */
  437.     /*----------------------------------------------------------------*/
  438.     EntryNewScreen(SCR_ID_NETSET_AUTO_SEARCH_PROGRESS, NULL, mmi_netset_service_selection_progress, NULL);
  439.     ShowCategory66Screen(
  440.         STR_ID_NETSET_MITEM9186,
  441.         0,
  442.         0,
  443.         0,
  444.         STR_GLOBAL_ABORT,
  445.         IMG_ID_NETSET_ABORT_LSK,
  446.         (U8*) GetString(STR_ID_NETSET_SEARCHIN_NW),
  447.         IMG_ID_NETSET_NW_SEARCH,
  448.         NULL);
  449.     //SetRightSoftkeyFunction(mmi_netset_abort_service_selection, KEY_EVENT_UP);
  450.     //SetKeyHandler(mmi_netset_end_service_selection, KEY_END, KEY_EVENT_DOWN);
  451.     SetKeyHandler(NULL, KEY_END, KEY_EVENT_DOWN); /* Not allow to abort service selection */
  452. }
  453. /*****************************************************************************
  454.  * FUNCTION
  455.  *  mmi_netset_set_rat_mode
  456.  * DESCRIPTION
  457.  *  Wrapper of send/receive RAT messages
  458.  * PARAMETERS
  459.  *  void
  460.  * RETURNS
  461.  *  void
  462.  *****************************************************************************/
  463. void mmi_netset_set_rat_mode(void)
  464. {
  465.     /*----------------------------------------------------------------*/
  466.     /* Local Variables                                                */
  467.     /*----------------------------------------------------------------*/
  468.     /*----------------------------------------------------------------*/
  469.     /* Code Body                                                      */
  470.     /*----------------------------------------------------------------*/
  471.     /* send the request to the network setup message queue */
  472.     NETSETMsgQueuePush(
  473.         NETWORK_SELECTION,
  474.         mmi_netset_set_rat_mode_req,
  475.         PRT_NW_SET_RAT_MODE_RSP,
  476.         mmi_netset_set_rat_mode_rsp);
  477.     mmi_netset_service_selection_progress();
  478. }
  479. /*****************************************************************************
  480.  * FUNCTION
  481.  *  mmi_netset_set_rat_mode_req
  482.  * DESCRIPTION
  483.  *  Send request of changing RAT mode
  484.  * PARAMETERS
  485.  *  void
  486.  * RETURNS
  487.  *  void
  488.  *****************************************************************************/
  489. void mmi_netset_set_rat_mode_req(void)
  490. {
  491.     /*----------------------------------------------------------------*/
  492.     /* Local Variables                                                */
  493.     /*----------------------------------------------------------------*/
  494.     MYQUEUE Message;
  495.     mmi_nw_set_rat_mode_req_struct *myMsgPtr;
  496.     /*----------------------------------------------------------------*/
  497.     /* Code Body                                                      */
  498.     /*----------------------------------------------------------------*/
  499.     /* gGPRSStatusModified = 1; */
  500.     /* still in the same cell, no need to update gNWProviderName */
  501.     //memset(gNWProviderName,0,MAX_LENGTH_DISPLAY_NAME * ENCODING_LENGTH);
  502.     //pfnUnicodeStrcpy((PS8)gNWProviderName,(PS8)GetString(STR_ID_NETSET_SEARCHIN_NW));
  503.     myMsgPtr = (mmi_nw_set_rat_mode_req_struct*) OslConstructDataPtr(sizeof(mmi_nw_set_rat_mode_req_struct));
  504.     myMsgPtr->rat_mode = gNetworkSetupDisplay.SelectedService + 1;
  505.     Message.oslSrcId = MOD_MMI;
  506.     Message.oslDestId = MOD_L4C;
  507.     Message.oslMsgId = PRT_NW_SET_RAT_MODE_REQ;
  508.     Message.oslDataPtr = (oslParaType*) myMsgPtr;
  509.     Message.oslPeerBuffPtr = NULL;
  510.     OslMsgSendExtQueue(&Message);
  511. #ifdef __MMI_DUAL_MODE_SELF_TEST__
  512.     StartTimer(APHORISM_SCR_TIMER, 3000, mmi_netset_send_rat_mode_rsp_to_mmi);
  513. #endif 
  514. }
  515. /*****************************************************************************
  516.  * FUNCTION
  517.  *  mmi_netset_set_rat_mode_rsp
  518.  * DESCRIPTION
  519.  *  Receive response of changing RAT mode
  520.  * PARAMETERS
  521.  *  info        [IN]        Message from L4C
  522.  * RETURNS
  523.  *  void
  524.  *****************************************************************************/
  525. void mmi_netset_set_rat_mode_rsp(void *info)
  526. {
  527.     /*----------------------------------------------------------------*/
  528.     /* Local Variables                                                */
  529.     /*----------------------------------------------------------------*/
  530.     mmi_nw_set_rat_mode_rsp_struct *set_rat_mode_rsp = (mmi_nw_set_rat_mode_rsp_struct *)info;
  531.     /*----------------------------------------------------------------*/
  532.     /* Code Body                                                      */
  533.     /*----------------------------------------------------------------*/
  534.     if (set_rat_mode_rsp->result)
  535.     {
  536.         DisplayPopup((PU8) GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIVATED, 1, ST_NOTIFYDURATION, SUCCESS_TONE);
  537.         gNetworkSetupDisplay.CurrentService = gNetworkSetupDisplay.SelectedService;
  538.     }
  539.     else
  540.     {
  541.         DisplayPopup((PU8) GetString(STR_GLOBAL_UNFINISHED), IMG_GLOBAL_WARNING, 1, ST_NOTIFYDURATION, ERROR_TONE);
  542.         gNetworkSetupDisplay.SelectedService = gNetworkSetupDisplay.CurrentService;
  543.     }
  544.     DeleteScreenIfPresent(SCR_ID_NETSET_AUTO_SEARCH_PROGRESS);
  545.     DeleteScreenIfPresent(SCR_ID_NETSET_SERVICE_SELECTION);
  546. }
  547. /*****************************************************************************
  548.  * FUNCTION
  549.  *  mmi_netset_get_rat_mode_req
  550.  * DESCRIPTION
  551.  *  Send request of getting RAT mode
  552.  * PARAMETERS
  553.  *  void
  554.  * RETURNS
  555.  *  void
  556.  *****************************************************************************/
  557. void mmi_netset_get_rat_mode_req(void)
  558. {
  559.     /*----------------------------------------------------------------*/
  560.     /* Local Variables                                                */
  561.     /*----------------------------------------------------------------*/
  562.     MYQUEUE Message;
  563.     /* mmi_nw_get_rat_mode_req_struct *myMsgPtr; */
  564.     /*----------------------------------------------------------------*/
  565.     /* Code Body                                                      */
  566.     /*----------------------------------------------------------------*/
  567.     ClearInputEventHandler(MMI_DEVICE_ALL); /* send message and wait response in the same screen and no input can be accepted */
  568.     /* only used when enter 'network setup' menu */
  569.     /* SetProtocolEventHandler(mmi_netset_get_rat_mode_rsp, PRT_NW_GET_RAT_MODE_RSP); */
  570.     myMsgPtr = (mmi_nw_get_rat_mode_req_struct*) OslConstructDataPtr(sizeof(mmi_nw_get_rat_mode_req_struct));
  571.     Message.oslSrcId = MOD_MMI;
  572.     Message.oslDestId = MOD_L4C;
  573.     Message.oslMsgId = PRT_NW_GET_RAT_MODE_REQ;
  574.     Message.oslDataPtr = NULL; /* (oslParaType*) myMsgPtr; */
  575.     Message.oslPeerBuffPtr = NULL;
  576.     OslMsgSendExtQueue(&Message);
  577. }
  578. /*****************************************************************************
  579.  * FUNCTION
  580.  *  mmi_netset_get_rat_mode_rsp
  581.  * DESCRIPTION
  582.  *  Receive response of getting RAT mode
  583.  * PARAMETERS
  584.  *  info        [IN]        Message from L4C
  585.  * RETURNS
  586.  *  void
  587.  *****************************************************************************/
  588. void mmi_netset_get_rat_mode_rsp(void *info)
  589. {
  590.     /*----------------------------------------------------------------*/
  591.     /* Local Variables                                                */
  592.     /*----------------------------------------------------------------*/
  593.     mmi_nw_get_rat_mode_rsp_struct *get_rat_mode_rsp = (mmi_nw_get_rat_mode_rsp_struct *)info;
  594.     /*----------------------------------------------------------------*/
  595.     /* Code Body                                                      */
  596.     /*----------------------------------------------------------------*/
  597.     gNetworkSetupDisplay.SelectedService = get_rat_mode_rsp->rat_mode - 1;
  598.     gNetworkSetupDisplay.CurrentService = get_rat_mode_rsp->rat_mode - 1;
  599.     mmi_netset_retrieve_current_modes();
  600. }
  601. /*****************************************************************************
  602.  * FUNCTION
  603.  *  mmi_netset_entry_network_info
  604.  * DESCRIPTION
  605.  *  Entry function of network information
  606.  * PARAMETERS
  607.  *  void
  608.  * RETURNS
  609.  *  void
  610.  *****************************************************************************/
  611. #define MAX_NETSET_STRING_BUF 160
  612. void mmi_netset_entry_network_info(void)
  613. {
  614.     /*----------------------------------------------------------------*/
  615.     /* Local Variables                                                */
  616.     /*----------------------------------------------------------------*/
  617.     S8 NetSetUnicodeDisplayBuf[MAX_NETSET_STRING_BUF];  /* display buffer */
  618.     U8 tempbuf[MAX_NETSET_STRING_BUF];
  619.     U8 *guiBuffer;
  620.     /*----------------------------------------------------------------*/
  621.     /* Code Body                                                      */
  622.     /*----------------------------------------------------------------*/
  623.     EntryNewScreen(SCR_ID_NETSET_NETWORK_INFO, NULL, mmi_netset_entry_network_info, NULL);
  624.     guiBuffer = GetCurrGuiBuffer(SCR_ID_NETSET_NETWORK_INFO);
  625.     SetParentHandler(MENU_ID_NETSET_NETWORK_INFO);
  626.     RegisterHighlightHandler(ExecuteCurrHiliteHandler);
  627.     memset(NetSetUnicodeDisplayBuf, 0, MAX_NETSET_STRING_BUF);
  628.     /* [OPERATOR] Test SIM */
  629.     memset(tempbuf, 0, sizeof(tempbuf));
  630.     AnsiiToUnicodeString((S8*) tempbuf, "[OPERATOR]n");
  631.     pfnUnicodeStrcpy((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  632.     pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)gNWProviderName);
  633.     if (g_pwr_context.CurrentServiceType == FULL_SERVICE)
  634.     {
  635.         /* [MCC/MNC] 00101 */
  636.         memset(tempbuf, 0, sizeof(tempbuf));
  637.         AnsiiToUnicodeString((S8*) tempbuf, "n[MCC/MNC]n");
  638.         pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  639.         memset(tempbuf, 0, sizeof(tempbuf));
  640.         AnsiiToUnicodeString((S8*) tempbuf, (S8*) gPLMN);
  641.         pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  642.     }
  643.     /* [Service] WCDMA */
  644.     memset(tempbuf, 0, sizeof(tempbuf));
  645.     AnsiiToUnicodeString((S8*) tempbuf, "n[Service]n");
  646.     pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  647.     if (mmi_bootup_is_wcdma_service())
  648.     {
  649.         pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)GetString(STR_ID_NETSET_ITEM_WCDMA));
  650.     }
  651.     else
  652.     {
  653.         pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)GetString(STR_ID_NETSET_ITEM_GSM));
  654.     }
  655.     /* [Status] Full Service */
  656.     memset(tempbuf, 0, sizeof(tempbuf));
  657.     AnsiiToUnicodeString((S8*) tempbuf, "n[Status]n");
  658.     pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  659.     memset(tempbuf, 0, sizeof(tempbuf));
  660.     switch (g_pwr_context.CurrentServiceType)
  661.     {
  662.         case FULL_SERVICE:
  663.             AnsiiToUnicodeString((S8*) tempbuf, "Full Service");
  664.             break;
  665.         case NO_SERVICE:
  666.             AnsiiToUnicodeString((S8*) tempbuf, "No Service");
  667.             break;
  668.         case LIMITED_SERVICE:
  669.         default:
  670.             AnsiiToUnicodeString((S8*) tempbuf, "Limited Service");
  671.             break;
  672.     }
  673.     pfnUnicodeStrcat((S8*) NetSetUnicodeDisplayBuf, (const S8*)tempbuf);
  674.     ShowCategory74Screen(
  675.         STR_ID_NETSET_NETWORK_INFO,
  676.         IMG_SMS_ENTRY_SCRN_CAPTION,
  677.         0,
  678.         0,
  679.         STR_GLOBAL_BACK,
  680.         IMG_GLOBAL_BACK,
  681.         (PU8) NetSetUnicodeDisplayBuf,
  682.         pfnUnicodeStrlen(NetSetUnicodeDisplayBuf),
  683.         guiBuffer);
  684.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  685. }
  686. /*****************************************************************************
  687.  * FUNCTION
  688.  *  mmi_netset_highlight_network_info
  689.  * DESCRIPTION
  690.  *  Highlight handler for network information
  691.  * PARAMETERS
  692.  *  void
  693.  * RETURNS
  694.  *  void
  695.  *****************************************************************************/
  696. void mmi_netset_highlight_network_info(void)
  697. {
  698.     /*----------------------------------------------------------------*/
  699.     /* Local Variables                                                */
  700.     /*----------------------------------------------------------------*/
  701.     /*----------------------------------------------------------------*/
  702.     /* Code Body                                                      */
  703.     /*----------------------------------------------------------------*/
  704.     /* change left and right soft key */
  705.     ChangeLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);
  706.     ChangeRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
  707.     /* set left and right soft key handler */
  708.     SetLeftSoftkeyFunction(mmi_netset_entry_network_info, KEY_EVENT_UP);
  709.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  710.     /* set key handler for left and right arrow key */
  711.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  712.     SetKeyHandler(mmi_netset_entry_network_info, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  713. }
  714. /*****************************************************************************
  715.  * FUNCTION
  716.  *  mmi_netset_hint_network_info
  717.  * DESCRIPTION
  718.  *  Hint handler for network information
  719.  * PARAMETERS
  720.  *  index       [IN]        Hint index
  721.  * RETURNS
  722.  *  void
  723.  *****************************************************************************/
  724. void mmi_netset_hint_network_info(U16 index)
  725. {
  726.     /*----------------------------------------------------------------*/
  727.     /* Local Variables                                                */
  728.     /*----------------------------------------------------------------*/
  729.     /*----------------------------------------------------------------*/
  730.     /* Code Body                                                      */
  731.     /*----------------------------------------------------------------*/
  732.     pfnUnicodeStrcpy((PS8) hintData[index], (PS8) gNWProviderName);
  733. }
  734. /*****************************************************************************
  735.  * FUNCTION
  736.  *  mmi_netset_refresh_rat_icon
  737.  * DESCRIPTION
  738.  *  Refresh RAT icon
  739.  * PARAMETERS
  740.  *  rat             [IN]        
  741.  *  index(?)        [IN]        Hint index
  742.  * RETURNS
  743.  *  void
  744.  *****************************************************************************/
  745. void mmi_netset_refresh_rat_icon(U8 rat)
  746. {
  747.     /*----------------------------------------------------------------*/
  748.     /* Local Variables                                                */
  749.     /*----------------------------------------------------------------*/
  750.     /*----------------------------------------------------------------*/
  751.     /* Code Body                                                      */
  752.     /*----------------------------------------------------------------*/
  753.     switch (rat)
  754.     {
  755.         case L4C_RAT_GSM:       /* 1 */
  756.             g_pwr_context.PowerOnSIMStatus &= ~MMI_SIM_STATUS_3G;
  757.             HideStatusIcon(STATUS_ICON_3G);
  758.             ShowStatusIcon(STATUS_ICON_2G);
  759.             break;
  760.         case L4C_RAT_UMTS:      /* 2 */
  761.             g_pwr_context.PowerOnSIMStatus |= MMI_SIM_STATUS_3G;
  762.             HideStatusIcon(STATUS_ICON_2G);
  763.             ShowStatusIcon(STATUS_ICON_3G);
  764.             break;
  765.         case L4C_RAT_NONE:      /* 0 */
  766.         case L4C_RAT_GSM_UMTS:  /* 3 */
  767.         default:
  768.             HideStatusIcon(STATUS_ICON_2G);
  769.             HideStatusIcon(STATUS_ICON_3G);
  770.             break;
  771.     }
  772.     UpdateStatusIcons();
  773. }
  774. #endif /* defined(__GSM_RAT__) && defined(__WCDMA_RAT__) */ 
  775. /*****************************************************************************
  776.  * FUNCTION
  777.  *  mmi_netset_fill_add_prr_netwrok_inline_editor
  778.  * DESCRIPTION
  779.  *  Initialize inline editor for preferred networks, add from list
  780.  * PARAMETERS
  781.  *  void
  782.  * RETURNS
  783.  *  void
  784.  *****************************************************************************/
  785. void mmi_netset_fill_add_prr_netwrok_inline_editor(void)
  786. {
  787.     /*----------------------------------------------------------------*/
  788.     /* Local Variables                                                */
  789.     /*----------------------------------------------------------------*/
  790.     /*----------------------------------------------------------------*/
  791.     /* Code Body                                                      */
  792.     /*----------------------------------------------------------------*/
  793.     SetInlineItemActivation(&wgui_inline_items[0], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
  794.     SetInlineItemCaption(&wgui_inline_items[0], (U8*) GetString(STR_ID_NETSET_PRR_PR_CAPTION));
  795.     SetInlineItemActivation(&wgui_inline_items[1], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
  796.     SetInlineItemUserDefinedSelect(
  797.         &wgui_inline_items[1],
  798.         InLinePriorityDefault,
  799.         InLinePriorityMinusOne,
  800.         InLinePriorityAddOne);
  801.     SetInlineItemActivation(&wgui_inline_items[2], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
  802.     SetInlineItemCaption(&wgui_inline_items[2], (U8*) GetString(STR_ID_NETSET_PRR_SV_CAPTION));
  803.     SetInlineItemActivation(&wgui_inline_items[3], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
  804. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__)
  805.     SetInlineItemSelect(&(wgui_inline_items[3]), 3, (U8 **) gServiceString, &gPrefListDisplay.CurrSelectService);
  806. #else 
  807.     SetInlineItemSelect(&(wgui_inline_items[3]), 1, (U8 **) gServiceString, &gPrefListDisplay.CurrSelectService);
  808. #endif 
  809. }
  810. /*****************************************************************************
  811.  * FUNCTION
  812.  *  mmi_netset_highlight_add_network_priority_and_service
  813.  * DESCRIPTION
  814.  *  Highlight handler for preferred networks, add from list
  815.  * PARAMETERS
  816.  *  index       [IN]        Highlight index
  817.  * RETURNS
  818.  *  void
  819.  *****************************************************************************/
  820. void mmi_netset_highlight_add_network_priority_and_service(S32 index)
  821. {
  822.     /*----------------------------------------------------------------*/
  823.     /* Local Variables                                                */
  824.     /*----------------------------------------------------------------*/
  825.     /*----------------------------------------------------------------*/
  826.     /* Code Body                                                      */
  827.     /*----------------------------------------------------------------*/
  828.     ChangeLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);
  829.     SetCategory57LeftSoftkeyFunction(ChcekThenAddNetwork);
  830. }
  831. /*****************************************************************************
  832.  * FUNCTION
  833.  *  mmi_netset_entry_add_network_priority_and_service
  834.  * DESCRIPTION
  835.  *  Entry function to fill priority and service for preferred networks, add netwrok from list
  836.  * PARAMETERS
  837.  *  void
  838.  * RETURNS
  839.  *  void
  840.  *****************************************************************************/
  841. void mmi_netset_entry_add_network_priority_and_service(void)
  842. {
  843.     /*----------------------------------------------------------------*/
  844.     /* Local Variables                                                */
  845.     /*----------------------------------------------------------------*/
  846.     U8 *guiBuffer;          /* Buffer holding history data */
  847.     U8 *inputBuffer;        /* added for inline edit history */
  848.     U16 inputBufferSize;    /* added for inline edit history */
  849.     /*----------------------------------------------------------------*/
  850.     /* Code Body                                                      */
  851.     /*----------------------------------------------------------------*/
  852.     EntryNewScreen(
  853.         SCR_ID_NETSET_ADD_NEW_NETWORK_PRIORITY,
  854.         NULL,
  855.         mmi_netset_entry_add_network_priority_and_service,
  856.         NULL);
  857.     guiBuffer = GetCurrGuiBuffer(SCR_ID_NETSET_ADD_NEW_NETWORK_PRIORITY);
  858.     inputBuffer = GetCurrNInputBuffer(SCR_ID_NETSET_ADD_NEW_NETWORK_PRIORITY, &inputBufferSize);        /* added for inline edit history */
  859.     InitializeCategory57Screen();
  860.     mmi_netset_fill_add_prr_netwrok_inline_editor();
  861.     RegisterHighlightHandler(mmi_netset_highlight_add_network_priority_and_service);
  862.     if (inputBuffer != NULL)
  863.     {
  864.         SetCategory57Data(wgui_inline_items, 4, inputBuffer);
  865.     }
  866.     ShowCategory57Screen(
  867.         STR_ID_NETSET_PRF_ADD_SHW_NWK_PRIORITY_TITLE,
  868.         MAIN_MENU_TITLE_SETTINGS_ICON,
  869.         STR_GLOBAL_OK,
  870.         IMG_GLOBAL_OK,
  871.         STR_GLOBAL_BACK,
  872.         IMG_GLOBAL_BACK,
  873.         4,
  874.         NULL,
  875.         wgui_inline_items,
  876.         1,
  877.         guiBuffer);
  878.     DisableCategory57ScreenDone();
  879.     SetCategory57RightSoftkeyFunctions(GoBackHistory, GoBackHistory);
  880. }
  881. /*****************************************************************************
  882.  * FUNCTION
  883.  *  mmi_netset_get_preferred_networks_item
  884.  * DESCRIPTION
  885.  *  Dynamically get preferred networks items
  886.  * PARAMETERS
  887.  *  item_index          [IN]        
  888.  *  str_buff            [IN]        
  889.  *  img_buff_p          [?]         
  890.  *  str_img_mask        [IN]        
  891.  * RETURNS
  892.  *  pBOOL
  893.  *****************************************************************************/
  894. pBOOL mmi_netset_get_preferred_networks_item(S32 item_index, UI_string_type str_buff, PU8 *img_buff_p, U8 str_img_mask)
  895. {
  896.     /*----------------------------------------------------------------*/
  897.     /* Local Variables                                                */
  898.     /*----------------------------------------------------------------*/
  899.     /*----------------------------------------------------------------*/
  900.     /* Code Body                                                      */
  901.     /*----------------------------------------------------------------*/
  902.     //      if((item_index < 0) || (item_index > MAX_PLMN_NO_LIST_LENGTH))
  903.     //              return MMI_FALSE;
  904.     pfnUnicodeStrcpy((S8*) str_buff, (S8*) gPrefListDisplay.nStrItemList[item_index]);
  905.     *img_buff_p = get_image(gPrefListDisplay.PLMNListIcons[item_index]);
  906.     return MMI_TRUE;
  907. }
  908. /*****************************************************************************
  909.  * FUNCTION
  910.  *  mmi_netset_get_preferred_networks_hint
  911.  * DESCRIPTION
  912.  *  Dynamically get preferred networks items
  913.  * PARAMETERS
  914.  *  item_index      [IN]        
  915.  *  hint_array      [?]         
  916.  *  UI_string_type str_buff(?)
  917.  * RETURNS
  918.  *  S32
  919.  *****************************************************************************/
  920. S32 mmi_netset_get_preferred_networks_hint(S32 item_index, UI_string_type *hint_array)
  921. {
  922.     /*----------------------------------------------------------------*/
  923.     /* Local Variables                                                */
  924.     /*----------------------------------------------------------------*/
  925.     U8 tempDislpay[MAX_LENGTH_DISPLAY_NAME * ENCODING_LENGTH];
  926.     /*----------------------------------------------------------------*/
  927.     /* Code Body                                                      */
  928.     /*----------------------------------------------------------------*/
  929.     AnsiiToUnicodeString((PS8) tempDislpay, (S8*) gPrefList.PrefPLMN[item_index]);
  930.     /* Skip the hint if the item data and hint data are the same as plmn number */
  931.     if (pfnUnicodeStrcmp((S8*) gPrefListDisplay.nStrItemList[item_index], (PS8) tempDislpay) == 0)
  932.     {
  933.         return MMI_FALSE;
  934.     }
  935.     pfnUnicodeStrcpy((PS8) * hint_array, (PS8) tempDislpay);
  936.     return MMI_TRUE;
  937. }
  938. /* diamond, 2006/03/08 New PLMN management */
  939. /*****************************************************************************
  940.  * FUNCTION
  941.  *  mmi_netset_plmn_str_2_bcd_short
  942.  * DESCRIPTION
  943.  *  
  944.  * PARAMETERS
  945.  *  plmn        [?]     
  946.  * RETURNS
  947.  *  
  948.  *****************************************************************************/
  949. U32 mmi_netset_plmn_str_2_bcd_short(U8 *plmn)
  950. {
  951.     /*----------------------------------------------------------------*/
  952.     /* Local Variables                                                */
  953.     /*----------------------------------------------------------------*/
  954.     U32 b1 = 0, b2 = 0, b3 = 0;
  955.     /*----------------------------------------------------------------*/
  956.     /* Code Body                                                      */
  957.     /*----------------------------------------------------------------*/
  958.     b1 = (*plmn - 0x30) + ((*(plmn + 1) - 0x30) << 4);
  959.     b2 = (*(plmn + 2) - 0x30) + (*(plmn + 5) == 0 ? 0xF0 : ((*(plmn + 5) - 0x30) << 4));
  960.     b3 = (*(plmn + 3) - 0x30) + ((*(plmn + 4) - 0x30) << 4);
  961.     return b1 + (b2 << 8) + (b3 << 16);
  962. }
  963. /*****************************************************************************
  964.  * FUNCTION
  965.  *  mmi_netset_bcd_short_2_plmn_str
  966.  * DESCRIPTION
  967.  *  
  968.  * PARAMETERS
  969.  *  bcd         [IN]        
  970.  *  plmn        [?]         
  971.  * RETURNS
  972.  *  void
  973.  *****************************************************************************/
  974. void mmi_netset_bcd_short_2_plmn_str(U32 bcd, U8 *plmn)
  975. {
  976.     /*----------------------------------------------------------------*/
  977.     /* Local Variables                                                */
  978.     /*----------------------------------------------------------------*/
  979.     /*----------------------------------------------------------------*/
  980.     /* Code Body                                                      */
  981.     /*----------------------------------------------------------------*/
  982.     *plmn = (U8) (0x30 + (bcd & 0x0000000F));
  983.     *(plmn + 1) = (U8) (0x30 + ((bcd & 0x000000F0) >> 4));
  984.     *(plmn + 2) = (U8) (0x30 + ((bcd & 0x00000F00) >> 8));
  985.     *(plmn + 3) = (U8) (0x30 + ((bcd & 0x000F0000) >> 16));
  986.     *(plmn + 4) = (U8) (0x30 + ((bcd & 0x00F00000) >> 20));
  987.     *(plmn + 5) = (bcd & 0x0000F000) == 0x0000F000 ? 0 : (U8) (0x30 + ((bcd & 0x0000F000) >> 12));
  988.     *(plmn + 6) = 0;
  989. }
  990. /*****************************************************************************
  991.  * FUNCTION
  992.  *  mmi_netset_retrieve_opname_from_plmn
  993.  * DESCRIPTION
  994.  *  
  995.  * PARAMETERS
  996.  *  plmn        [?]     
  997.  *  opname      [?]     
  998.  * RETURNS
  999.  *  
  1000.  *****************************************************************************/
  1001. S16 mmi_netset_retrieve_opname_from_plmn(U8 *plmn, U8 *opname)
  1002. {
  1003.     /*----------------------------------------------------------------*/
  1004.     /* Local Variables                                                */
  1005.     /*----------------------------------------------------------------*/
  1006.     /* plmn: null-terminated plmn string in octet */
  1007.     /* opname: unicode string for display */
  1008.     U16 count;  /* Where is the matched plmn */
  1009.     U16 index;  /* The string index of the plmn */
  1010.     U32 plmn_bcd = mmi_netset_plmn_str_2_bcd_short(plmn);
  1011.     /* find the user defined PLMNs first */
  1012. #ifdef __MMI_USER_CTRL_PLMN_SUPPORT__
  1013.     U32 plmn_usr;
  1014. #endif
  1015.     /*----------------------------------------------------------------*/
  1016.     /* Code Body                                                      */
  1017.     /*----------------------------------------------------------------*/
  1018. #ifdef __MMI_USER_CTRL_PLMN_SUPPORT__
  1019.     for (count = 0; count < gUserCtrlPlmnList.PlmnListSize; count++)
  1020.     {
  1021.         memcpy((char*)(&plmn_usr), gUserCtrlPlmnList.PrefPLMN[count], sizeof(U32));
  1022.         if (plmn_bcd == plmn_usr)
  1023.         {
  1024.             if (opname)
  1025.             {
  1026.                 AnsiiToUnicodeString((S8*) opname, (S8*) (gUserCtrlPlmnList.PrefPLMN[count] + sizeof(U32)));
  1027.             }
  1028.             return count;
  1029.         }
  1030.     }
  1031. #endif /* __MMI_USER_CTRL_PLMN_SUPPORT__ */ 
  1032.     for (count = 0; bcdPlmnsToDisplayName[count].plmn_bcd != 0; count++)
  1033.     {
  1034.         if (plmn_bcd == bcdPlmnsToDisplayName[count].plmn_bcd)
  1035.         {
  1036.             if (opname)
  1037.             {
  1038.                 index = bcdPlmnsToDisplayName[count].string_index + STR_PLMN_NAME_1;
  1039.                 if (pfnUnicodeStrlen(GetString(index)) >= MAX_LENGTH_DISPLAY_NAME)
  1040.                 {
  1041.                     AnsiiToUnicodeString((S8*) opname, (S8*) plmn);   /* if string length is larger than max supported display, it will casue memory corruption if make strcpy */
  1042.                 }
  1043.                 else
  1044.                 {
  1045.                     pfnUnicodeStrcpy((S8*) opname, GetString(index));
  1046.                 }
  1047.             }
  1048.             return count;
  1049.         }
  1050.     }
  1051.     if (opname)
  1052.     {
  1053.         AnsiiToUnicodeString((S8*) opname, (S8*) plmn);
  1054.     }
  1055.     return -1;
  1056. }
  1057. /*****************************************************************************
  1058.  * FUNCTION
  1059.  *  mmi_netset_equivalent_plmn_check
  1060.  * DESCRIPTION
  1061.  *  
  1062.  * PARAMETERS
  1063.  *  void
  1064.  * RETURNS
  1065.  *  
  1066.  *****************************************************************************/
  1067. pBOOL mmi_netset_equivalent_plmn_check(void)
  1068. {
  1069.     /*----------------------------------------------------------------*/
  1070.     /* Local Variables                                                */
  1071.     /*----------------------------------------------------------------*/
  1072.     /* gHomePLMNNum (Home PLMN) and gPLMN (camp on PLMN) are equivalent */
  1073.     U8 plmn_str_1[MAX_PLMN_LEN_MMI], plmn_str_2[MAX_PLMN_LEN_MMI + 1];
  1074.     S16 plmn_idx_1, plmn_idx_2, g_plmn_idx;
  1075.     /*----------------------------------------------------------------*/
  1076.     /* Code Body                                                      */
  1077.     /*----------------------------------------------------------------*/
  1078.     memcpy(plmn_str_1, gHomePLMNNum, 5);    /* assumed that Home PLMN is 5-digit */
  1079.     plmn_str_1[5] = 0;
  1080.     memcpy(plmn_str_2, gHomePLMNNum, 6);    /* assumed that Home PLMN is 6-digit */
  1081.     plmn_str_2[6] = 0;
  1082.     plmn_idx_1 = mmi_netset_retrieve_opname_from_plmn(plmn_str_1, NULL);
  1083.     plmn_idx_2 = mmi_netset_retrieve_opname_from_plmn(plmn_str_2, NULL);
  1084.     if ((g_plmn_idx = mmi_netset_retrieve_opname_from_plmn(gPLMN, NULL)) == -1)
  1085.     {
  1086.         return MMI_FALSE;
  1087.     }
  1088.     if (bcdPlmnsToDisplayName[plmn_idx_1].string_index == bcdPlmnsToDisplayName[g_plmn_idx].string_index
  1089.         || bcdPlmnsToDisplayName[plmn_idx_2].string_index == bcdPlmnsToDisplayName[g_plmn_idx].string_index)
  1090.     {
  1091.         return MMI_TRUE;
  1092.     }
  1093.     else
  1094.     {
  1095.         return MMI_FALSE;
  1096.     }
  1097. }
  1098. /*****************************************************************************
  1099.  * FUNCTION
  1100.  *  mmi_netset_sort_2_entry_comapre
  1101.  * DESCRIPTION
  1102.  *  
  1103.  * PARAMETERS
  1104.  *  bcd_a       [IN]        
  1105.  *  bcd_b       [IN]        
  1106.  * RETURNS
  1107.  *  
  1108.  *****************************************************************************/
  1109. static S16 mmi_netset_sort_2_entry_comapre(U16 bcd_a, U16 bcd_b)
  1110. {
  1111.     /*----------------------------------------------------------------*/
  1112.     /* Local Variables                                                */
  1113.     /*----------------------------------------------------------------*/
  1114.     /* compare a with b */
  1115.     U8 i = 0, strlen_a, strlen_b;
  1116.     S8 *str_a = GetString((U16)(STR_PLMN_NAME_1 + bcdPlmnsToDisplayName[bcd_a].string_index));
  1117.     S8 *str_b = GetString((U16)(STR_PLMN_NAME_1 + bcdPlmnsToDisplayName[bcd_b].string_index));
  1118.     /*----------------------------------------------------------------*/
  1119.     /* Code Body                                                      */
  1120.     /*----------------------------------------------------------------*/
  1121.     strlen_a = pfnUnicodeStrlen(str_a);
  1122.     strlen_b = pfnUnicodeStrlen(str_b);
  1123.     do
  1124.     {
  1125.         if (*(U16*) (str_a + i) > *(U16*) (str_b + i))
  1126.         {
  1127.             return 1;
  1128.         }
  1129.         else if (*(U16*) (str_a + i) < *(U16*) (str_b + i))
  1130.         {
  1131.             return -1;
  1132.         }
  1133.         else
  1134.         {
  1135.             i += ENCODING_LENGTH;
  1136.         }
  1137.     } while (i < strlen_a && i < strlen_b);
  1138.     if (strlen_a > strlen_b)
  1139.     {
  1140.         return 1;
  1141.     }
  1142.     else if (strlen_a < strlen_b)
  1143.     {
  1144.         return -1;
  1145.     }
  1146.     else
  1147.     {
  1148.         return 0;
  1149.     }
  1150. }
  1151. /*****************************************************************************
  1152.  * FUNCTION
  1153.  *  mmi_netset_sort_insert_new_entry
  1154.  * DESCRIPTION
  1155.  *  
  1156.  * PARAMETERS
  1157.  *  index           [IN]        
  1158.  *  reference       [IN]        
  1159.  * RETURNS
  1160.  *  void
  1161.  *****************************************************************************/
  1162. static void mmi_netset_sort_insert_new_entry(U16 index, U16 reference)
  1163. {
  1164.     /*----------------------------------------------------------------*/
  1165.     /* Local Variables                                                */
  1166.     /*----------------------------------------------------------------*/
  1167.     /* index = target, reference = place */
  1168.     /* index always <= reference */
  1169.     /* index=i, reference=j, reference<index */
  1170.     U16 i, tmp1, tmp2;
  1171.     /*----------------------------------------------------------------*/
  1172.     /* Code Body                                                      */
  1173.     /*----------------------------------------------------------------*/
  1174.     if (index == reference) /* insert to the latest one */
  1175.     {
  1176.         gPrefListDisplay.SortingArray[index] = index;
  1177.     }
  1178.     else
  1179.     {
  1180.         tmp2 = index;
  1181.         for (i = reference; i <= index; i++)
  1182.         {
  1183.             tmp1 = gPrefListDisplay.SortingArray[i];
  1184.             gPrefListDisplay.SortingArray[i] = tmp2;
  1185.             tmp2 = tmp1;
  1186.         }
  1187.     }
  1188. }
  1189. /*****************************************************************************
  1190.  * FUNCTION
  1191.  *  mmi_netset_sort_plmn_list_by_alphabet
  1192.  * DESCRIPTION
  1193.  *  
  1194.  * PARAMETERS
  1195.  *  total_record        [IN]        
  1196.  * RETURNS
  1197.  *  void
  1198.  *****************************************************************************/
  1199. void mmi_netset_sort_plmn_list_by_alphabet(U16 total_record)
  1200. {
  1201.     /*----------------------------------------------------------------*/
  1202.     /* Local Variables                                                */
  1203.     /*----------------------------------------------------------------*/
  1204.     U16 i, j;
  1205.     S16 cmp1, cmp2;
  1206.     /*----------------------------------------------------------------*/
  1207.     /* Code Body                                                      */
  1208.     /*----------------------------------------------------------------*/
  1209.     if (gPrefListDisplay.SortingArray)
  1210.     {
  1211.         OslMfree(gPrefListDisplay.SortingArray);
  1212.     }
  1213.     gPrefListDisplay.SortingArray = OslMalloc(total_record * 2);
  1214.     PRINT_INFORMATION(("@@@@@ PLMN list sorted by alphabet @@@@@"));
  1215.     /* sorting array index 0 */
  1216.     gPrefListDisplay.SortingArray[0] = 0;
  1217.     /* sorting array index 1 */
  1218.     if (mmi_netset_sort_2_entry_comapre(1, gPrefListDisplay.SortingArray[0]) < 0)
  1219.     {
  1220.         mmi_netset_sort_insert_new_entry(1, 0);
  1221.     }
  1222.     else
  1223.     {
  1224.         mmi_netset_sort_insert_new_entry(1, 1);
  1225.     }
  1226.     /* sorting array index 2 to max */
  1227.     for (i = 2; i < total_record; i++)
  1228.     {
  1229.         cmp1 = mmi_netset_sort_2_entry_comapre(i, gPrefListDisplay.SortingArray[0]);
  1230.         if (cmp1 < 0)
  1231.         {
  1232.             mmi_netset_sort_insert_new_entry(i, 0);
  1233.         }
  1234.         else
  1235.         {
  1236.             for (j = 1; j < i; j++)
  1237.             {
  1238.                 cmp2 = mmi_netset_sort_2_entry_comapre(i, gPrefListDisplay.SortingArray[j]);
  1239.                 if (cmp2 < 0)
  1240.                 {
  1241.                     break;
  1242.                 }
  1243.                 cmp1 = cmp2;
  1244.             }
  1245.             mmi_netset_sort_insert_new_entry(i, j);
  1246.         }
  1247.     }
  1248. }
  1249. /*****************************************************************************
  1250.  * FUNCTION
  1251.  *  mmi_netset_sort_plmn_list_by_default
  1252.  * DESCRIPTION
  1253.  *  
  1254.  * PARAMETERS
  1255.  *  total_record        [IN]        
  1256.  * RETURNS
  1257.  *  void
  1258.  *****************************************************************************/
  1259. void mmi_netset_sort_plmn_list_by_default(U16 total_record)
  1260. {
  1261.     /*----------------------------------------------------------------*/
  1262.     /* Local Variables                                                */
  1263.     /*----------------------------------------------------------------*/
  1264.     U16 i;
  1265.     /*----------------------------------------------------------------*/
  1266.     /* Code Body                                                      */
  1267.     /*----------------------------------------------------------------*/
  1268.     if (gPrefListDisplay.SortingArray)
  1269.     {
  1270.         OslMfree(gPrefListDisplay.SortingArray);
  1271.     }
  1272.     gPrefListDisplay.SortingArray = OslMalloc(total_record * 2);
  1273.     PRINT_INFORMATION(("@@@@@ PLMN list sorted by defauly @@@@@"));
  1274.     for (i = 0; i < total_record; i++)
  1275.     {
  1276.         gPrefListDisplay.SortingArray[i] = i;
  1277.     }
  1278. }
  1279. /*****************************************************************************
  1280.  * FUNCTION
  1281.  *  mmi_netset_entry_add_from_list_options
  1282.  * DESCRIPTION
  1283.  *  
  1284.  * PARAMETERS
  1285.  *  void
  1286.  * RETURNS
  1287.  *  void
  1288.  *****************************************************************************/
  1289. void mmi_netset_entry_add_from_list_options(void)
  1290. {
  1291.     /*----------------------------------------------------------------*/
  1292.     /* Local Variables                                                */
  1293.     /*----------------------------------------------------------------*/
  1294.     PU8 guiBuffer;
  1295.     U16 nStrItemList[3];    /* Stores the strings id of submenus returned */
  1296.     U16 nNumofItem;         /* Stores no of children in the submenu */
  1297.     /*----------------------------------------------------------------*/
  1298.     /* Code Body                                                      */
  1299.     /*----------------------------------------------------------------*/
  1300.     EntryNewScreen(SCR_ID_ADD_FROM_LIST_OPTIONS, NULL, mmi_netset_entry_add_from_list_options, NULL);
  1301.     guiBuffer = GetCurrGuiBuffer(SCR_ID_ADD_FROM_LIST_OPTIONS);
  1302.     nNumofItem = GetNumOfChild_Ext(MENU_ID_ADD_FROM_LIST_OPTIONS);
  1303.     GetSequenceStringIds_Ext(MENU_ID_ADD_FROM_LIST_OPTIONS, nStrItemList);
  1304.     SetParentHandler(MENU_ID_ADD_FROM_LIST_OPTIONS);
  1305.     RegisterHighlightHandler(ExecuteCurrHiliteHandler);
  1306.     ShowCategory15Screen(
  1307.         STR_GLOBAL_OPTIONS,
  1308.         MAIN_MENU_TITLE_SETTINGS_ICON,
  1309.         STR_GLOBAL_OK,
  1310.         IMG_GLOBAL_OK,
  1311.         STR_GLOBAL_BACK,
  1312.         IMG_GLOBAL_BACK,
  1313.         nNumofItem,
  1314.         nStrItemList,
  1315.         (PU16) gIndexIconsImageList,
  1316.         LIST_MENU,
  1317.         0,
  1318.         guiBuffer);
  1319.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  1320.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1321. }
  1322. /*****************************************************************************
  1323.  * FUNCTION
  1324.  *  mmi_netset_entry_add_from_list_done
  1325.  * DESCRIPTION
  1326.  *  
  1327.  * PARAMETERS
  1328.  *  void
  1329.  * RETURNS
  1330.  *  void
  1331.  *****************************************************************************/
  1332. void mmi_netset_entry_add_from_list_done(void)
  1333. {
  1334.     /*----------------------------------------------------------------*/
  1335.     /* Local Variables                                                */
  1336.     /*----------------------------------------------------------------*/
  1337.     /*----------------------------------------------------------------*/
  1338.     /* Code Body                                                      */
  1339.     /*----------------------------------------------------------------*/
  1340. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__)
  1341.     mmi_netset_entry_add_network_priority_and_service();
  1342. #else
  1343.     EntryNETSETAddNetworkPriority();
  1344. #endif
  1345. }
  1346. /*****************************************************************************
  1347.  * FUNCTION
  1348.  *  mmi_netset_entry_sort_by_default
  1349.  * DESCRIPTION
  1350.  *  
  1351.  * PARAMETERS
  1352.  *  void
  1353.  * RETURNS
  1354.  *  void
  1355.  *****************************************************************************/
  1356. void mmi_netset_entry_sort_by_default(void)
  1357. {
  1358.     /*----------------------------------------------------------------*/
  1359.     /* Local Variables                                                */
  1360.     /*----------------------------------------------------------------*/
  1361.     /*----------------------------------------------------------------*/
  1362.     /* Code Body                                                      */
  1363.     /*----------------------------------------------------------------*/
  1364.     gPrefListDisplay.SortingMethod = 0;
  1365.     DisplayPopup((PU8) GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIVATED, 1, ST_NOTIFYDURATION, SUCCESS_TONE);
  1366.     DeleteScreenIfPresent(SCR_ID_ADD_FROM_LIST_OPTIONS);
  1367. }
  1368. /*****************************************************************************
  1369.  * FUNCTION
  1370.  *  mmi_netset_entry_sort_by_alphabet
  1371.  * DESCRIPTION
  1372.  *  
  1373.  * PARAMETERS
  1374.  *  void
  1375.  * RETURNS
  1376.  *  void
  1377.  *****************************************************************************/
  1378. void mmi_netset_entry_sort_by_alphabet(void)
  1379. {
  1380.     /*----------------------------------------------------------------*/
  1381.     /* Local Variables                                                */
  1382.     /*----------------------------------------------------------------*/
  1383.     /*----------------------------------------------------------------*/
  1384.     /* Code Body                                                      */
  1385.     /*----------------------------------------------------------------*/
  1386.     gPrefListDisplay.SortingMethod = 1;
  1387.     DisplayPopup((PU8) GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIVATED, 1, ST_NOTIFYDURATION, SUCCESS_TONE);
  1388.     DeleteScreenIfPresent(SCR_ID_ADD_FROM_LIST_OPTIONS);
  1389. }
  1390. /*****************************************************************************
  1391.  * FUNCTION
  1392.  *  mmi_netset_highlight_add_from_list_done
  1393.  * DESCRIPTION
  1394.  *  
  1395.  * PARAMETERS
  1396.  *  void
  1397.  * RETURNS
  1398.  *  void
  1399.  *****************************************************************************/
  1400. void mmi_netset_highlight_add_from_list_done(void)
  1401. {
  1402.     /*----------------------------------------------------------------*/
  1403.     /* Local Variables                                                */
  1404.     /*----------------------------------------------------------------*/
  1405.     /*----------------------------------------------------------------*/
  1406.     /* Code Body                                                      */
  1407.     /*----------------------------------------------------------------*/
  1408.     SetLeftSoftkeyFunction(mmi_netset_entry_add_from_list_done, KEY_EVENT_UP);
  1409.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  1410.     SetKeyHandler(mmi_netset_entry_add_from_list_done, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1411.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1412. }
  1413. /*****************************************************************************
  1414.  * FUNCTION
  1415.  *  mmi_netset_highlight_sort_by_default
  1416.  * DESCRIPTION
  1417.  *  
  1418.  * PARAMETERS
  1419.  *  void
  1420.  * RETURNS
  1421.  *  void
  1422.  *****************************************************************************/
  1423. void mmi_netset_highlight_sort_by_default(void)
  1424. {
  1425.     /*----------------------------------------------------------------*/
  1426.     /* Local Variables                                                */
  1427.     /*----------------------------------------------------------------*/
  1428.     /*----------------------------------------------------------------*/
  1429.     /* Code Body                                                      */
  1430.     /*----------------------------------------------------------------*/
  1431.     SetLeftSoftkeyFunction(mmi_netset_entry_sort_by_default, KEY_EVENT_UP);
  1432.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  1433.     SetKeyHandler(mmi_netset_entry_sort_by_default, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1434.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1435. }
  1436. /*****************************************************************************
  1437.  * FUNCTION
  1438.  *  mmi_netset_highlight_sort_by_alphabet
  1439.  * DESCRIPTION
  1440.  *  
  1441.  * PARAMETERS
  1442.  *  void
  1443.  * RETURNS
  1444.  *  void
  1445.  *****************************************************************************/
  1446. void mmi_netset_highlight_sort_by_alphabet(void)
  1447. {
  1448.     /*----------------------------------------------------------------*/
  1449.     /* Local Variables                                                */
  1450.     /*----------------------------------------------------------------*/
  1451.     /*----------------------------------------------------------------*/
  1452.     /* Code Body                                                      */
  1453.     /*----------------------------------------------------------------*/
  1454.     SetLeftSoftkeyFunction(mmi_netset_entry_sort_by_alphabet, KEY_EVENT_UP);
  1455.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  1456.     SetKeyHandler(mmi_netset_entry_sort_by_alphabet, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1457.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1458. }
  1459. /*****************************************************************************
  1460.  * FUNCTION
  1461.  *  mmi_netset_retrieve_current_modes
  1462.  * DESCRIPTION
  1463.  *  
  1464.  * PARAMETERS
  1465.  *  void
  1466.  * RETURNS
  1467.  *  void
  1468.  *****************************************************************************/
  1469. typedef struct _netset_callback_info
  1470. {
  1471.     FuncPtr netset_callback_func;
  1472.     U8 state;
  1473. } NETSETCALLBACKINFO;
  1474. static NETSETCALLBACKINFO mmi_netset_callbacks[] = 
  1475. {
  1476. #if defined(__GSM_RAT__) && defined(__WCDMA_RAT__)
  1477.     {mmi_netset_get_rat_mode_req, 1},
  1478. #endif
  1479. #ifdef __MMI_GPRS_FEATURES__
  1480.     {NETSETGetGPRSModeReq, 1},
  1481. #endif
  1482.     {NULL, 0}                                            /* dummy one, please add callbacks before this entity */
  1483. };
  1484. void mmi_netset_retrieve_current_modes(void)
  1485. {
  1486.     U8 i;
  1487.     for (i = 0; mmi_netset_callbacks[i].netset_callback_func != NULL; i++)
  1488.     {
  1489.         if (mmi_netset_callbacks[i].state)
  1490.         {
  1491.             (*mmi_netset_callbacks[i].netset_callback_func)();
  1492.             mmi_netset_callbacks[i].state = 0;
  1493.             return;
  1494.         }
  1495.     }
  1496.     EntryNETSETMain();
  1497.     for (i = 0; mmi_netset_callbacks[i].netset_callback_func != NULL; i++)
  1498.     {
  1499. mmi_netset_callbacks[i].state = 1;
  1500.     }
  1501. }