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

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.  *   IMIEDownload.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   IMEI download/upload 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. #ifndef _IMEI_DOWNLOAD_H_
  68. #include "IMEIDownload.h"
  69. #endif
  70. #ifndef  _MAN_ACTIVE_H_
  71. #include "man_active.h"
  72. #endif
  73. #ifndef  _MAN_FDM_H_
  74. #include "man_fdm.h"
  75. #endif
  76. //===========================================================================
  77. static CIMEIDOWNLOAD* imei_download_ptr;
  78. static bool g_bIsRunning = false;
  79. //===========================================================================
  80. static void CNF_ReadFromNVRAM(void)
  81. {
  82.     imei_download_ptr->CNF_ReadFromNVRAM();
  83. }
  84. //--------------------------------------------------------------------------
  85. static  void CNF_WriteToNVRAM(void)
  86. {
  87.     imei_download_ptr->CNF_WriteToNVRAM();
  88. }
  89. //--------------------------------------------------------------------------
  90. static void REQ_TimeOut(void)
  91. {
  92.     imei_download_ptr->REQ_TimeOut();
  93. }
  94. //--------------------------------------------------------------------------
  95. static void REQ_Finish(void)
  96. {
  97.     imei_download_ptr->REQ_Finish();
  98. }
  99. //===========================================================================
  100. CIMEIDOWNLOAD::CIMEIDOWNLOAD(void)
  101. {
  102.     g_bIsRunning = false;
  103.     ConfirmCallback = NULL;
  104.     m_iIMEIBufSize = 0;
  105.     m_cIMEIBuf = NULL;
  106. }
  107. //---------------------------------------------------------------------------
  108. CIMEIDOWNLOAD::~CIMEIDOWNLOAD()
  109. {
  110.     if (m_cIMEIBuf)
  111.     {
  112.         delete [] m_cIMEIBuf;
  113.         m_cIMEIBuf = NULL;
  114.     }
  115. }
  116. //---------------------------------------------------------------------------
  117. void CIMEIDOWNLOAD::REQ_Finish(void)
  118. {
  119.     if (!g_bIsRunning)
  120.     {
  121.         return;
  122.     }
  123.     Confirm(METAAPP_SUCCESS);
  124. }
  125. //---------------------------------------------------------------------------
  126. void CIMEIDOWNLOAD::REQ_Stop(void)
  127. {
  128.     if (!g_bIsRunning)
  129.     {
  130.         return;
  131.     }
  132.     Confirm(METAAPP_STOP);
  133. }
  134. //---------------------------------------------------------------------------
  135. void CIMEIDOWNLOAD::REQ_TimeOut(void)
  136. {
  137.     if (!g_bIsRunning)
  138.     {
  139.         return;
  140.     }
  141.     
  142.     Confirm(METAAPP_TIMEOUT);
  143. }
  144. //---------------------------------------------------------------------------
  145. void CIMEIDOWNLOAD::Confirm(E_METAAPP_RESULT_T confirm_state)
  146. {
  147.     if (!g_bIsRunning)
  148.     {
  149.         return;
  150.     }
  151.     g_bIsRunning = false;
  152.     if (NULL == ConfirmCallback)
  153.     {
  154.         return;
  155.     }
  156.     m_eConfirmState = confirm_state;
  157.     ActiveMan->SetActiveFunction(ConfirmCallback);
  158. }
  159. //===========================================================================
  160. void CIMEIDOWNLOAD::REQ_Read_From_NVRAM_Start(void)
  161. {
  162.     imei_download_ptr = this;
  163.     g_bIsRunning = true;
  164.     m_bDownloadTrigger = false;
  165.     REQ_Read_From_NVRAM();
  166. }
  167. //---------------------------------------------------------------------------
  168. void CIMEIDOWNLOAD::REQ_Read_From_NVRAM(void)
  169. {
  170.     if (!g_bIsRunning)
  171.     {
  172.         return;
  173.     }
  174.     if( NULL == m_cIMEIBuf )
  175.     {
  176.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_IMEI_IMEISV_LID",
  177.                                                       &m_iIMEIBufSize);
  178.         if (MetaResult!=META_SUCCESS)
  179.         {
  180.             Confirm(METAAPP_FAIL);
  181.             return;
  182.         }
  183.         m_cIMEIBuf = new char[m_iIMEIBufSize];
  184.     }
  185.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  186.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_IMEI_IMEISV_LID",
  187.                                 1,
  188.                                    m_iIMEIBufSize,
  189.                                    m_cIMEIBuf );
  190. }
  191. //-------------------------------------
  192. void CIMEIDOWNLOAD::CNF_ReadFromNVRAM(void)
  193. {
  194.     if (!g_bIsRunning)
  195.     {
  196.         return;
  197.     }
  198.     E_METAAPP_RESULT_T  state = NVRAMMan->Get_ConfirmState();
  199.     if (METAAPP_SUCCESS == state)
  200.     {
  201.         if (!Decompose_IMEI())
  202.         {
  203.             Confirm(METAAPP_FAIL);
  204.             return;
  205.         }
  206.         if (m_bDownloadTrigger)
  207.         {
  208.             for (int i=0; i<IMEI_ARRAY_LEN; i++)
  209.             {
  210.                 m_sIMEISV.imei[i] = m_sIMEI.c_imei[i];
  211.             }
  212.             REQ_Write_To_NVRAM();
  213.         }
  214.         else
  215.         {
  216.             for (int i=0; i<IMEI_ARRAY_LEN; i++)
  217.             {
  218.                 m_sIMEI.c_imei[i] = m_sIMEISV.imei[i];
  219.             }
  220.             ActiveMan->SetActiveFunction(::REQ_Finish);
  221.         }
  222.     }
  223.     else
  224.     {
  225.         Confirm(state);
  226.     }
  227. }
  228. //===========================================================================
  229. void  CIMEIDOWNLOAD::REQ_Write_To_NVRAM_Start(bool check_checksum)
  230. {
  231.     imei_download_ptr = this;
  232.     g_bIsRunning = true;
  233.     m_bCheckChecksum = check_checksum;
  234.     m_bDownloadTrigger = true;
  235.     REQ_Read_From_NVRAM();
  236. }
  237. //---------------------------------------------------------------------------
  238. void CIMEIDOWNLOAD::REQ_Write_To_NVRAM(void)
  239. {
  240.     if (!g_bIsRunning)
  241.     {
  242.         return;
  243.     }
  244.     if (NULL == m_cIMEIBuf)
  245.     {
  246.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_IMEI_IMEISV_LID", &m_iIMEIBufSize);
  247.         if(MetaResult!=META_SUCCESS)
  248.         {
  249.             Confirm( METAAPP_FAIL );
  250.             return;
  251.         }
  252.         m_cIMEIBuf = new char[m_iIMEIBufSize];
  253.     }
  254.     if (!Compose_IMEI(m_bCheckChecksum))
  255.     {
  256.         Confirm(METAAPP_FAIL);
  257.         return;
  258.     }
  259.     NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  260.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_IMEI_IMEISV_LID",
  261.                                    1,
  262.                                    m_iIMEIBufSize,
  263.                                    m_cIMEIBuf);
  264. }
  265. //-------------------------------------
  266. void  CIMEIDOWNLOAD::CNF_WriteToNVRAM(void)
  267. {
  268.     if (!g_bIsRunning)
  269.     {
  270.         return;
  271.     }
  272.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  273.     Confirm(state);
  274. }
  275. //===========================================================================
  276. bool  CIMEIDOWNLOAD::Compose_IMEI(bool check_checksum)
  277. {
  278.     META_RESULT MetaResult;
  279.     if (check_checksum)
  280.     {
  281.         MetaResult = META_NVRAM_Compose_IMEISV(&m_sIMEISV, m_cIMEIBuf, m_iIMEIBufSize);
  282.     }
  283.     else
  284.     {
  285.         MetaResult = META_NVRAM_Compose_IMEISV_NoCheck(&m_sIMEISV, m_cIMEIBuf, m_iIMEIBufSize);
  286.     }
  287.     if (MetaResult != META_SUCCESS)
  288.     {
  289.         return false;
  290.     }
  291.     return true;
  292. }
  293. //===========================================================================
  294. bool CIMEIDOWNLOAD::Decompose_IMEI(void)
  295. {
  296.     META_RESULT MetaResult =  META_NVRAM_Decompose_IMEISV(&m_sIMEISV, m_cIMEIBuf, m_iIMEIBufSize);
  297.     if (MetaResult != META_SUCCESS)
  298.     {
  299.         return false;
  300.     }
  301.     return true;
  302. }
  303. //===========================================================================
  304. bool CIMEIDOWNLOAD::REQ_Read_From_File(char *filename)
  305. {
  306.     TIniFile   *ini_file;
  307.     AnsiString as_IMEI;
  308.     char *str_IMEI;
  309.     int i;
  310.     ini_file = new TIniFile(filename);
  311.     if( ini_file == NULL )  return false;
  312.     as_IMEI = ini_file->ReadString( "IMEI",
  313.                                     "IMEI",
  314.                                     "FFFFFFFF" );
  315.     strcpy(m_sIMEISV.imei, as_IMEI.c_str());
  316.     for (int i=0; i<IMEI_ARRAY_LEN; i++)
  317.     {
  318.         m_sIMEI.c_imei[i] = m_sIMEISV.imei[i];
  319.     }
  320.     delete  ini_file;
  321.     return true;
  322. }
  323. //===========================================================================
  324. bool  CIMEIDOWNLOAD::REQ_Write_To_File(char *filename)
  325. {
  326.     TIniFile   *ini_file;
  327.     ini_file = new TIniFile(filename);
  328.     if(ini_file == NULL)  return  false;
  329.     ini_file->WriteString("IMEI",
  330.                           "IMEI",
  331.                            m_sIMEISV.imei);
  332.     delete  ini_file;
  333.     return  true;
  334. }
  335. //---------------------------------------------------------------------------
  336. unsigned short CIMEIDOWNLOAD::REQ_NVRAM_Calcualte_IMEI_Spare(char *imei)
  337. {
  338.     unsigned short p_spare;
  339.     META_NVRAM_Calculate_IMEI_CD(imei, &p_spare);
  340.     return p_spare;
  341. }
  342. //===========================================================================
  343. bool CIMEIDOWNLOAD::ImeiSectionExist(char *filename)
  344. {
  345.     TIniFile   *ini_file;
  346.     ini_file = new TIniFile(filename);
  347.     if (NULL == ini_file)
  348.     {
  349.         return false;
  350.     }
  351.     if (!ini_file->SectionExists("IMEI"))
  352.     {
  353.         return false;
  354.     }
  355.     return true;
  356. }
  357. //===========================================================================
  358. ////////////////////////////  Global information  ///////////////////////////
  359. //===========================================================================
  360. E_METAAPP_RESULT_T CIMEIDOWNLOAD::Get_ConfirmState(void)
  361. {
  362.     return  m_eConfirmState;
  363. }
  364. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  365. S_IMEI_T* CIMEIDOWNLOAD::Get_IMEI(void)
  366. {
  367.     return &m_sIMEI;
  368. }
  369. //---------------------------------------------------------------------------
  370. void CIMEIDOWNLOAD::Set_IMEI(S_IMEI_T imei)
  371. {
  372.     m_sIMEI = imei;
  373.     for (int i=0; i<IMEI_ARRAY_LEN; i++)
  374.     {
  375.         m_sIMEISV.imei[i] = m_sIMEI.c_imei[i];
  376.     }
  377. }