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

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.  *   Age1968a.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Agilent 1968A software 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. #include <vcl.h>
  66. #include <math.h>
  67. #include "visatype.h"
  68. #include "visa.h"
  69. #include "age1960.h"
  70. #pragma hdrstop
  71. #include "man_dll.h"
  72. #include "meta_utils.h"
  73. #include "meta_msg.h"
  74. #include "Age1968A.h"
  75. #include "AgeCommon.h"
  76. #ifndef  _VISA_COMMON_H_
  77. #include "visa_common.h"
  78. #endif
  79. // misc
  80. #ifndef  _FT_UTILS_H_
  81. #include "ft_utils.h"
  82. #endif
  83. #ifndef  _GSM_UTILS_H_
  84. #include "gsm_utils.h"
  85. #endif
  86. #pragma package(smart_init)
  87. //---------------------------------------------------------------------------
  88. ViStatus age1968A_operatingMode(ViSession vi, E_AGE_OPERATING_MODE OperatingMode)
  89. {
  90.     AnsiString asOperatingMode;
  91.     ViStatus vistat;
  92.     switch (OperatingMode)
  93.     {
  94.         case OPERATING_MODE_ACTIVE:
  95.         {
  96.             asOperatingMode = "CALL:OPERating:MODE CALL";
  97.         }
  98.         break;
  99.         case OPERATING_MODE_GSM_CW:
  100.         {
  101.             asOperatingMode = "CALL:OPERating:MODE CW";
  102.         }
  103.         break;
  104.         case OPERATING_MODE_GSM_BCH:
  105.         {
  106.             asOperatingMode = "CALL:OPERating:MODE GBTest";
  107.         }
  108.         break;
  109.         case OPERATING_MODE_GSM_BCH_TCH:
  110.         {
  111.              asOperatingMode = "CALL:OPERATING:MODE GBTTest";
  112.         }
  113.         break;
  114.         case OPERATING_MODE_GPRS_BCH:
  115.         {
  116.              asOperatingMode = "CALL:OPERATING:MODE PBTest";
  117.         }
  118.         break;
  119.         case OPERATING_MODE_GPRS_BCH_PDTCH:
  120.         {
  121.              asOperatingMode = "CALL:OPERATING:MODE PBPTest";
  122.         }
  123.         break;
  124.         case OPERATING_MODE_EGPRS_BCH:
  125.         {
  126.              asOperatingMode = "CALL:OPERATING:MODE EBTest";
  127.         }
  128.         break;
  129.         case OPERATING_MODE_EGPRS_BCH_PDTCH:
  130.         {
  131.              asOperatingMode = "CALL:OPERATING:MODE EBPTest";
  132.         }
  133.         break;
  134.         default:
  135.         {
  136.              asOperatingMode = "CALL:OPERATING:MODE GBTTest";
  137.         }
  138.         break;
  139.     }
  140.     vistat = age1960_cmd(vi, asOperatingMode.c_str());
  141.     if (vistat != VI_SUCCESS)
  142.     {
  143.         return vistat;
  144.     }
  145.     return VI_SUCCESS;
  146. }
  147. //===========================================================================
  148. ////////////////////////////    CW mode      ////////////////////////////////
  149. //===========================================================================
  150. ViStatus age1968A_cellPower_CW(ViSession vi, double dBm)
  151. {
  152.     AnsiString as_cmd = "CALL:POWer:CW " + Double_To_AnsiString(dBm);
  153.     ViStatus vistat = age1960_cmd(vi, as_cmd.c_str());
  154.     if (vistat != VI_SUCCESS)
  155.     {
  156.         return vistat;
  157.     }
  158.     return VI_SUCCESS;
  159. }
  160. //---------------------------------------------------------------------------
  161. ViStatus age1968A_GenFreq_CW(ViSession vi, FrequencyBand FreqBand, short arfcn)
  162. {
  163.     double d_CenterFreq;
  164.     getCenterFreq(FreqBand, arfcn, false, &d_CenterFreq);
  165.     AnsiString as_cmd = "CALL:CELL:RFGENERATOR:FREQUENCY:SELECTED " + Double_To_AnsiString(d_CenterFreq) + "MHZ";
  166.     ViStatus vistat = age1960_cmd(vi, as_cmd.c_str());
  167.     if (vistat != VI_SUCCESS)
  168.     {
  169.         return vistat;
  170.     }
  171.     return VI_SUCCESS;
  172. }
  173. //===========================================================================
  174. /////////////////////////          PDTCH     ////////////////////////////////
  175. //===========================================================================
  176. ViStatus age1968A_PDTCHMSTargetPower(ViSession vi, double dBm)
  177. {
  178.     AnsiString as_cmd;
  179.     ViStatus vistat;
  180.     as_cmd = "RFAN:CONT:POW:AUTO OFF";
  181.     vistat = age1960_cmd(vi,as_cmd.c_str());
  182.     if (vistat != VI_SUCCESS)
  183.     {
  184.         return vistat;
  185.     }
  186.     as_cmd = "RFAN:MAN:POW:BURS " + Double_To_AnsiString(dBm);
  187.     vistat = age1960_cmd(vi,as_cmd.c_str());
  188.     if (vistat != VI_SUCCESS)
  189.     {
  190.         return vistat;
  191.     }
  192.     
  193.     return VI_SUCCESS;
  194. }
  195. //---------------------------------------------------------------------------
  196. ViStatus age1968A_PDTCHMSTxLevel(ViSession vi, int i_PCL)
  197. {
  198.     AnsiString as_cmd;
  199.     ViStatus vistat;
  200.     as_cmd = "RFAN:CONT:POW:AUTO ON";
  201.     vistat = age1960_cmd(vi,as_cmd.c_str());
  202.     if (vistat != VI_SUCCESS)
  203.     {
  204.         return vistat;
  205.     }
  206.     as_cmd = "CALL:PDTCH:MS:TXLevel:BURSt " + IntToStr(i_PCL);
  207.     vistat = age1960_cmd(vi,as_cmd.c_str());
  208.     if (vistat != VI_SUCCESS)
  209.     {
  210.         return vistat;
  211.     }
  212.     return VI_SUCCESS;
  213. }
  214. //---------------------------------------------------------------------------
  215. ViStatus age1968A_PDTCHARFCN(ViSession vi, short s_ARFCN)
  216. {
  217.     AnsiString as_cmd;
  218.     ViStatus vistat;
  219.     as_cmd = "CALL:PDTCH:ARFCn:SELected " + IntToStr(s_ARFCN);
  220.     vistat = age1960_cmd( vi,as_cmd.c_str());
  221.     if (vistat != VI_SUCCESS)
  222.     {
  223.         return vistat;
  224.     }
  225.     return VI_SUCCESS;
  226. }
  227. //===========================================================================
  228. //////////////////////////////// TX power  //////////////////////////////////
  229. //===========================================================================
  230. ViStatus age1968A_Config_ExpectedTxPower(ViSession vi, bool b_auto_control, double d_expected_power)
  231. {
  232.     AnsiString as_cmd;
  233.     ViStatus vistat;
  234.     if (b_auto_control)
  235.     {
  236.         as_cmd = "RFANalyzer:CONTrol:POWer:AUTO ON";
  237.         vistat = age1960_cmd( vi,as_cmd.c_str());
  238.         if (vistat != VI_SUCCESS)
  239.         {
  240.             return vistat;
  241.         }
  242.     }
  243.     else
  244.     {
  245.         as_cmd = "RFANalyzer:CONTrol:POWer:AUTO OFF";
  246.         vistat = age1960_cmd(vi,as_cmd.c_str());
  247.         if (vistat != VI_SUCCESS)
  248.         {
  249.             return vistat;
  250.         }
  251.         as_cmd = "RFANalyzer:MANual:POWer:BURSt " + Double_To_AnsiString(d_expected_power);
  252.         vistat = age1960_cmd(vi,as_cmd.c_str());
  253.         if (vistat != VI_SUCCESS)
  254.         {
  255.             return vistat;
  256.         }
  257.     }
  258.     return VI_SUCCESS;
  259. }
  260. //--------------------------------------------------------------------------
  261. ViStatus age1968A_initMeasFcn_EGPRS_TXPOWER(ViSession vi)
  262. {
  263.     AnsiString as_cmd;
  264.     ViStatus vistat;
  265.     as_cmd = "INITIATE:ETXPOWER";
  266.     vistat = age1960_cmd( vi,as_cmd.c_str());
  267.     if (vistat != VI_SUCCESS)
  268.     {
  269.         return vistat;
  270.     }
  271.     return VI_SUCCESS;
  272. }
  273. //---------------------------------------------------------------------------
  274. ViStatus age1968A_TXPowerContOn(ViSession vi)
  275. {
  276.     AnsiString as_cmd;
  277.     ViStatus vistat;
  278.     as_cmd = "SET:TXPower:CONT ON";
  279.     vistat = age1960_cmd(vi, as_cmd.c_str());
  280.     if (vistat != VI_SUCCESS)
  281.     {
  282.         return vistat;
  283.     }
  284.     return VI_SUCCESS;
  285. }
  286. //---------------------------------------------------------------------------
  287. ViStatus age1968A_TXPowerContOff(ViSession vi)
  288. {
  289.     AnsiString as_cmd;
  290.     ViStatus vistat;
  291.     as_cmd = "SET:TXPower:CONT OFF";
  292.     vistat = age1960_cmd(vi, as_cmd.c_str());
  293.     if (vistat != VI_SUCCESS)
  294.     {
  295.         return vistat;
  296.     }
  297.     return VI_SUCCESS;
  298. }
  299. //---------------------------------------------------------------------------
  300. ViStatus age1968A_EPSK_TXPowerContOn(ViSession vi)
  301. {
  302.     AnsiString as_cmd;
  303.     ViStatus vistat;
  304.     as_cmd = "SET:ETXPower:CONT ON";
  305.     vistat = age1960_cmd(vi, as_cmd.c_str());
  306.     if (vistat != VI_SUCCESS)
  307.     {
  308.         return vistat;
  309.     }
  310.     return VI_SUCCESS;
  311. }
  312. //---------------------------------------------------------------------------
  313. ViStatus age1968A_EPSK_TXPowerContOff(ViSession vi)
  314. {
  315.     AnsiString as_cmd;
  316.     ViStatus vistat;
  317.     as_cmd = "SET:ETXPower:CONT OFF";
  318.     vistat = age1960_cmd(vi, as_cmd.c_str());
  319.     if (vistat != VI_SUCCESS)
  320.     {
  321.         return vistat;
  322.     }
  323.     return VI_SUCCESS;
  324. }
  325. //---------------------------------------------------------------------------
  326. ViStatus age1968A_ConfigTxPower(ViSession vi, int iMeasureCount, int iTriSour, int iDelay, int iTriQual, int iTimeout)
  327. {
  328.     AnsiString asTXPowerSnum, asTXPowerTriSour, asTXPowerTimeout, asTXPowerDelay, asTXPowerTriQual;
  329.     ViStatus vistat;
  330.     // set measurecount
  331.     asTXPowerSnum = "SETUP:TXPOWER:COUNT:SNUMBER " + IntToStr(iMeasureCount);
  332.     vistat = age1960_cmd(vi,asTXPowerSnum.c_str());
  333.     if (vistat != VI_SUCCESS)
  334.     {
  335.         return vistat;
  336.     }
  337.     // triger source
  338.     switch (iTriSour)
  339.     {
  340.       case age1960_TRIG_AUTO:
  341.         {
  342.           asTXPowerTriSour = "SETUP:TXPOWER:TRIGGER:SOURCE AUTO";
  343.         }
  344.       break;
  345.       case age1960_TRIG_PROT:
  346.         {
  347.           asTXPowerTriSour = "SETUP:TXPOWER:TRIGGER:SOURCE PROTocol";
  348.         }
  349.       break;
  350.       case age1960_TRIG_RF_RISE:
  351.         {
  352.           asTXPowerTriSour = "SETUP:TXPOWER:TRIGGER:SOURCE RISE";
  353.         }
  354.       break;
  355.       case age1960_TRIG_IMMEDIATE:
  356.         {
  357.           asTXPowerTriSour = "SETUP:TXPOWER:TRIGGER:SOURCE IMMediate";
  358.         }
  359.       break;
  360.       default: // set to auto
  361.         {
  362.           asTXPowerTriSour = "SETUP:TXPOWER:TRIGGER:SOURCE AUTO";
  363.         }
  364.       break;
  365.     }
  366.     vistat = age1960_cmd(vi,asTXPowerTriSour.c_str());
  367.     if (vistat != VI_SUCCESS)
  368.     {
  369.         return vistat;
  370.     }
  371.     // set delay
  372.     asTXPowerDelay = "SETUP:TXPOWER:TRIGGER:DELAY " + IntToStr( iDelay ); // sec
  373.     vistat = age1960_cmd(vi,asTXPowerDelay.c_str());
  374.     if (vistat != VI_SUCCESS)
  375.     {
  376.         return vistat;
  377.     }
  378.     // set trigger qualifier
  379.     if (AGE1960_TX_POWER_TRIGGER_QUALIFIER_ON == iTriQual)
  380.     {
  381.         asTXPowerTriQual = "SETUP:TXPOWER:TRIGGER:QUALIFIER ON";
  382.     }
  383.     else
  384.     {
  385.         asTXPowerTriQual = "SETUP:TXPOWER:TRIGGER:QUALIFIER OFF";
  386.     }
  387.     vistat = age1960_cmd(vi,asTXPowerTriQual.c_str());
  388.     if (vistat != VI_SUCCESS)
  389.     {
  390.         return vistat;
  391.     }
  392.     // set timeout
  393.     asTXPowerTimeout = "SETUP:TXPOWER:TIMEOUT:STIME " + IntToStr(iTimeout); // sec
  394.     vistat = age1960_cmd(vi,asTXPowerTimeout.c_str());
  395.     if (vistat != VI_SUCCESS)
  396.     {
  397.         return vistat;
  398.     }
  399.     return VI_SUCCESS;
  400. }
  401. //---------------------------------------------------------------------------
  402. ViStatus age1968A_Config_EPSK_TxPower(ViSession vi, int iMeasureCount, int iTriSour, int iDelay, int iTriQual, int iTimeout)
  403. {
  404.     AnsiString as_cmd;
  405.     ViStatus vistat;
  406.     // set modulation
  407.    // as_cmd = "SETup:ETXPower:MODulation EPSK";
  408.    // if ( vistat = age1960_cmd(vi, as_cmd.c_str())!= VI_SUCCESS )
  409.    // {
  410.    //     return vistat;
  411.    //}
  412.     // set measurecount
  413.     as_cmd = "SETUP:ETXPOWER:COUNT:SNUMBER " + IntToStr(iMeasureCount);
  414.     vistat = age1960_cmd(vi, as_cmd.c_str());
  415.     if (vistat != VI_SUCCESS )
  416.     {
  417.         return vistat;
  418.     }
  419.     // triger source
  420.     switch (iTriSour)
  421.     {
  422.       case age1960_TRIG_AUTO:
  423.         {
  424.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE AUTO";
  425.         }
  426.       break;
  427.       case age1960_TRIG_PROT:
  428.         {
  429.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE PROTocol";
  430.         }
  431.       break;
  432.       case age1960_TRIG_RF_RISE:
  433.         {
  434.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE RISE";
  435.         }
  436.       break;
  437.       case age1960_TRIG_IMMEDIATE:
  438.         {
  439.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE IMMediate";
  440.         }
  441.       break;
  442.       default: // set to auto
  443.         {
  444.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE AUTO";
  445.         }
  446.       break;
  447.     }
  448.     vistat = age1960_cmd(vi, as_cmd.c_str());
  449.     if (vistat != VI_SUCCESS)
  450.     {
  451.         return vistat;
  452.     }
  453.     // set delay
  454.     as_cmd = "SETUP:ETXPOWER:TRIGGER:DELAY " + IntToStr(iDelay); // sec
  455.     vistat = age1960_cmd(vi, as_cmd.c_str());
  456.     if (vistat != VI_SUCCESS)
  457.     {
  458.         return vistat;
  459.     }
  460. #if 0
  461.     // set trigger qualifier
  462.     if (iTriQual == AGE1960_TX_POWER_TRIGGER_QUALIFIER_ON )
  463.     {
  464.         as_cmd = "SETUP:ETXPOWER:TRIGGER:QUALIFIER ON";
  465.     }
  466.     else
  467.     {
  468.         as_cmd = "SETUP:ETXPOWER:TRIGGER:QUALIFIER OFF";
  469.     }
  470.     if (vistat = age1960_cmd(vi, s_cmd.c_str())!= VI_SUCCESS )
  471.     {
  472.         return vistat;
  473.     }
  474.     // set timeout
  475.     as_cmd = "SETUP:ETXPOWER:TIMEOUT:STIME " + IntToStr( iTimeout ); // sec
  476.     if ( vistat = age1960_cmd(vi, as_cmd.c_str())!= VI_SUCCESS )
  477.     {
  478.         return vistat;
  479.     }
  480. #endif
  481.     return vistat;
  482. }
  483. //------------------------------------------------------------------------------
  484. ViStatus age1968A_ReadTxPower(ViSession vi, ViReal64 *p_virTX)
  485. {
  486.     AnsiString asTXPowerRead, asStr, asIntegrity, asTxPower, asBase, asExponent;;
  487.     ViStatus vistat;
  488.     unsigned long num;
  489.     char buf[BUFSIZE];
  490.     asTXPowerRead = "READ:TXP?";
  491.     vistat=viWrite(vi, asTXPowerRead.c_str(), strlen(asTXPowerRead.c_str()), &num);
  492.     if( vistat!=VI_SUCCESS ) return vistat;
  493.     //Sleep( 100 );
  494.     vistat=viRead(vi, buf, BUFSIZE, &num);
  495.     if( vistat!=VI_SUCCESS ) return vistat;
  496.     buf[num-1]=NULL;
  497.     asStr=(AnsiString)buf;
  498.     if( getIntegrityFromStr( asStr, asIntegrity ) == false )  return VI_ERROR_ABORT;
  499.     if( (asIntegrity.ToInt() != (int) INTEGRITY_NORMAL)       &&
  500.         (asIntegrity.ToInt() != (int) INTEGRITY_OVER_RANGE)   &&
  501.         (asIntegrity.ToInt() != (int) INTEGRITY_UNDER_RANGE )
  502.       )
  503.     {
  504.         return VI_ERROR_ABORT;
  505.     }
  506.     if( getTxPowerFromStr( asStr, asTxPower ) == false )  return VI_ERROR_ABORT;
  507.     if( getBaseFromStr( asTxPower, asBase ) == false )  return VI_ERROR_ABORT;
  508.     if( getExponentFromStr( asTxPower, asExponent )== false )  return VI_ERROR_ABORT;
  509.     //if( asExponent.ToInt() >= 0 )
  510.     {
  511.        *p_virTX = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  512.     }
  513.     //Application->MessageBox( temp.c_str() , "Warning", MB_OK );
  514.     //if( temp.Pos("NAN") ) return vistat;
  515.     //temp=temp.SubString(1, temp.Pos(",")-1);
  516.     //*p_virTX = atof(temp.c_str());
  517.     return vistat;
  518. }
  519. //------------------------------------------------------------------------------
  520. ViStatus age1968A_ReadEGPRSTxPower(ViSession vi, ViReal64 *p_virTX)
  521. {
  522.     AnsiString asTXPowerRead, asStr, asIntegrity, asTxPower, asBase, asExponent;;
  523.     ViStatus vistat;
  524.     unsigned long num;
  525.     char buf[BUFSIZE];
  526.     asTXPowerRead = "READ:ETXPower?";
  527.     vistat=viWrite(vi, asTXPowerRead.c_str(), strlen(asTXPowerRead.c_str()), &num);
  528.     if( vistat!=VI_SUCCESS ) return vistat;
  529.     //Sleep( 100 );
  530.     vistat=viRead(vi, buf, BUFSIZE, &num);
  531.     if( vistat!=VI_SUCCESS ) return vistat;
  532.     buf[num-1]=NULL;
  533.     asStr=(AnsiString)buf;
  534.     if( getEpskIntegrityFromStr( asStr, asIntegrity ) == false )  return VI_ERROR_ABORT;
  535.     if( (asIntegrity.ToInt() != (int) INTEGRITY_NORMAL)                      &&
  536.         (asIntegrity.ToInt() != (int) INTEGRITY_OVER_RANGE)                  &&
  537.         (asIntegrity.ToInt() != (int) INTEGRITY_UNDER_RANGE )                &&
  538.         (asIntegrity.ToInt() != (int) INTEGRITY_SYNC_NOT_FOUND)              &&
  539.         (asIntegrity.ToInt() != (int) INTEGRITY_TRIGGER_EARLY_OR_FALL_EARLY) &&
  540.         (asIntegrity.ToInt() != (int) INTEGRITY_TRIGGER_LATE_OR_RISE_LATE)
  541.       )
  542.     {
  543.         return VI_ERROR_ABORT;
  544.     }
  545.     if( getEpskTxPowerFromStr( asStr, asTxPower ) == false )  return VI_ERROR_ABORT;
  546.     if( getEpskBaseFromStr( asTxPower, asBase ) == false )  return VI_ERROR_ABORT;
  547.     if( getEpskExponentFromStr( asTxPower, asExponent )== false )  return VI_ERROR_ABORT;
  548.     //if( asExponent.ToInt() >= 0 )
  549.     {
  550.        *p_virTX = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  551.     }
  552.     //Application->MessageBox( temp.c_str() , "Warning", MB_OK );
  553.     //if( temp.Pos("NAN") ) return vistat;
  554.     //temp=temp.SubString(1, temp.Pos(",")-1);
  555.     //*p_virTX = atof(temp.c_str());
  556.     return vistat;
  557. }
  558. //==============================================================================
  559. /////////////////////////////////   PFER    ////////////////////////////////////
  560. //==============================================================================
  561. ViStatus age1968A_confPFER(ViSession vi, int iMeasureCount, int iTriSour,
  562.                                        int iDelay, int iTriQual, int iTimeout)
  563. {
  564.     AnsiString as_cmd;
  565.     ViStatus vistat;
  566.     // burst sync
  567.     as_cmd = "SETUP:PFERROR:SYNC MIDAMBLE";
  568.     vistat = age1960_cmd(vi, as_cmd.c_str());
  569.     if (vistat != VI_SUCCESS)
  570.     {
  571.         return vistat;
  572.     }
  573.     // set measurecount
  574.     as_cmd = "SETup:PFERror:COUNt:NUMBer " + IntToStr(iMeasureCount);
  575.     vistat = age1960_cmd(vi, as_cmd.c_str());
  576.     if (vistat != VI_SUCCESS)
  577.     {
  578.         return vistat;
  579.     }
  580.     // triger source
  581.     switch (iTriSour)
  582.     {
  583.       case age1960_TRIG_AUTO:
  584.         {
  585.           as_cmd = "SETup:PFERror:TRIG:SOURce AUTO";
  586.         }
  587.       break;
  588.       case age1960_TRIG_PROT:
  589.         {
  590.           as_cmd = "SETup:PFERror:TRIG:SOURce PROTocol";
  591.         }
  592.       break;
  593.       case age1960_TRIG_RF_RISE:
  594.         {
  595.           as_cmd = "SETup:PFERror:TRIG:SOURce RISE";
  596.         }
  597.       break;
  598.       case age1960_TRIG_IMMEDIATE:
  599.         {
  600.           as_cmd = "SETup:PFERror:TRIG:SOURce IMMediate";
  601.         }
  602.       break;
  603.       default: // set to auto
  604.         {
  605.           as_cmd = "SETup:PFERror:TRIG:SOURce AUTO";
  606.         }
  607.       break;
  608.     }
  609.     vistat = age1960_cmd(vi,as_cmd.c_str());
  610.     if (vistat != VI_SUCCESS)
  611.     {
  612.         return vistat;
  613.     }
  614.     // set delay
  615.     as_cmd = "SETup:PFERror:TRIGger:DELay " + IntToStr(iDelay); // sec
  616.     vistat = age1960_cmd(vi, as_cmd.c_str());
  617.     if (vistat != VI_SUCCESS)
  618.     {
  619.         return vistat;
  620.     }
  621.     // set trigger qualifier
  622.     if (AGE1960_TX_POWER_TRIGGER_QUALIFIER_ON == iTriQual)
  623.     {
  624.         as_cmd = "SETup:PFERror:TRIGger:QUALifier:GSM ON";
  625.     }
  626.     else
  627.     {
  628.         as_cmd = "SETup:PFERror:TRIGger:QUALifier:GSM OFF";
  629.     }
  630.     vistat = age1960_cmd(vi, as_cmd.c_str());
  631.     if (vistat != VI_SUCCESS)
  632.     {
  633.         return vistat;
  634.     }
  635.     // set timeout
  636.     as_cmd = "SETup:PFERror:TIMeout:TIME " + IntToStr(iTimeout); // sec
  637.     vistat = age1960_cmd(vi, as_cmd.c_str());
  638.     if (vistat != VI_SUCCESS)
  639.     {
  640.         return vistat;
  641.     }
  642.     return VI_SUCCESS;
  643. }
  644. //------------------------------------------------------------------------------
  645. ViStatus age1968A_ReadFreqError(ViSession vi, ViReal64 *p_virFreqErr)
  646. {
  647.     AnsiString asPFERRead, asStr, asIntegrity, asTxPower, asBase, asExponent;;
  648.     ViStatus vistat;
  649.     unsigned long num;
  650.     char buf[BUFSIZE];
  651.     asPFERRead = "READ:PFER?";
  652.     vistat=viWrite(vi, asPFERRead.c_str(), strlen(asPFERRead.c_str()), &num);
  653.     if( vistat!=VI_SUCCESS ) return vistat;
  654.     vistat=viRead(vi, buf, BUFSIZE, &num);
  655.     if( vistat!=VI_SUCCESS ) return vistat;
  656.     buf[num-1]=NULL;
  657.     asStr=(AnsiString)buf;
  658.     if( getIntegrityFromStr( asStr, asIntegrity ) == false )  return VI_ERROR_ABORT;
  659.     if( (asIntegrity.ToInt() != (int) INTEGRITY_NORMAL) && (asIntegrity.ToInt() != (int) INTEGRITY_OVER_RANGE) && (asIntegrity.ToInt() != (int) INTEGRITY_UNDER_RANGE ))
  660.     {
  661.         return VI_ERROR_ABORT;
  662.     }
  663.     if( getTxPowerFromStr( asStr, asTxPower ) == false )  return VI_ERROR_ABORT;
  664.     if( getBaseFromStr( asTxPower, asBase ) == false )  return VI_ERROR_ABORT;
  665.     if( getExponentFromStr( asTxPower, asExponent )== false )  return VI_ERROR_ABORT;
  666.     {
  667.        *p_virFreqErr = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  668.     }
  669.     return vistat;
  670. }
  671. //---------------------------------------------------------------------------
  672. ViStatus age1968A_ConfigTSC(ViSession vi, int i_TSC)
  673. {
  674.     AnsiString asTSC;
  675.     ViStatus vistat;
  676.     unsigned long num;
  677.     // set measurecount
  678.     asTSC = "CALL:BURSt:TYPE TSC" + IntToStr(i_TSC);
  679.     vistat = age1960_cmd(vi, asTSC.c_str());
  680.     if (vistat != VI_SUCCESS)
  681.     {
  682.         return vistat;
  683.     }
  684.     return vistat;
  685. }
  686. //------------------------------------------------------------------------------
  687. ViReal64 __fastcall get_Original_Offset(ViReal64  *p_IQTFreqs, ViReal64 *p_IQTResults, ViInt32   IQTTuningCount)
  688. {
  689.     for(int i=0; i<IQTTuningCount; i++)
  690.     {
  691.         if( *(p_IQTFreqs+i) == IQT_ORIGINAL_OFFSET_FREQ )
  692.         {
  693.             return *(p_IQTResults+i);
  694.         }
  695.     }
  696.     return NAN;
  697. }
  698. //------------------------------------------------------------------------------
  699. ViReal64 __fastcall get_IQ_Imbalance(ViReal64  *p_IQTFreqs, ViReal64 *p_IQTResults, ViInt32   IQTTuningCount)
  700. {
  701.     for(int i=0; i<IQTTuningCount; i++)
  702.     {
  703.         if( *(p_IQTFreqs+i) == IQT_IQ_IMBALANCE_FREQ )
  704.         {
  705.             return *(p_IQTResults+i);
  706.         }
  707.     }
  708.     return NAN;
  709. }
  710. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  711. ViStatus age1968A_Config_DynPower(ViSession vi, int iMeasureCount, int iTimeout)
  712. {
  713.     AnsiString as_cmd;
  714.     ViStatus vistat;
  715.     as_cmd = "SETup:DPOWer:CONTinuous OFF";
  716.     vistat = age1960_cmd(vi,as_cmd.c_str());
  717.     if (vistat != VI_SUCCESS)
  718.     {
  719.         return vistat;
  720.     }
  721.     as_cmd = "SETUP:DPOWER:COUNT:NUMBER:SELECTED " + IntToStr(iMeasureCount);
  722.     vistat = age1960_cmd(vi,as_cmd.c_str());
  723.     if (vistat != VI_SUCCESS)
  724.     {
  725.         return vistat;
  726.     }
  727.     as_cmd = "SETup:DPOWer:TIMeout " + IntToStr( iTimeout ) + "S";
  728.     vistat = age1960_cmd(vi,as_cmd.c_str());
  729.     if (vistat != VI_SUCCESS)
  730.     {
  731.         return vistat;
  732.     }
  733.     return VI_SUCCESS;
  734. }
  735. //==============================================================================
  736. ////////////////////////////         EPSK        ///////////////////////////////
  737. //==============================================================================
  738. ViStatus age1968A_Config_EPSK_CodingScheme(ViSession vi, int i_MCS)
  739. {
  740.     AnsiString as_cmd;
  741.     ViStatus vistat;
  742.     unsigned long num;
  743.     as_cmd = "CALL:PDTCH:MCSCheme:EBPTest MCS" + IntToStr(i_MCS) + "P1";
  744.     vistat = age1960_cmd(vi, as_cmd.c_str());
  745.     if (vistat != VI_SUCCESS)
  746.     {
  747.         return vistat;
  748.     }
  749.     return vistat;
  750. }
  751. //---------------------------------------------------------------------------
  752. ViStatus age1968A_confTXPower( ViSession vi, int iMeasureCount, int iTriSour,
  753.                                int iDelay, int iTriQual, int iTimeout )
  754. {
  755.     AnsiString as_cmd;
  756.     ViStatus vistat;
  757.     // set measure count
  758.     as_cmd = "SETUP:ETXPOWER:COUNT:SNUMBER " + IntToStr(iMeasureCount);
  759.     vistat = age1960_cmd(vi, as_cmd.c_str());
  760.     if (vistat != VI_SUCCESS)
  761.     {
  762.         return vistat;
  763.     }
  764.     // triger source
  765.     switch (iTriSour)
  766.     {
  767.       case age1960_TRIG_AUTO:
  768.         {
  769.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE AUTO";
  770.         }
  771.       break;
  772.       case age1960_TRIG_PROT:
  773.         {
  774.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE PROTocol";
  775.         }
  776.       break;
  777.       case age1960_TRIG_RF_RISE:
  778.         {
  779.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE RISE";
  780.         }
  781.       break;
  782.       case age1960_TRIG_IMMEDIATE:
  783.         {
  784.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE IMMediate";
  785.         }
  786.       break;
  787.       default: // set to auto
  788.         {
  789.           as_cmd = "SETUP:ETXPOWER:TRIGGER:SOURCE AUTO";
  790.         }
  791.       break;
  792.     }
  793.     vistat = age1960_cmd(vi, as_cmd.c_str());
  794.     if (vistat != VI_SUCCESS)
  795.     {
  796.         return vistat;
  797.     }
  798.     // set delay
  799.     as_cmd = "SETUP:ETXPOWER:TRIGGER:DELAY " + IntToStr(iDelay); // sec
  800.     vistat = age1960_cmd(vi, as_cmd.c_str());
  801.     if (vistat != VI_SUCCESS)
  802.     {
  803.         return vistat;
  804.     }
  805.     // set trigger qualifier
  806.     if (AGE1960_TX_POWER_TRIGGER_QUALIFIER_ON == iTriQual)
  807.     {
  808.         as_cmd = "SETUP:ETXPOWER:TRIGGER:QUALIFIER ON";
  809.     }
  810.     else
  811.     {
  812.         as_cmd = "SETUP:ETXPOWER:TRIGGER:QUALIFIER OFF";
  813.     }
  814.     vistat = age1960_cmd(vi, as_cmd.c_str());
  815.     if (vistat != VI_SUCCESS)
  816.     {
  817.         return vistat;
  818.     }
  819.     // set timeout
  820.     as_cmd = "SETUP:ETXPOWER:TIMEOUT:STIME " + IntToStr(iTimeout); // sec
  821.     vistat = age1960_cmd(vi, as_cmd.c_str());
  822.     if (vistat != VI_SUCCESS)
  823.     {
  824.         return vistat;
  825.     }
  826.     return vistat;
  827. }
  828. //----------------------------------------------------------------------------
  829. ViStatus age1968A_FetchEpskTxPower(ViSession vi, ViReal64 *p_virTX)
  830. {
  831.     AnsiString asTXPowerFetch, asStr, asIntegrity, asTxPower, asBase, asExponent;;
  832.     ViStatus vistat;
  833.     unsigned long num;
  834.     char buf[BUFSIZE];
  835.     asTXPowerFetch = "FETCh:ETXP:POW:BURSt?";
  836.     vistat=viWrite(vi, asTXPowerFetch.c_str(), strlen(asTXPowerFetch.c_str()), &num);
  837.     if( vistat!=VI_SUCCESS ) return vistat;
  838.     //Sleep( 100 );
  839.     vistat=viRead(vi, buf, BUFSIZE, &num);
  840.     if( vistat!=VI_SUCCESS ) return vistat;
  841.     buf[num-1]=NULL;
  842.     asStr=(AnsiString)buf;
  843.     if( getIntegrityFromStr( asStr, asIntegrity ) == false )  return VI_ERROR_ABORT;
  844.     if( (asIntegrity.ToInt() != (int) INTEGRITY_NORMAL) && (asIntegrity.ToInt() != (int) INTEGRITY_OVER_RANGE) && (asIntegrity.ToInt() != (int) INTEGRITY_UNDER_RANGE ))
  845.     {
  846.         return VI_ERROR_ABORT;
  847.     }
  848.     if( getTxPowerFromStr( asStr, asTxPower ) == false )  return VI_ERROR_ABORT;
  849.     if( getBaseFromStr( asTxPower, asBase ) == false )  return VI_ERROR_ABORT;
  850.     if( getExponentFromStr( asTxPower, asExponent )== false )  return VI_ERROR_ABORT;
  851.     //if( asExponent.ToInt() >= 0 )
  852.     {
  853.        *p_virTX = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  854.     }
  855.     //Application->MessageBox( temp.c_str() , "Warning", MB_OK );
  856.     //if( temp.Pos("NAN") ) return vistat;
  857.     //temp=temp.SubString(1, temp.Pos(",")-1);
  858.     //*p_virTX = atof(temp.c_str());
  859.     return vistat;
  860. }
  861. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  862. ViStatus age1968A_Config_EPSK_ModACcuracy(ViSession vi, int iMeasureCount, int iTriSour, int iDelay, int iTimeout)
  863. {
  864.     AnsiString as_cmd;
  865.     ViStatus vistat;
  866.     // set single
  867.     as_cmd = "SETup:EMACcuracy:CONTinuous OFF";
  868.     vistat = age1960_cmd(vi,as_cmd.c_str());
  869.     if (vistat != VI_SUCCESS)
  870.     {
  871.         return vistat;
  872.     }
  873.     as_cmd = "SETup:EMACcuracy:IQIMbalance:STATe ON";
  874.     vistat = age1960_cmd(vi,as_cmd.c_str());
  875.     if (vistat != VI_SUCCESS)
  876.     {
  877.         return vistat;
  878.     }
  879.     // set measurecount
  880.     as_cmd = "SETup:EMACcuracy:COUNT:SNUMBER " + IntToStr(iMeasureCount);
  881.     vistat = age1960_cmd(vi,as_cmd.c_str());
  882.     if (vistat != VI_SUCCESS)
  883.     {
  884.         return vistat;
  885.     }
  886.     // triger source
  887.     switch (iTriSour)
  888.     {
  889.       case age1960_TRIG_AUTO:
  890.         {
  891.           as_cmd = "SETup:EMACcuracy:TRIGGER:SOURCE AUTO";
  892.         }
  893.       break;
  894.       case age1960_TRIG_PROT:
  895.         {
  896.           as_cmd = "SETup:EMACcuracy:TRIGGER:SOURCE PROTocol";
  897.         }
  898.       break;
  899.       case age1960_TRIG_RF_RISE:
  900.         {
  901.           as_cmd = "SETup:EMACcuracy:TRIGGER:SOURCE RISE";
  902.         }
  903.       break;
  904.       case age1960_TRIG_IMMEDIATE:
  905.         {
  906.           as_cmd = "SETup:EMACcuracy:TRIGGER:SOURCE IMMediate";
  907.         }
  908.       break;
  909.       default: // set to auto
  910.         {
  911.           as_cmd = "SETup:EMACcuracy:TRIGGER:SOURCE AUTO";
  912.         }
  913.       break;
  914.     }
  915.     vistat = age1960_cmd(vi, as_cmd.c_str());
  916.     if (vistat != VI_SUCCESS)
  917.     {
  918.         return vistat;
  919.     }
  920.     // set delay
  921.     as_cmd = "SETup:EMACcuracy:TRIGGER:DELAY " + IntToStr(iDelay); // sec
  922.     vistat = age1960_cmd(vi,as_cmd.c_str());
  923.     if (vistat != VI_SUCCESS)
  924.     {
  925.         return vistat;
  926.     }
  927.     // set timeout
  928.     as_cmd = "SETup:EMACcuracy:TIMEOUT:STIME " + IntToStr(iTimeout); // sec
  929.     vistat = age1960_cmd(vi,as_cmd.c_str());
  930.     if (vistat != VI_SUCCESS)
  931.     {
  932.         return vistat;
  933.     }
  934.     return vistat;
  935. }
  936. //----------------------------------------------------------------------------
  937. ViStatus age1968A_Fetch_EPSK_Average_PhaseError(ViSession vi, ViReal64 *p_virPhErr)
  938. {
  939.     AnsiString as_cmd, asStr, asIntegrity, as_OOS, as_SBS, asBase, asExponent;
  940.     ViStatus vistat;
  941.     unsigned long num;
  942.     char buf[BUFSIZE];
  943.     // init
  944.     as_cmd = "INIT:EMACcuracy:ON";
  945.     vistat = viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  946.     if (vistat != VI_SUCCESS)
  947.     {
  948.         return vistat;
  949.     }
  950.     // fetch
  951.     as_cmd = "FETCh:EMACcuracy:PERRor:RMS?";
  952.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  953.     if (vistat != VI_SUCCESS)
  954.     {
  955.         return vistat;
  956.     }
  957.     vistat=viRead(vi, buf, BUFSIZE, &num);
  958.     if( vistat!=VI_SUCCESS ) return vistat;
  959.     buf[num-1]=NULL;
  960.     asStr=(AnsiString)buf;
  961.     if (!getBaseFromStr(asStr, asBase))
  962.     {
  963.         return VI_ERROR_ABORT;
  964.     }
  965.     if (!getExponentFromStr(asStr, asExponent))
  966.     {
  967.         return VI_ERROR_ABORT;
  968.     }
  969.     *p_virPhErr = (ViReal64) atof(asBase.c_str()) * pow10(asExponent.ToInt());
  970.    // *p_virPhErr = 0 - *p_virOOS;
  971.     // abort
  972.     as_cmd = "ABORt:EMACcuracy";
  973.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  974.     if( vistat!=VI_SUCCESS ) return vistat;
  975.     return vistat;
  976. }
  977. //----------------------------------------------------------------------------
  978. ViStatus age1968A_Fetch_EPSK_Average_OrignalOffset(ViSession vi, ViReal64 *p_virOOS )
  979. {
  980.     AnsiString as_cmd, asStr, asIntegrity, as_OOS, as_SBS, asBase, asExponent;
  981.     ViStatus vistat;
  982.     unsigned long num;
  983.     char buf[BUFSIZE];
  984.     as_cmd = "INIT:EMACcuracy:ON";
  985.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  986.     if( vistat!=VI_SUCCESS ) return vistat;
  987.     as_cmd = "FETCh:EMACcuracy:OOFFset?";
  988.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  989.     if( vistat!=VI_SUCCESS ) return vistat;
  990.     //Sleep( 100 );
  991.     vistat=viRead(vi, buf, BUFSIZE, &num);
  992.     if( vistat!=VI_SUCCESS ) return vistat;
  993.     buf[num-1]=NULL;
  994.     asStr=(AnsiString)buf;
  995.     if (asStr.AnsiPos("9.91E37"))
  996.     {
  997.         return VI_ERROR_INV_EXPR;
  998.     }
  999.         
  1000.     if (!getBaseFromStr(asStr, asBase))
  1001.     {
  1002.         return VI_ERROR_ABORT;
  1003.     }
  1004.     if (!getExponentFromStr(asStr, asExponent))
  1005.     {
  1006.         return VI_ERROR_ABORT;
  1007.     }
  1008.     *p_virOOS = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  1009.     *p_virOOS = 0 - *p_virOOS;
  1010.     as_cmd = "ABORt:EMACcuracy";
  1011.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1012.     if( vistat!=VI_SUCCESS ) return vistat;
  1013.     return vistat;
  1014. }
  1015. //----------------------------------------------------------------------------
  1016. ViStatus age1968A_Fetch_EPSK_Average_IQImbalance(ViSession vi, ViReal64 *p_virSBS)
  1017. {
  1018.     AnsiString as_cmd, asStr, asIntegrity, as_OOS, as_SBS, asBase, asExponent;
  1019.     ViStatus vistat;
  1020.     unsigned long num;
  1021.     char buf[BUFSIZE];
  1022.     as_cmd = "INIT:EMACcuracy:ON";
  1023.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1024.     if( vistat!=VI_SUCCESS ) return vistat;
  1025.     as_cmd = "FETCh:EMACcuracy:IQIMbalance?";
  1026.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1027.     if( vistat!=VI_SUCCESS ) return vistat;
  1028.     //Sleep( 100 );
  1029.     vistat=viRead(vi, buf, BUFSIZE, &num);
  1030.     if( vistat!=VI_SUCCESS ) return vistat;
  1031.     buf[num-1]=NULL;
  1032.     asStr=(AnsiString)buf;
  1033.     if (asStr.AnsiPos("9.91E37"))
  1034.     {
  1035.         return VI_ERROR_INV_EXPR;
  1036.     }
  1037.     if (!getBaseFromStr(asStr, asBase))
  1038.     {
  1039.         return VI_ERROR_ABORT;
  1040.     }
  1041.     if (!getExponentFromStr(asStr, asExponent))
  1042.     {
  1043.         return VI_ERROR_ABORT;
  1044.     }
  1045.     *p_virSBS = (ViReal64) atof(asBase.c_str()) *  pow10(asExponent.ToInt());
  1046.     as_cmd = "ABORt:EMACcuracy";
  1047.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1048.     if( vistat!=VI_SUCCESS ) return vistat;
  1049.     return vistat;
  1050. }
  1051. //----------------------------------------------------------------------------
  1052. ViStatus age1968A_Fetch_EPSK_Average_TxIq(ViSession vi, ViReal64 *p_virSBS, ViReal64 *p_virOOS)
  1053. {
  1054.     AnsiString as_cmd, asStr, asIntegrity, as_OOS, as_SBS, asBase, asExponent;
  1055.     ViStatus vistat;
  1056.     unsigned long num;
  1057.     char buf[BUFSIZE];
  1058.     as_cmd = "INIT:EMACcuracy:ON";
  1059.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1060.     if( vistat!=VI_SUCCESS ) return vistat;
  1061.     as_cmd = "FETCh:EMACcuracy?";
  1062.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1063.     if( vistat!=VI_SUCCESS ) return vistat;
  1064.     vistat=viRead(vi, buf, BUFSIZE, &num);
  1065.     if( vistat!=VI_SUCCESS ) return vistat;
  1066.     buf[num-1]=NULL;
  1067.     asStr=(AnsiString)buf;
  1068.     if (asStr.AnsiPos("9.91E37"))
  1069.     {
  1070.         return VI_ERROR_INV_EXPR;
  1071.     }
  1072.     if (!getBaseFromStr(asStr, asBase))
  1073.     {
  1074.         return VI_ERROR_ABORT;
  1075.     }
  1076.     if (!getExponentFromStr(asStr, asExponent))
  1077.     {
  1078.         return VI_ERROR_ABORT;
  1079.     }
  1080.     
  1081.     *p_virSBS = (ViReal64) atof(asBase.c_str()) *  pow10( asExponent.ToInt() );
  1082.     
  1083.     as_cmd = "ABORt:EMACcuracy";
  1084.     vistat=viWrite(vi, as_cmd.c_str(), strlen(as_cmd.c_str()), &num);
  1085.     if( vistat!=VI_SUCCESS ) return vistat;
  1086.     return vistat;
  1087. }