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

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_crystal_cfg.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Crystal configuration 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 <Classes.hpp>
  66. #include <inifiles.hpp>
  67. #include <dialogs.hpp>
  68. #pragma hdrstop
  69. #include "meta_const.h"
  70. #include "meta_utils.h"
  71. #include "META_crystal_cfg.h"
  72. //----------------------------------------------------------------------------
  73. __fastcall TMETA_crystal_cfg::TMETA_crystal_cfg()
  74. {
  75. }
  76. //----------------------------------------------------------------------------
  77. __fastcall TMETA_crystal_cfg::~TMETA_crystal_cfg()
  78. {
  79.     // Agilent 8960 initialization
  80.     as_8960_GPIB_Addr.~AnsiString();
  81.     // CMU 200 initialization
  82.     as_CMU200_GPIB_Addr.~AnsiString();
  83.     as_FreqBank.~AnsiString();
  84.     as_GSM400_PCL.~AnsiString();
  85.     as_GSM400_MAX_P.~AnsiString();
  86.     as_GSM400_WANTED_P.~AnsiString();
  87.     as_GSM400_MIN_P.~AnsiString();
  88.     as_GSM400_C.~AnsiString();
  89.     as_GSM850_PCL.~AnsiString();
  90.     as_GSM850_MAX_P.~AnsiString();
  91.     as_GSM850_WANTED_P.~AnsiString();
  92.     as_GSM850_MIN_P.~AnsiString();
  93.     as_GSM850_C.~AnsiString();
  94.     as_GSM900_PCL.~AnsiString();
  95.     as_GSM900_MAX_P.~AnsiString();
  96.     as_GSM900_WANTED_P.~AnsiString();
  97.     as_GSM900_MIN_P.~AnsiString();
  98.     as_GSM900_C.~AnsiString();
  99.     as_DCS1800_PCL.~AnsiString();
  100.     as_DCS1800_MAX_P.~AnsiString();
  101.     as_DCS1800_WANTED_P.~AnsiString();
  102.     as_DCS1800_MIN_P.~AnsiString();
  103.     as_DCS1800_C.~AnsiString();
  104.     as_PCS1900_PCL.~AnsiString();
  105.     as_PCS1900_MAX_P.~AnsiString();
  106.     as_PCS1900_WANTED_P.~AnsiString();
  107.     as_PCS1900_MIN_P.~AnsiString();
  108.     as_PCS1900_C.~AnsiString();
  109. }
  110. //----------------------------------------------------------------------------
  111. bool TMETA_crystal_cfg::getGPIB_Addr(AnsiString &as)
  112. {
  113.     as = as_8960_GPIB_Addr;
  114.     return true;
  115. }
  116. //=============================================================================
  117. bool TMETA_crystal_cfg::getTimeOut(int &i)
  118. {
  119.     i = i_TimeOut;
  120.     return true;
  121. }
  122. //=============================================================================
  123. bool TMETA_crystal_cfg::getGSM400_CableLoss( double &d) // dB
  124. {
  125.     d = d_GSM400_CL;
  126.     return true;
  127. }
  128. //=============================================================================
  129. bool TMETA_crystal_cfg::getGSM850_CableLoss( double &d) // dB
  130. {
  131.     d = d_GSM850_CL;
  132.     return true;
  133. }
  134. //=============================================================================
  135. bool TMETA_crystal_cfg::getGSM900_CableLoss( double &d) // dB
  136. {
  137.     d = d_GSM900_CL;
  138.     return true;
  139. }
  140. //=============================================================================
  141. bool TMETA_crystal_cfg::getDCS1800_CableLoss( double &d) // dB
  142. {
  143.     d = d_DCS1800_CL;
  144.     return true;
  145. }
  146. //=============================================================================
  147. bool TMETA_crystal_cfg::getPCS1900_CableLoss( double &d) // dB
  148. {
  149.     d = d_PCS1900_CL;
  150.     return true;
  151. }
  152. //***************************************************************************
  153. // CMU200 Initialization
  154. //----------------------------------------------------------------------------
  155. bool TMETA_crystal_cfg::getCMU200_GPIB_Addr(AnsiString &as)
  156. {
  157.     as = as_CMU200_GPIB_Addr;
  158.     return true;
  159. }
  160. //=============================================================================
  161. bool TMETA_crystal_cfg::getCMU200_TimeOut(int &i)
  162. {
  163.     i = i_CMU200_TimeOut;
  164.     return true;
  165. }
  166. //=============================================================================
  167. bool TMETA_crystal_cfg::getCMU200_INPUT_GSM400_CableLoss( double &d) // dB
  168. {
  169.     d = d_CMU200_INPUT_GSM400_CL;
  170.     return true;
  171. }
  172. //=============================================================================
  173. bool TMETA_crystal_cfg::getCMU200_INPUT_GSM850_CableLoss( double &d) // dB
  174. {
  175.     d = d_CMU200_INPUT_GSM850_CL;
  176.     return true;
  177. }
  178. //=============================================================================
  179. bool TMETA_crystal_cfg::getCMU200_INPUT_GSM900_CableLoss( double &d) // dB
  180. {
  181.     d = d_CMU200_INPUT_GSM900_CL;
  182.     return true;
  183. }
  184. //=============================================================================
  185. bool TMETA_crystal_cfg::getCMU200_INPUT_DCS1800_CableLoss( double &d) // dB
  186. {
  187.     d = d_CMU200_INPUT_DCS1800_CL;
  188.     return true;
  189. }
  190. //=============================================================================
  191. bool TMETA_crystal_cfg::getCMU200_INPUT_PCS1900_CableLoss( double &d) // dB
  192. {
  193.     d = d_CMU200_INPUT_PCS1900_CL;
  194.     return true;
  195. }
  196. //=============================================================================
  197. bool TMETA_crystal_cfg::getCMU200_OUTPUT_GSM400_CableLoss( double &d) // dB
  198. {
  199.     d = d_CMU200_OUTPUT_GSM400_CL;
  200.     return true;
  201. }
  202. //=============================================================================
  203. bool TMETA_crystal_cfg::getCMU200_OUTPUT_GSM850_CableLoss( double &d) // dB
  204. {
  205.     d = d_CMU200_OUTPUT_GSM850_CL;
  206.     return true;
  207. }
  208. //=============================================================================
  209. bool TMETA_crystal_cfg::getCMU200_OUTPUT_GSM900_CableLoss( double &d) // dB
  210. {
  211.     d = d_CMU200_OUTPUT_GSM900_CL;
  212.     return true;
  213. }
  214. //=============================================================================
  215. bool TMETA_crystal_cfg::getCMU200_OUTPUT_DCS1800_CableLoss( double &d) // dB
  216. {
  217.     d = d_CMU200_OUTPUT_DCS1800_CL;
  218.     return true;
  219. }
  220. //=============================================================================
  221. bool TMETA_crystal_cfg::getCMU200_OUTPUT_PCS1900_CableLoss( double &d) // dB
  222. {
  223.     d = d_CMU200_OUTPUT_PCS1900_CL;
  224.     return true;
  225. }
  226. //=============================================================================
  227. bool TMETA_crystal_cfg::getFreqBank(AnsiString &as)
  228. {
  229.     as = as_FreqBank;
  230.     return true;
  231. }
  232. //=============================================================================
  233. bool TMETA_crystal_cfg::getARFCN_C0_GSM850(short &s)
  234. {
  235.     s = m_sARFCN_C0_GSM850;
  236.     return true;
  237. }
  238. //=============================================================================
  239. bool TMETA_crystal_cfg::getARFCN_C0_GSM(short &s)
  240. {
  241.     s = m_sARFCN_C0_GSM;
  242.     return true;
  243. }
  244. //=============================================================================
  245. bool TMETA_crystal_cfg::getARFCN_C0_DCS(short &s)
  246. {
  247.     s = m_sARFCN_C0_DCS;
  248.     return true;
  249. }
  250. //=============================================================================
  251. bool TMETA_crystal_cfg::getARFCN_C0_PCS(short &s)
  252. {
  253.     s = m_sARFCN_C0_PCS;
  254.     return true;
  255. }
  256. //=============================================================================
  257. bool TMETA_crystal_cfg::getP_DL(double &d)
  258. {
  259.     d = d_P_DL;
  260.     return true;
  261. }
  262. //=============================================================================
  263. bool TMETA_crystal_cfg::getN_PM(short &i)
  264. {
  265.     i = i_N_PM;
  266.     return true;
  267. }
  268. //=============================================================================
  269. bool TMETA_crystal_cfg::getM_PM(char &c)
  270. {
  271.     c = c_M_PM;
  272.     return true;
  273. }
  274. //=============================================================================
  275. ///////////////////////////////    AFC    /////////////////////////////////////
  276. //=============================================================================
  277. //=============================================================================
  278. bool TMETA_crystal_cfg::getAFC_BAND(AnsiString &as)
  279. {
  280.     as = as_AFC_BAND;
  281.     return true;
  282. }
  283. //=============================================================================
  284. bool TMETA_crystal_cfg::getAFC_ARFCN(short &s)
  285. {
  286.     s = m_sAFC_ARFCN;
  287.     return true;
  288. }
  289. //=============================================================================
  290. bool TMETA_crystal_cfg::getN_AFC(short &s)
  291. {
  292.     s = m_sN_AFC;
  293.     return true;
  294. }
  295. //=============================================================================
  296. bool TMETA_crystal_cfg::getDAC1(int &i)
  297. {
  298.     i = i_DAC1;
  299.     return true;
  300. }
  301. //=============================================================================
  302. bool TMETA_crystal_cfg::getDAC2( int &i)
  303. {
  304.     i = i_DAC2;
  305.     return true;
  306. }
  307. //=============================================================================
  308. bool TMETA_crystal_cfg::getGSM400_PCL( AnsiString &as)
  309. {
  310.     as = as_GSM400_PCL;
  311.     return true;
  312. }
  313. //=============================================================================
  314. bool TMETA_crystal_cfg::getGSM400_MAX_P( AnsiString &as)
  315. {
  316.     as = as_GSM400_MAX_P;
  317.     return true;
  318. }
  319. //=============================================================================
  320. bool TMETA_crystal_cfg::getGSM400_WANTED_P( AnsiString &as)
  321. {
  322.     as = as_GSM400_WANTED_P;
  323.     return true;
  324. }
  325. //=============================================================================
  326. bool TMETA_crystal_cfg::getGSM400_MIN_P( AnsiString &as)
  327. {
  328.     as = as_GSM400_MIN_P;
  329.     return true;
  330. }
  331. //=============================================================================
  332. bool TMETA_crystal_cfg::getGSM400_C( AnsiString &as)
  333. {
  334.     as = as_GSM400_C;
  335.     return true;
  336. }
  337. //=============================================================================
  338. //=============================================================================
  339. bool TMETA_crystal_cfg::getGSM850_PCL( AnsiString &as)
  340. {
  341.     as = as_GSM850_PCL;
  342.     return true;
  343. }
  344. //=============================================================================
  345. bool TMETA_crystal_cfg::getGSM850_MAX_P( AnsiString &as)
  346. {
  347.     as = as_GSM850_MAX_P;
  348.     return true;
  349. }
  350. //=============================================================================
  351. bool TMETA_crystal_cfg::getGSM850_WANTED_P( AnsiString &as)
  352. {
  353.     as = as_GSM850_WANTED_P;
  354.     return true;
  355. }
  356. //=============================================================================
  357. bool TMETA_crystal_cfg::getGSM850_MIN_P( AnsiString &as)
  358. {
  359.     as = as_GSM850_MIN_P;
  360.     return true;
  361. }
  362. //=============================================================================
  363. bool TMETA_crystal_cfg::getGSM850_C( AnsiString &as)
  364. {
  365.     as = as_GSM850_C;
  366.     return true;
  367. }
  368. //=============================================================================
  369. //=============================================================================
  370. bool TMETA_crystal_cfg::getGSM900_PCL( AnsiString &as)
  371. {
  372.     as = as_GSM900_PCL;
  373.     return true;
  374. }
  375. //=============================================================================
  376. bool TMETA_crystal_cfg::getGSM900_MAX_P( AnsiString &as)
  377. {
  378.     as = as_GSM900_MAX_P;
  379.     return true;
  380. }
  381. //=============================================================================
  382. bool TMETA_crystal_cfg::getGSM900_WANTED_P( AnsiString &as)
  383. {
  384.     as = as_GSM900_WANTED_P;
  385.     return true;
  386. }
  387. //=============================================================================
  388. bool TMETA_crystal_cfg::getGSM900_MIN_P( AnsiString &as)
  389. {
  390.     as = as_GSM900_MIN_P;
  391.     return true;
  392. }
  393. //=============================================================================
  394. bool TMETA_crystal_cfg::getGSM900_C( AnsiString &as)
  395. {
  396.     as = as_GSM900_C;
  397.     return true;
  398. }
  399. //=============================================================================
  400. //=============================================================================
  401. bool TMETA_crystal_cfg::getDCS1800_PCL( AnsiString &as)
  402. {
  403.     as = as_DCS1800_PCL;
  404.     return true;
  405. }
  406. //=============================================================================
  407. bool TMETA_crystal_cfg::getDCS1800_MAX_P( AnsiString &as)
  408. {
  409.     as = as_DCS1800_MAX_P;
  410.     return true;
  411. }
  412. //=============================================================================
  413. bool TMETA_crystal_cfg::getDCS1800_WANTED_P( AnsiString &as)
  414. {
  415.     as = as_DCS1800_WANTED_P;
  416.     return true;
  417. }
  418. //=============================================================================
  419. bool TMETA_crystal_cfg::getDCS1800_MIN_P( AnsiString &as)
  420. {
  421.     as = as_DCS1800_MIN_P;
  422.     return true;
  423. }
  424. //=============================================================================
  425. bool TMETA_crystal_cfg::getDCS1800_C( AnsiString &as)
  426. {
  427.     as = as_DCS1800_C;
  428.     return true;
  429. }
  430. //=============================================================================
  431. //=============================================================================
  432. bool TMETA_crystal_cfg::getPCS1900_PCL( AnsiString &as)
  433. {
  434.     as = as_PCS1900_PCL;
  435.     return true;
  436. }
  437. //=============================================================================
  438. bool TMETA_crystal_cfg::getPCS1900_MAX_P( AnsiString &as)
  439. {
  440.     as = as_PCS1900_MAX_P;
  441.     return true;
  442. }
  443. //=============================================================================
  444. bool TMETA_crystal_cfg::getPCS1900_WANTED_P( AnsiString &as)
  445. {
  446.     as = as_PCS1900_WANTED_P;
  447.     return true;
  448. }
  449. //=============================================================================
  450. bool TMETA_crystal_cfg::getPCS1900_MIN_P( AnsiString &as)
  451. {
  452.     as = as_PCS1900_MIN_P;
  453.     return true;
  454. }
  455. //=============================================================================
  456. bool TMETA_crystal_cfg::getPCS1900_C( AnsiString &as)
  457. {
  458.     as = as_PCS1900_C;
  459.     return true;
  460. }
  461. //=============================================================================
  462. //=============================================================================
  463. bool TMETA_crystal_cfg::getTSC( char &c)
  464. {
  465.     c = c_TSC;
  466.     return true;
  467. }
  468. //=============================================================================
  469. bool TMETA_crystal_cfg::getN_TX(int &i)
  470. {
  471.     i = i_N_TX;
  472.     return true;
  473. }
  474. //=============================================================================
  475. bool TMETA_crystal_cfg::getTXlevelRecursiveTimes(int &i)
  476. {
  477.     i = i_RecursiveTimes;
  478.     return true;
  479. }
  480. //=============================================================================
  481. bool TMETA_crystal_cfg::getAPC_Delta(double &d)
  482. {
  483.     d = d_APC_Delta;
  484.     return true;
  485. }
  486. //=============================================================================
  487. bool TMETA_crystal_cfg::ReadFromIniFile(AnsiString as)
  488. {
  489.     TIniFile *ini;
  490.     ini = new TIniFile(as);
  491.     if (NULL == ini)
  492.     {
  493.         return false;
  494.     }
  495.     // Agilent 8960
  496.     as_8960_GPIB_Addr = ini->ReadString("8960 Initialization",
  497.                                         "8960 GPIB Address",
  498.                                         "GPIB0::15::INSTR"
  499.                                         );
  500.     i_TimeOut = ini->ReadInteger("8960 Initialization",
  501.                                  "Time Out",
  502.                                  10000
  503.                                  );
  504.     // dB
  505.     AnsiString as_loss;
  506.     as_loss = ini->ReadString("8960 Initialization",
  507.                               "GSM400 cable loss",
  508.                               "-0.5"
  509.                               );
  510.     d_GSM400_CL = atof(as_loss.c_str());
  511.     as_loss = ini->ReadString("8960 Initialization",
  512.                              "GSM850 cable loss",
  513.                              "-0.5"
  514.                              );
  515.     d_GSM850_CL = atof(as_loss.c_str());
  516.     as_loss = ini->ReadString("8960 Initialization",
  517.                                  "GSM900 cable loss",
  518.                                  "-0.5"
  519.                                  );
  520.     d_GSM900_CL = atof(as_loss.c_str());
  521.     as_loss = ini->ReadString("8960 Initialization",
  522.                                    "DCS1800 cable loss",
  523.                                    "-1.0"
  524.                                    );
  525.     d_DCS1800_CL = atof(as_loss.c_str());
  526.     as_loss = ini->ReadString("8960 Initialization",
  527.                                   "PCS1900 cable loss",
  528.                                   "-1.0"
  529.                                   );
  530.     d_PCS1900_CL = atof(as_loss.c_str());
  531.     
  532.     // CMU200 Initialization
  533.     as_CMU200_GPIB_Addr = ini->ReadString("CMU200 Initialization",
  534.                                           "CMU200 GPIB Address",
  535.                                           "GPIB0::20::INSTR"
  536.                                           );
  537.     i_CMU200_TimeOut = ini->ReadInteger("CMU200 Initialization",
  538.                                         "Time Out",
  539.                                         7000
  540.                                        );
  541.     // cable loss
  542.     as_loss = ini->ReadString("CMU200 Initialization",
  543.                               "GSM400 input cable loss",
  544.                               "1.0"
  545.                               );
  546.     d_CMU200_INPUT_GSM400_CL = atof(as_loss.c_str());
  547.     as_loss = ini->ReadString("CMU200 Initialization",
  548.                               "GSM850 input cable loss",
  549.                               "1.0"
  550.                               );
  551.     d_CMU200_INPUT_GSM850_CL = atof(as_loss.c_str());
  552.     as_loss = ini->ReadString("CMU200 Initialization",
  553.                               "GSM900 input cable loss",
  554.                               "1.2"
  555.                               );
  556.     d_CMU200_INPUT_GSM900_CL = atof(as_loss.c_str());
  557.     as_loss = ini->ReadString("CMU200 Initialization",
  558.                               "DCS1800 input cable loss",
  559.                               "1.8"
  560.                               );
  561.     d_CMU200_INPUT_DCS1800_CL = atof(as_loss.c_str());
  562.     as_loss = ini->ReadString("CMU200 Initialization",
  563.                               "PCS1900 input cable loss",
  564.                               "1.8"
  565.                               );
  566.     d_CMU200_INPUT_PCS1900_CL = atof(as_loss.c_str());
  567.     as_loss = ini->ReadString("CMU200 Initialization",
  568.                               "GSM400 output cable loss",
  569.                               "1.0"
  570.                               );
  571.     d_CMU200_OUTPUT_GSM400_CL = atof(as_loss.c_str());
  572.     as_loss = ini->ReadString("CMU200 Initialization",
  573.                               "GSM850 output cable loss",
  574.                               "1.0"
  575.                               );
  576.     d_CMU200_OUTPUT_GSM850_CL = atof(as_loss.c_str());
  577.     as_loss = ini->ReadString("CMU200 Initialization",
  578.                               "GSM900 output cable loss",
  579.                               "1.2"
  580.                               );
  581.     d_CMU200_OUTPUT_GSM900_CL = atof(as_loss.c_str());
  582.     as_loss = ini->ReadString("CMU200 Initialization",
  583.                               "DCS1800 output cable loss",
  584.                               "1.8"
  585.                               );
  586.     d_CMU200_OUTPUT_DCS1800_CL = atof(as_loss.c_str());
  587.     as_loss = ini->ReadString("CMU200 Initialization",
  588.                               "PCS1900 output cable loss",
  589.                               "1.8"
  590.                               );
  591.     d_CMU200_OUTPUT_PCS1900_CL = atof(as_loss.c_str());
  592.     AnsiString as_P_DL = ini->ReadString("Downlink power",
  593.                                     "P_DL",
  594.                                     "-60"
  595.                                    );
  596.     d_P_DL = atof(as_P_DL.c_str());
  597.     delete ini;
  598.     return true;
  599. }  // function
  600. //=============================================================================
  601. //------------------------------------------------------------------------------
  602.  bool TMETA_crystal_cfg::is_MAX_WANTED_MIN_P_valid()
  603.  {
  604.     // PCL: GSM450,850,900 5~19  // total:15
  605.     // PCL: DCS1800,PCS1900 0~15  // total:16
  606.     AnsiString sub_max_p, sub_wanted_p, sub_min_p;
  607.     ///////////////////////////////////////////////////////////////////////////
  608.     if (IsFreqBankSupported( as_FreqBank, FrequencyBand850))
  609.     {
  610.        for (int I=1; I<=15; I++)
  611.        {
  612.           if(! getAnsiStrSubItem( as_GSM850_MAX_P, I,
  613.                                   DEFAULT_SEP_CHAR, sub_max_p ))
  614.           {
  615.              ShowMessage("Config file read GSM850_MAX_P fail.");
  616.              return false;
  617.           }
  618.           if(! getAnsiStrSubItem( as_GSM850_MIN_P, I,
  619.                                   DEFAULT_SEP_CHAR, sub_min_p ))
  620.           {
  621.              ShowMessage("Config file read GSM850_MIN_P fail.");
  622.              return false;
  623.           }
  624.           if(! getAnsiStrSubItem( as_GSM850_WANTED_P, I,
  625.                                   DEFAULT_SEP_CHAR, sub_wanted_p ))
  626.           {
  627.              ShowMessage("Config file read GSM850_WANTED_P fail.");
  628.              return false;
  629.           }
  630.           if (atof(sub_min_p.c_str()) > atof(sub_max_p.c_str()))
  631.           {
  632.              ShowMessage("Config file: GSM850_MIN_P must <= GSM850_MAX_P.");
  633.              return false;
  634.           }
  635.           if (atof(sub_wanted_p.c_str()) > atof(sub_max_p.c_str()))
  636.           {
  637.              ShowMessage("Config file: GSM850_WANTED_P must <= GSM850_MAX_P.");
  638.              return false;
  639.           }
  640.           if (atof(sub_wanted_p.c_str()) < atof(sub_min_p.c_str()))
  641.           {
  642.              ShowMessage("Config file: GSM850_WANTED_P must >= GSM850_MIN_P.");
  643.              return false;
  644.           }
  645.        } // for
  646.     } // if
  647.     ////////////////////////////////////////////////////////////////////////////
  648.     if ( IsFreqBankSupported( as_FreqBank, FrequencyBand900))
  649.     {
  650.        for (int I=1; I<=15; I++)
  651.        {
  652.           if(! getAnsiStrSubItem( as_GSM900_MAX_P, I,
  653.                                   DEFAULT_SEP_CHAR, sub_max_p ))
  654.           {
  655.              ShowMessage("Config file read GSM900_MAX_P fail.");
  656.              return false;
  657.           }
  658.           if(! getAnsiStrSubItem( as_GSM900_MIN_P, I,
  659.                                   DEFAULT_SEP_CHAR, sub_min_p ))
  660.           {
  661.              ShowMessage("Config file read GSM900_MIN_P fail.");
  662.              return false;
  663.           }
  664.           if(! getAnsiStrSubItem( as_GSM900_WANTED_P, I,
  665.                                   DEFAULT_SEP_CHAR, sub_wanted_p ))
  666.           {
  667.              ShowMessage("Config file read GSM900_WANTED_P fail.");
  668.              return false;
  669.           }
  670.           if (atof(sub_min_p.c_str()) > atof(sub_max_p.c_str()))
  671.           {
  672.              ShowMessage("Config file: GSM900_MIN_P must < GSM900_MAX_P.");
  673.              return false;
  674.           }
  675.           if (atof(sub_wanted_p.c_str()) > atof(sub_max_p.c_str()))
  676.           {
  677.              ShowMessage("Config file: GSM900_WANTED_P must <= GSM900_MAX_P.");
  678.              return false;
  679.           }
  680.           if (atof(sub_wanted_p.c_str()) < atof(sub_min_p.c_str()))
  681.           {
  682.              ShowMessage("Config file: GSM900_WANTED_P must >= GSM900_MIN_P.");
  683.              return false;
  684.           }
  685.        } // for
  686.     } // if
  687.     ////////////////////////////////////////////////////////////////////////////
  688.     if ( IsFreqBankSupported( as_FreqBank, FrequencyBand1800))
  689.     {
  690.        for (int I=1; I<=16; I++)
  691.        {
  692.           if(! getAnsiStrSubItem( as_DCS1800_MAX_P, I,
  693.                                   DEFAULT_SEP_CHAR, sub_max_p ))
  694.           {
  695.              ShowMessage("Config file read DCS1800_MAX_P fail.");
  696.              return false;
  697.           }
  698.           if(! getAnsiStrSubItem( as_DCS1800_MIN_P, I,
  699.                                   DEFAULT_SEP_CHAR, sub_min_p ))
  700.           {
  701.              ShowMessage("Config file read DCS1800_MIN_P fail.");
  702.              return false;
  703.           }
  704.           if(! getAnsiStrSubItem( as_DCS1800_WANTED_P, I,
  705.                                   DEFAULT_SEP_CHAR, sub_wanted_p ))
  706.           {
  707.              ShowMessage("Config file read DCS1800_WANTED_P fail.");
  708.              return false;
  709.           }
  710.           if (atof(sub_min_p.c_str()) > atof(sub_max_p.c_str()))
  711.           {
  712.              ShowMessage("Config file: DCS1800_MIN_P must < DCS1800_MAX_P.");
  713.              return false;
  714.           }
  715.           if (atof(sub_wanted_p.c_str()) > atof(sub_max_p.c_str()))
  716.           {
  717.              ShowMessage("Config file: DCS1800_WANTED_P must <= DCS1800_MAX_P.");
  718.              return false;
  719.           }
  720.           if (atof(sub_wanted_p.c_str()) < atof(sub_min_p.c_str()))
  721.           {
  722.              ShowMessage("Config file: DCS1800_WANTED_P must >= DCS1800_MIN_P.");
  723.              return false;
  724.           }
  725.        } // for
  726.     } // if
  727.     ////////////////////////////////////////////////////////////////////////////
  728.     if ( IsFreqBankSupported( as_FreqBank, FrequencyBand1900))
  729.     {
  730.        for (int I=1; I<=16; I++)
  731.        {
  732.           if(! getAnsiStrSubItem( as_PCS1900_MAX_P, I,
  733.                                   DEFAULT_SEP_CHAR, sub_max_p ))
  734.           {
  735.              ShowMessage("Config file read PCS1900_MAX_P fail.");
  736.              return false;
  737.           }
  738.           if(! getAnsiStrSubItem( as_PCS1900_MIN_P, I,
  739.                                   DEFAULT_SEP_CHAR, sub_min_p ))
  740.           {
  741.              ShowMessage("Config file read PCS1900_MIN_P fail.");
  742.              return false;
  743.           }
  744.           if(! getAnsiStrSubItem( as_PCS1900_WANTED_P, I,
  745.                                   DEFAULT_SEP_CHAR, sub_wanted_p ))
  746.           {
  747.              ShowMessage("Config file read PCS1900_WANTED_P fail.");
  748.              return false;
  749.           }
  750.           if (atof(sub_min_p.c_str()) > atof(sub_max_p.c_str()))
  751.           {
  752.              ShowMessage("Config file: PCS1900_MIN_P must < PCS1900_MAX_P.");
  753.              return false;
  754.           }
  755.           if (atof(sub_wanted_p.c_str()) > atof(sub_max_p.c_str()))
  756.           {
  757.              ShowMessage("Config file: PCS1900_WANTED_P must <= PCS1900_MAX_P.");
  758.              return false;
  759.           }
  760.           if (atof(sub_wanted_p.c_str()) < atof(sub_min_p.c_str()))
  761.           {
  762.              ShowMessage("Config file: PCS1900_WANTED_P must >= PCS1900_MIN_P.");
  763.              return false;
  764.           }
  765.        } // for
  766.     } // if
  767.     ////////////////////////////////////////////////////////////////////////////
  768.     return true;
  769.  }
  770. //------------------------------------------------------------------------------