setting_band.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:19k
源码类别:

MTK

开发平台:

C++ Builder

  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.  *   setting_band.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  band setting source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. #include <IniFiles.hpp>
  66. #pragma hdrstop
  67. #include "setting_band.h"
  68. #include "man_active.h"
  69. #include "man_fdm.h"
  70. //===========================================================================
  71. static CSETTINGBAND*  setting_band_ptr;
  72. static bool g_bIsRunning;
  73. //===========================================================================
  74. static  void  CNF_ReadFromNVRAM( void )
  75. {
  76.     setting_band_ptr->CNF_ReadFromNVRAM( );
  77. }
  78. //---------------------------------------------------------------------------
  79. static  void  CNF_WriteToNVRAM(void)
  80. {
  81.     setting_band_ptr->CNF_WriteToNVRAM();
  82. }
  83. //-------------------------------------------------------------------------
  84. static  void  CNF_ResetNVRAMData( void )
  85. {
  86.     setting_band_ptr->CNF_ResetNVRAMData( );
  87. }
  88. //===========================================================================
  89. CSETTINGBAND::CSETTINGBAND( void )
  90. {
  91.    g_bIsRunning = false;
  92.    ConfirmCallback = 0;
  93.    
  94. }
  95. //---------------------------------------------------------------------------
  96. CSETTINGBAND::~CSETTINGBAND( )
  97. {
  98.    
  99. }
  100. //---------------------------------------------------------------------------
  101. void CSETTINGBAND::Confirm(E_METAAPP_RESULT_T confirm_state)
  102. {
  103.     if (!g_bIsRunning)
  104.     {
  105.         return;
  106.     }
  107.     g_bIsRunning = false;
  108.     if (NULL == ConfirmCallback)
  109.     {
  110.         return;
  111.     }
  112.     m_eConfirmState = confirm_state;
  113.     ActiveMan->SetActiveFunction(ConfirmCallback);
  114. }
  115. //===========================================================================
  116. bool CSETTINGBAND::Decompose_SettingBand(void)
  117. {
  118.     META_RESULT MetaResult;
  119.     // band
  120.     //MetaResult = META_NVRAM_GetRecFieldValue( "NVRAM_EF_RAC_PREFERENCE_LID",
  121.     //                                          "band",
  122.     //                                          m_cBuf,
  123.     //                                          m_iBufSize,
  124.     //                                          &m_sNvramEfRacPreference.band,
  125.     //                                          sizeof(m_sNvramEfRacPreference.band)
  126.     //                                        );
  127.     //if(MetaResult!=META_SUCCESS)  return false;
  128.     // uc_arg1
  129.     MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_RAC_PREFERENCE_LID",
  130.                                               "arg1",
  131.                                               m_cBuf,
  132.                                               m_iBufSize,
  133.                                               &m_sNvramEfRacPreference.uc_arg1,
  134.                                               sizeof(m_sNvramEfRacPreference.uc_arg1)
  135.                                             );
  136.     if (MetaResult != META_SUCCESS)
  137.     {
  138.         return false;
  139.     }
  140.     return true;
  141. }
  142. //---------------------------------------------------------------------------
  143. bool CSETTINGBAND::Compose_SettingBand(void)
  144. {
  145.     META_RESULT  MetaResult;
  146.     // band
  147.    // MetaResult = META_NVRAM_SetRecFieldValue( "NVRAM_EF_RAC_PREFERENCE_LID",
  148.    //                                           "band",
  149.    //                                           m_cBuf,
  150.    //                                           m_iBufSize,
  151.    //                                           &m_sNvramEfRacPreference.band,
  152.    //                                           sizeof(m_sNvramEfRacPreference.band) );
  153.    //
  154.    // if(MetaResult!=META_SUCCESS)  return(false);
  155.     // uc_arg1
  156.     MetaResult = META_NVRAM_SetRecFieldValue( "NVRAM_EF_RAC_PREFERENCE_LID",
  157.                                               "arg1",
  158.                                               m_cBuf,
  159.                                               m_iBufSize,
  160.                                               &m_sNvramEfRacPreference.uc_arg1,
  161.                                               sizeof(m_sNvramEfRacPreference.uc_arg1) );
  162.     if (MetaResult != META_SUCCESS)
  163.     {
  164.         return false;
  165.     }
  166.     return true;
  167. }
  168. //===========================================================================
  169. void CSETTINGBAND::REQ_Read_From_NVRAM_Start(void)
  170. {
  171.     setting_band_ptr = this;
  172.     g_bIsRunning = true;
  173.     m_bDownloadTrigger = false;
  174.     REQ_Read_From_NVRAM();
  175. }
  176. //---------------------------------------------------------------------------
  177. void CSETTINGBAND::REQ_Read_From_NVRAM(void)
  178. {
  179.     if (NULL == m_cBuf)
  180.     {
  181.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_RAC_PREFERENCE_LID",
  182.                                           &m_iBufSize );
  183.         if (MetaResult != META_SUCCESS)
  184.         {
  185.             Confirm( METAAPP_FAIL );
  186.             return;
  187.         }
  188.         m_cBuf = new  char[m_iBufSize];
  189.     }
  190.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  191.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_RAC_PREFERENCE_LID",
  192.                                   1,
  193.                                    m_iBufSize,
  194.                                    m_cBuf );
  195. }
  196. //-------------------------------------
  197. void  CSETTINGBAND::CNF_ReadFromNVRAM(void)
  198. {
  199.     if (!g_bIsRunning)
  200.     {
  201.         return;
  202.     }
  203.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  204.     if (METAAPP_SUCCESS == state)
  205.     {
  206.         if (m_bDownloadTrigger)
  207.         {
  208.             REQ_Write_To_NVRAM();
  209.         }
  210.         else
  211.         {
  212.             if (!Decompose_SettingBand())
  213.             {
  214.                 Confirm(METAAPP_FAIL);
  215.                 return;
  216.             }
  217.             Confirm(METAAPP_SUCCESS);
  218.         }
  219.     }
  220.     else
  221.     {
  222.         Confirm(state);
  223.     }
  224. }
  225. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  226. void CSETTINGBAND::REQ_Write_To_NVRAM_Start(void)
  227. {
  228.     setting_band_ptr = this;
  229.     g_bIsRunning = true;
  230.     m_bDownloadTrigger = true;
  231.     REQ_Read_From_NVRAM();
  232. }
  233. //------------------------------------------------------------------------------
  234. void  CSETTINGBAND::REQ_Write_To_NVRAM(void)
  235. {
  236.     if (NULL == m_cBuf)
  237.     {
  238.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_RAC_PREFERENCE_LID",
  239.                                            &m_iBufSize);
  240.         if (MetaResult != META_SUCCESS)
  241.         {
  242.             Confirm(METAAPP_FAIL);
  243.             return;
  244.         }
  245.         m_cBuf = new char[m_iBufSize];
  246.     }
  247.     if (!Compose_SettingBand())
  248.     {
  249.         Confirm(METAAPP_FAIL);
  250.         return;
  251.     }
  252.     NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  253.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_RAC_PREFERENCE_LID",
  254.                             1,
  255.                                     m_iBufSize,
  256.                                     m_cBuf );
  257. }
  258. //-------------------------------------
  259. void CSETTINGBAND::CNF_WriteToNVRAM(void)
  260. {
  261.     if (!g_bIsRunning)
  262.     {
  263.         return;
  264.     }
  265.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  266.     Confirm(state);
  267. }
  268. //===========================================================================
  269. bool CSETTINGBAND::REQ_Read_From_File(char *filename)
  270. {
  271.     TIniFile   *ini_file;
  272.     AnsiString  as_str;
  273.     ini_file = new TIniFile(filename);
  274.     if (NULL == ini_file)
  275.     {
  276.         return false;
  277.     }
  278.     //as_str = ini_file->ReadString( "RAC preference setting",
  279.     //                               "band",
  280.     //                               "GSM 900" );
  281.     //m_sNvramEfRacPreference.band = Get_SettingBand( as_str );
  282.     as_str = ini_file->ReadString( "RAC preference setting",
  283.                                    "PLMN selection",
  284.                                    "Automatic" );
  285.     m_sNvramEfRacPreference.uc_arg1 = (m_sNvramEfRacPreference.uc_arg1 & (0xFF ^ MASK_ARG1_PLMN_SELECTION)) | Get_SettingPlmnSelection( as_str );
  286.     as_str = ini_file->ReadString( "RAC preference setting",
  287.                                    "Mobile class",
  288.                                    "Class B(GSM)" );
  289.     m_sNvramEfRacPreference.uc_arg1 = (m_sNvramEfRacPreference.uc_arg1 & (0xFF ^ MASK_ARG1_MOBILE_CLASS)) | Get_SettingMsClass( as_str );
  290.     as_str = ini_file->ReadString( "RAC preference setting",
  291.                                    "GPRS attach mode",
  292.                                    "Auto" );
  293.     m_sNvramEfRacPreference.uc_arg1 = (m_sNvramEfRacPreference.uc_arg1 & (0xFF ^ MASK_ARG1_GPRS_ATTACH)) | Get_SettingGprsAttachMode( as_str );
  294.     delete  ini_file;
  295.     return  true;
  296. }
  297. //------------------------------------------------------------------------
  298. bool   CSETTINGBAND::REQ_Write_To_File( char *filename )
  299. {
  300.     TIniFile   *ini_file;
  301.     AnsiString as_band;
  302.     AnsiString as_PlmnSelection;
  303.     AnsiString as_MsClass;
  304.     AnsiString as_GprsAttachMode;
  305.     
  306.     //unsigned char band = m_sNvramEfRacPreference.band;
  307.     unsigned char plmn_sel = m_sNvramEfRacPreference.uc_arg1 & MASK_ARG1_PLMN_SELECTION;
  308.     unsigned char ms_class = m_sNvramEfRacPreference.uc_arg1 & MASK_ARG1_MOBILE_CLASS;
  309.     unsigned char gprs_attach = m_sNvramEfRacPreference.uc_arg1 & MASK_ARG1_GPRS_ATTACH;
  310.     ini_file = new TIniFile(filename );
  311.     if (NULL == ini_file)
  312.     {
  313.         return  false;
  314.     }
  315.                                                            
  316.     //Set_SettingBand( band, as_band );
  317.     //ini_file->WriteString( "RAC preference setting",
  318.     //                       "band",
  319.     //                       as_band
  320.     //                     );
  321.     Set_SettingPlmnSelection( plmn_sel, as_PlmnSelection );
  322.     ini_file->WriteString( "RAC preference setting",
  323.                            "PLMN selection",
  324.                            as_PlmnSelection
  325.                          );
  326.     Set_SettingMsClass( ms_class, as_MsClass );
  327.     ini_file->WriteString( "RAC preference setting",
  328.                            "Mobile class",
  329.                            as_MsClass
  330.                          );
  331.     Set_SettingGprsAttachMode( gprs_attach, as_GprsAttachMode );
  332.     ini_file->WriteString( "RAC preference setting",
  333.                            "GPRS attach mode",
  334.                            as_GprsAttachMode
  335.                          );
  336.     delete  ini_file;
  337.     return  true;
  338. }
  339. //==============================================================================
  340. int  CSETTINGBAND::Get_SettingBand( AnsiString as_str )
  341. {
  342.     int band = BAND_MODE_GSM900;
  343.     if( as_str.AnsiCompareIC( "GSM 900" ) == 0 )
  344.     {
  345.         band = BAND_MODE_GSM900;
  346.     }
  347.     else if( as_str.AnsiCompareIC( "DCS 1800" ) == 0 )
  348.     {
  349.         band = BAND_MODE_DCS1800;
  350.     }
  351.     else if( as_str.AnsiCompareIC( "PCS 1900" ) == 0 )
  352.     {
  353.         band = BAND_MODE_PCS1900;
  354.     }
  355.     else if( as_str.AnsiCompareIC( "GSM 850" ) == 0 )
  356.     {
  357.         band = BAND_MODE_GSM850;
  358.     }
  359.     else if( as_str.AnsiCompareIC( "Dual band (GSM 900 and DCS 1800)" ) == 0 )
  360.     {
  361.         band = DUAL_BAND_MODE;
  362.     }
  363.     else if( as_str.AnsiCompareIC( "Dual band (GSM 850 and PCS 1900)" ) == 0 )
  364.     {
  365.         band = DUAL_BAND_MODE_850_1900;
  366.     }
  367.     return band;
  368. }
  369. //---------------------------------------------------------------------------
  370. bool  CSETTINGBAND::Set_SettingBand(unsigned char band, AnsiString &as_str )
  371. {
  372.     switch( band )
  373.     {
  374.         case BAND_MODE_GSM900:
  375.              as_str = "GSM 900";
  376.         break;
  377.         case BAND_MODE_DCS1800:
  378.              as_str = "DCS 1800";
  379.         break;
  380.         case BAND_MODE_PCS1900:
  381.              as_str = "PCS 1900";
  382.         break;
  383.         case BAND_MODE_GSM850:
  384.              as_str = "GSM 850";
  385.         break;
  386.         case DUAL_BAND_MODE:
  387.              as_str = "Dual band (GSM 900 and DCS 1800)";
  388.         break;
  389.         case DUAL_BAND_MODE_850_1900:
  390.              as_str = "Dual band (GSM 850 and PCS 1900)";
  391.         break;
  392.         default:
  393.              return false;
  394.     }
  395.     return true;
  396. }
  397. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  398. int  CSETTINGBAND::Get_SettingPlmnSelection( AnsiString as_str )
  399. {
  400.     int plmn_sel;
  401.     if( as_str.AnsiCompareIC( "Manual" ) == 0 )
  402.     {
  403.         plmn_sel = ARG1_PLMN_SELECTION_MANUAL;
  404.     }
  405.     else if( as_str.AnsiCompareIC( "Automatic" ) == 0 )
  406.     {
  407.         plmn_sel = ARG1_PLMN_SELECTION_AUTO;
  408.     }
  409.     return plmn_sel;
  410. }
  411. //---------------------------------------------------------------------------
  412. bool  CSETTINGBAND::Set_SettingPlmnSelection(unsigned char plmn_sel, AnsiString &as_str )
  413. {
  414.     switch( plmn_sel )
  415.     {
  416.         case ARG1_PLMN_SELECTION_MANUAL:
  417.              as_str = "Manual";
  418.         break;
  419.         case ARG1_PLMN_SELECTION_AUTO:
  420.              as_str = "Automatic";
  421.         break;
  422.         default:
  423.              return false;
  424.     }
  425.     return true;
  426. }
  427. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  428. int  CSETTINGBAND::Get_SettingMsClass( AnsiString as_str )
  429. {
  430.     int ms_class;
  431.     if( as_str.AnsiCompareIC( "Class CC" ) == 0 )
  432.     {
  433.         ms_class = ARG1_MOBILE_CLASS_CC;
  434.     }
  435.     else if( as_str.AnsiCompareIC( "Class CG" ) == 0 )
  436.     {
  437.         ms_class = ARG1_MOBILE_CLASS_CG;
  438.     }
  439.     else if( as_str.AnsiCompareIC( "Class B(GSM)" ) == 0 )
  440.     {
  441.         ms_class = ARG1_MOBILE_CLASS_BGSM;
  442.     }
  443.     else if( as_str.AnsiCompareIC( "Class B(GPRS)" ) == 0 )
  444.     {
  445.         ms_class = ARG1_MOBILE_CLASS_BGPRS;
  446.     }
  447.     return ms_class;
  448. }
  449. //---------------------------------------------------------------------------
  450. bool  CSETTINGBAND::Set_SettingMsClass( unsigned char ms_class, AnsiString &as_str )
  451. {
  452.     switch( ms_class )
  453.     {
  454.         case ARG1_MOBILE_CLASS_CC:
  455.              as_str = "Class CC";
  456.         break;
  457.         case ARG1_MOBILE_CLASS_CG:
  458.              as_str = "Class CG";
  459.         break;
  460.         case ARG1_MOBILE_CLASS_BGSM:
  461.              as_str = "Class B(GSM)";
  462.         break;
  463.         case ARG1_MOBILE_CLASS_BGPRS:
  464.              as_str = "Class B(GPRS)";
  465.         break;
  466.         default:
  467.              return false;
  468.     }
  469.     return true;
  470. }
  471. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  472. int  CSETTINGBAND::Get_SettingGprsAttachMode( AnsiString as_str )
  473. {
  474.     int gprs_attach_mode;
  475.     if( as_str.AnsiCompareIC( "Auto" ) == 0 )
  476.     {
  477.         gprs_attach_mode = ARG1_GPRS_ATTACH_AUTO;
  478.     }
  479.     else if( as_str.AnsiCompareIC( "Not auto" ) == 0 )
  480.     {
  481.         gprs_attach_mode = ARG1_GPRS_ATTACH_NOTAUTO;
  482.     }
  483.     return gprs_attach_mode;
  484. }
  485. //---------------------------------------------------------------------------
  486. bool  CSETTINGBAND::Set_SettingGprsAttachMode( unsigned char gprs_attach_mode, AnsiString &as_str )
  487. {
  488.     switch( gprs_attach_mode )
  489.     {
  490.         case ARG1_GPRS_ATTACH_AUTO:
  491.              as_str = "Auto";
  492.         break;
  493.         case ARG1_GPRS_ATTACH_NOTAUTO:
  494.              as_str = "Not auto";
  495.         break;
  496.         default:
  497.              return false;
  498.     }
  499.     return true;
  500. }
  501. //===========================================================================
  502. void  CSETTINGBAND::REQ_Reset_NVRAM_Data( void )
  503. {
  504.     setting_band_ptr = this;
  505.     g_bIsRunning = true;
  506.     NVRAMMan->ConfirmCallback = ::CNF_ResetNVRAMData;
  507.     NVRAMMan->REQ_ResetNVRAMData_Start("NVRAM_EF_RAC_PREFERENCE_LID");
  508. }
  509. //-------------------------------------
  510. void  CSETTINGBAND::CNF_ResetNVRAMData( void )
  511. {
  512.     if (!g_bIsRunning)
  513.     {
  514.         return;
  515.     }
  516.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  517.     Confirm(state);
  518. }
  519. //===========================================================================
  520. /////////////////////////  Global information  //////////////////////////////
  521. //===========================================================================
  522. E_METAAPP_RESULT_T CSETTINGBAND::Get_ConfirmState(void)
  523. {
  524.     return  m_eConfirmState;
  525. }
  526. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  527. void  CSETTINGBAND::Get_RacPreference(S_NVRAM_EF_RAC_PREFERENCE_T &rac_preference)
  528. {
  529.     rac_preference = m_sNvramEfRacPreference;
  530. }
  531. //----------------------------------------------------------------------------
  532. void CSETTINGBAND::Set_RacPreference(S_NVRAM_EF_RAC_PREFERENCE_T rac_preference)
  533. {
  534.      m_sNvramEfRacPreference = rac_preference;
  535. }