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

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.  *   META_utils.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  META utility 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. //---------------------------------------------------------------------------
  66. #include <system.hpp>
  67. #include <dstring.h>
  68. //#include <assert.h>
  69. #include <stdio.h>
  70. #include "age1960.h"
  71. #pragma hdrstop
  72. #ifndef  _CMU200_H_
  73. #include "cmu200.h"
  74. #endif
  75. #include "meta_utils.h"
  76. #include "meta_msg.h"
  77. //------------------------------------------------------------------------------
  78. #define MAX_FILE_NAME_LENGTH 255
  79. //------------------------------------------------------------------------------
  80. //------------------------------------------------------------------------------
  81. bool getAnsiStrSubItem( const AnsiString as_Src, const int index,
  82.                      const char cSep, AnsiString &as_SubStr)
  83. {                 // index start from 1
  84.     AnsiString as_tmp=as_Src;
  85.     AnsiString as_tmp2=as_Src;
  86.     AnsiString as_Result;
  87.     int i_begin;
  88.     int i_end;
  89.     int count=0;
  90.     if ( as_Src.AnsiCompare("") == 0 )
  91.     {
  92.         as_SubStr = "";
  93.         return false;
  94.     }
  95.     i_begin = as_tmp.AnsiPos( AnsiString( cSep ));
  96.     if ( i_begin == 0)
  97.     {
  98.         as_SubStr = "";
  99.         return false;
  100.     }
  101.     if ( index == 1 )
  102.     {
  103.         as_SubStr = as_tmp.SubString(1, i_begin-1 );
  104.         return true;
  105.     }
  106.     if ( count == index-1 )
  107.     {
  108.         i_begin = 0;
  109.     }
  110.     for( int i=1; i<= as_Src.Length(); i++)
  111.     {
  112.         if ( as_Src[i] == cSep)
  113.         {
  114.             count ++;
  115.             if ( count == index-1 )
  116.             {
  117.                 i_begin = i;
  118.             }
  119.             if ( count == index )
  120.             {
  121.                 i_end = i;
  122.             }
  123.         }
  124.     }
  125.     as_SubStr = as_tmp.SubString(i_begin+1, i_end-i_begin-1 );
  126.     if( as_SubStr.AnsiCompare("") == 0 )
  127.     {
  128.         return  false;
  129.     }
  130.     return true;
  131. /*
  132.     as_tmp2 = as_tmp.SubString( i_begin,
  133.     as_tmp = as_tmp.SubString( i_begin,
  134. */
  135. }
  136. //-----------------------------------------------------------------------------
  137.  /* Power */ int Convert_PCL_to_dBm( FrequencyBand band, int txPower )
  138. {
  139.    static const char powerLevelTodBm[3][32] =
  140.    {
  141.       /* GSM 400, GSM 850, GSM 900 */
  142.       { 39,39,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11, 9, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 },
  143.       /* DCS 1800 */
  144.       { 30,28,26,24,22,20,18,16,14,12,10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,36,34,32 },
  145.       /* PCS 1900 */
  146.       { 30,28,26,24,22,20,18,16,14,12,10, 8, 6, 4, 2, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,33,32 }
  147.    };
  148.    static const bandToTableIndex[FrequencyBandCount] =
  149.    {
  150.       0, /* FrequencyBand400 */
  151.       0, /* FrequencyBand850 */
  152.       0, /* FrequencyBand900 */
  153.       1, /* FrequencyBand1800 */
  154.       2  /* FrequencyBand1900 */
  155.    };
  156.    return powerLevelTodBm[ bandToTableIndex[band] ][ txPower ];
  157. }
  158. //---------------------------------------------------------------------------
  159.  /* PCL */ int Convert_dBm_to_PCL( FrequencyBand band, int power )
  160. {
  161.    power = ( power + 1 ) / 2;
  162.    if ( band <= FrequencyBand900 ) return (22 - power);
  163.    if ( power >= 16 ) return (47 - power);
  164.    return (15 - power);
  165. }
  166. //---------------------------------------------------------------------------
  167. bool getPathFromStr( AnsiString asStr, AnsiString &asPath )
  168. {
  169.     int iLD = asStr.LastDelimiter(":\");
  170.     if (iLD <= 0)
  171.       return false;
  172.     asPath = asStr.SubString( 1, iLD );
  173.     return true;
  174. }
  175. //---------------------------------------------------------------------------
  176. bool getDriveFromStr( AnsiString asStr, AnsiString &asDrive )
  177. {
  178.     int iLD = asStr.LastDelimiter(":\");
  179.     if (iLD <= 0)
  180.       return false;
  181.     asDrive = asStr.SubString( 1, iLD );
  182.     return true;
  183. }
  184. //---------------------------------------------------------------------------
  185. bool getDriveLetterFromStr( AnsiString asStr, AnsiString &asDriveLetter )
  186. {
  187.     asDriveLetter = asStr.SubString( 1, 1 );
  188.     return true;
  189. }
  190. //---------------------------------------------------------------------------
  191. bool getFilenameFromStr( AnsiString asStr, AnsiString &asFileName )
  192. {
  193.     int iLD = asStr.LastDelimiter("\");
  194.     if (iLD <= 0)
  195.       return false;
  196.     asFileName = asStr.SubString( iLD+1, MAX_FILE_NAME_LENGTH );
  197.     return true;
  198. }
  199. //---------------------------------------------------------------------------
  200. bool getIntegrityFromStr( AnsiString asStr, AnsiString &asIntegrity )
  201. {
  202.     int iLD = asStr.LastDelimiter(",");
  203.     if (iLD <= 0)
  204.       return false;
  205.     asIntegrity = asStr.SubString( 1, iLD-1 );
  206.     return true;
  207. }
  208. //---------------------------------------------------------------------------
  209. bool getEpskIntegrityFromStr( AnsiString asStr, AnsiString &asIntegrity )
  210. {
  211.     int iLD = asStr.LastDelimiter(",");
  212.     if (iLD <= 0)
  213.       return false;
  214.     asStr = asStr.SubString( 1, iLD-1 );
  215.     iLD = asStr.LastDelimiter(",");
  216.     asIntegrity = asStr.SubString( 1, iLD-1 );
  217.     return true;
  218. }
  219. //---------------------------------------------------------------------------
  220. bool getTxPowerFromStr( AnsiString asStr, AnsiString &asTxPower )
  221. {
  222.     int iLD = asStr.LastDelimiter(",");
  223.     if (iLD <= 0)
  224.       return false;
  225.     asTxPower = asStr.SubString( iLD+1, asStr.Length() );
  226.     return true;
  227. }
  228. //---------------------------------------------------------------------------
  229. bool getEpskTxPowerFromStr( AnsiString asStr, AnsiString &asTxPower )
  230. {
  231.     int iLD = asStr.LastDelimiter(",");
  232.     if (iLD <= 0)
  233.       return false;
  234.     asTxPower = asStr.SubString( iLD+1, asStr.Length() );
  235.     return true;
  236. }
  237. //---------------------------------------------------------------------------
  238. bool getBaseFromStr( AnsiString asStr, AnsiString &asBase )
  239. {
  240.     int iLD = asStr.LastDelimiter("E");
  241.     if (iLD <= 0)
  242.       return false;
  243.     asBase = asStr.SubString( 1, iLD-1 );
  244.     return true;
  245. }
  246. //---------------------------------------------------------------------------
  247. bool getEpskBaseFromStr( AnsiString asStr, AnsiString &asBase )
  248. {
  249.     int iLD = asStr.LastDelimiter("E");
  250.     if (iLD <= 0)
  251.       return false;
  252.     asBase = asStr.SubString( 1, iLD-1 );
  253.     return true;
  254. }
  255. //---------------------------------------------------------------------------
  256. bool getExponentFromStr( AnsiString asStr, AnsiString &asExponent )
  257. {
  258.     int iLD = asStr.LastDelimiter("E");
  259.     if (iLD <= 0)
  260.       return false;
  261.     asExponent = asStr.SubString( iLD+1, asStr.Length() );
  262.     return true;
  263. }
  264. //---------------------------------------------------------------------------
  265. bool getEpskExponentFromStr( AnsiString asStr, AnsiString &asExponent )
  266. {
  267.     int iLD = asStr.LastDelimiter("E");
  268.     if (iLD <= 0)
  269.       return false;
  270.     asExponent = asStr.SubString( iLD+1, asStr.Length() );
  271.     return true;
  272. }
  273. //---------------------------------------------------------------------------
  274. bool getTaModelFromStr( AnsiString asStr, AnsiString &asTaModel )
  275. {
  276.     int iLD = asStr.LastDelimiter(""");
  277.     if (iLD <= 0)
  278.       return false;
  279.     asTaModel = asStr.SubString( 2, iLD-2 );
  280.     return true;
  281. }
  282. //-----------------------------------------------------------------------------
  283.  bool withPath( AnsiString asPath )
  284.  {
  285.     if ( asPath.LastDelimiter(":\") > 0 )
  286.       return true;
  287.     else
  288.       return false;
  289.  }
  290. //-----------------------------------------------------------------------------
  291.  bool getStrAFromStrAB( AnsiString StrAB, char c_SEP, AnsiString &StrA  )
  292.  {
  293.     int iLD = StrAB.LastDelimiter(c_SEP);
  294.     if ( iLD > 0 )
  295.     {
  296.        StrA = StrAB.SubString( 0,  iLD-1);
  297.        return true;
  298.     }
  299.     else
  300.       return false;
  301.  }
  302. //-----------------------------------------------------------------------------
  303. long filesize(FILE *stream)
  304. {
  305.    long curpos, length;
  306.    curpos = ftell(stream);
  307.    fseek(stream, 0L, SEEK_END);
  308.    length = ftell(stream);
  309.    fseek(stream, curpos, SEEK_SET);
  310.    return length;
  311. }
  312. //-----------------------------------------------------------------------------
  313. bool change_file_name(AnsiString &as_FileName)
  314. {
  315.    AnsiString as;
  316.    int i_dot = as_FileName.LastDelimiter(".");
  317.    int i_slash =  as_FileName.LastDelimiter(":\");
  318.    char c;
  319.    int pos;
  320.    if (
  321.          ((i_dot > i_slash) && (i_dot > 1)) ||
  322.          ( i_dot == 0 )  // only main file name
  323.       )
  324.    {
  325.          if ((i_dot > i_slash) && (i_dot > 1))
  326.            pos = i_dot-1;
  327.          else
  328.            pos = as_FileName.Length();
  329.          as = as_FileName.LowerCase();
  330.          c = as[pos];
  331.          switch ( c)
  332.          {
  333.             case '0': case '1': case '2':
  334.             case '3': case '4': case '5':
  335.             case '6': case '7': case '8':
  336.                  as_FileName[pos] = (char)(c+1);
  337.             return true;
  338.             case '9':
  339.                  as_FileName[pos] = 'a';
  340.             return true;
  341.             case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  342.             case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  343.             case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  344.             case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  345.             case 'y':
  346.                  as_FileName[pos] = (char)(c+1);
  347.                  return true;
  348.             case 'z':
  349.             default :
  350.                  as_FileName[pos] = '0';
  351.             return true;
  352.          } // switch
  353.    }
  354.    return false;
  355. }
  356. //------------------------------------------------------------------------------
  357.   bool IsFreqBankSupported( AnsiString &asFreqBank, FrequencyBand fb)
  358.   {
  359.      int i = asFreqBank.ToInt();
  360.      switch ( fb)
  361.      {
  362. case FrequencyBand850:
  363.              if (i & 0x02)
  364.                return true;
  365.              else
  366.                return false;
  367. case FrequencyBand900:
  368.              if (i & 0x04)
  369.                return true;
  370.              else
  371.                return false;
  372. case FrequencyBand1800:
  373.              if (i & 0x08)
  374.                return true;
  375.              else
  376.                return false;
  377. case FrequencyBand1900:
  378.              if (i & 0x10)
  379.                return true;
  380.              else
  381.                return false;
  382.         default:
  383.         return false;
  384.      } // switch
  385. }
  386. //------------------------------------------------------------------------------
  387. bool IsCmuBandSupported( AnsiString &asCmuBand, int fb)
  388. {
  389.      int i = asCmuBand.ToInt();
  390.      switch ( fb )
  391.      {
  392. case CMU_GSM850_BAND:
  393.         {
  394.              if (i & 0x02)
  395.                return true;
  396.              else
  397.                return false;
  398.         }
  399. case CMU_PGSM_BAND:
  400.         case CMU_EGSM_BAND:
  401.         {
  402.              if (i & 0x04)
  403.                return true;
  404.              else
  405.                return false;
  406.         }
  407. case CMU_DCS1800_BAND:
  408.         {
  409.              if (i & 0x08)
  410.                return true;
  411.              else
  412.                return false;
  413.         }
  414. case CMU_PCS1900_BAND:
  415.         {
  416.              if (i & 0x10)
  417.                return true;
  418.              else
  419.                return false;
  420.         }
  421.         default:
  422.             return false;
  423.      } // switch
  424. }
  425. //------------------------------------------------------------------------------
  426. bool getBand_Range_from_AnsiStr( AnsiString as,
  427.                                    AnsiString &as_Band,
  428.                                    AnsiString &as_Range,
  429.                                    AnsiString &as_up_down )
  430.   {
  431.     if ( as.Pos("GSM400") != 0 )
  432.       as_Band = "GSM400";
  433.     else if ( as.Pos("GSM850") != 0 )
  434.       as_Band = "GSM850";
  435.     else if ( as.Pos("GSM900") != 0 )
  436.       as_Band = "GSM900";
  437.     else if ( as.Pos("DCS1800") != 0 )
  438.       as_Band = "DCS1800";
  439.     else if ( as.Pos("PCS1900") != 0 )
  440.       as_Band = "PCS1900";
  441.     else
  442.       return false;
  443.     if ( as.Pos("Range0") != 0 )
  444.       as_Range = "Range0";
  445.     else if ( as.Pos("Range1") != 0 )
  446.       as_Range = "Range1";
  447.     else if ( as.Pos("Range2") != 0 )
  448.       as_Range = "Range2";
  449.     else if ( as.Pos("Range3") != 0 )
  450.       as_Range = "Range3";
  451.     else
  452.       return false;
  453.     if ( as.Pos("up") != 0 )
  454.     {
  455.       as_up_down = "up";
  456.       return true;
  457.     }
  458.     else if ( as.Pos("down") != 0 )
  459.     {
  460.       as_up_down = "down";
  461.       return true;
  462.     }
  463.     else
  464.       return false;
  465. }
  466. //------------------------------------------------------------------------------
  467. bool getCOMIndex( AnsiString asStr, int *COMIndex )
  468. {
  469.     int iLD;
  470.     asStr = asStr.LowerCase();
  471.     iLD = asStr.LastDelimiter("com");
  472.     if (iLD <= 0)
  473.       return false;
  474.     *COMIndex = (asStr.SubString( iLD+1, 1 )).ToInt();
  475.     return true;
  476. }
  477. // EOF