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

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.  *   cmu200_bt_sig.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  CMU 200 BT signalling function source
  48.  *
  49.  * Author:
  50.  *  Andy Ueng (mtk00490)
  51.  *
  52.  *============================================================================
  53.  *             HISTORY
  54.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  55.  *------------------------------------------------------------------------------
  56.  * $Revision$
  57.  * $Modtime$
  58.  * $Log$
  59.  *
  60.  *------------------------------------------------------------------------------
  61.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  62.  *============================================================================
  63.  ****************************************************************************/
  64. #pragma hdrstop
  65. #ifndef  _FT_UTILS_H_
  66. #include "ft_utils.h"
  67. #endif
  68. #ifndef  _CMU200_BT_SIG_H_
  69. #include "cmu200_bt_sig.h"
  70. #endif
  71. #pragma package(smart_init)
  72. //=============================================================================
  73. ///////////////////////      General      //////////////////////////////////
  74. //=============================================================================
  75. bool cmu_sig_bt_init(CMU_VAR *cmu, bool bReset)
  76. {
  77.     ViStatus status;
  78.     unsigned long num;
  79.     char cmd[BUF], buf[BUF];
  80.     if (NULL == cmu->base)
  81.     {
  82.         status = viOpenDefaultRM(&cmu->RM);
  83.         if (status < VI_SUCCESS)
  84.         {
  85.             return false;
  86.         }
  87.         status = viOpen(cmu->RM, (cmu->ADD+"::0::INSTR").c_str(), VI_NULL, cmu->TMO, &(*cmu).base);
  88.         if (status < VI_SUCCESS)
  89.         {
  90.             return false;
  91.         }
  92.         status = viSetAttribute(cmu->base, VI_ATTR_TMO_VALUE, cmu->TMO);
  93.         if (status < VI_SUCCESS)
  94.         {
  95.             return false;
  96.         }
  97.     }
  98.     strcpy(cmd, "SYST:REM:ADDR:SEC 21,"BLUETOOTH_Sig"");
  99.     viWrite(cmu->base, cmd, strlen(cmd), &num);
  100.     status = viOpen(cmu->RM, (cmu->ADD+"::21::INSTR").c_str(), VI_NULL, cmu->TMO, &(cmu->s_bt));
  101.     if (status < VI_SUCCESS)
  102.     {
  103.         return false;
  104.     }
  105.     status = viSetAttribute(cmu->s_bt, VI_ATTR_TMO_VALUE, cmu->TMO);
  106.     if (status < VI_SUCCESS)
  107.     {
  108.         return false;
  109.     }
  110.     // port
  111.     strcpy(cmd, "INP:STAT RF2");
  112.     viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  113.     strcpy(cmd, "OUTP:STAT RF2");
  114.     viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  115.     // loss
  116.     sprintf(cmd, "SENS:CORR:LOSS:INP2 %f", cmu->loss_bt_i);
  117.     viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  118.     sprintf(cmd, "SENS:CORR:LOSS:OUTP2 %f", cmu->loss_bt_o);
  119.     viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  120.     return true;
  121. }
  122. //-----------------------------------------------------------------------------
  123. bool cmu_sig_bt_close(CMU_VAR *cmu)
  124. {
  125.     ViStatus status;
  126.     if (NULL != cmu->s_bt)
  127.     {
  128.         status = viClose(cmu->s_bt);
  129.         if (status < VI_SUCCESS)
  130.         {
  131.             return false;
  132.         }
  133.         cmu->s_bt = NULL;
  134.     }
  135.     if (NULL != cmu->base)
  136.     {
  137.         status = viClose(cmu->base);
  138.         if (status < VI_SUCCESS)
  139.         {
  140.             return false;
  141.         }
  142.         cmu->base = NULL;
  143.     }
  144.     if (NULL != cmu->RM)
  145.     {
  146.         status = viClose(cmu->RM);
  147.         if (status < VI_SUCCESS)
  148.         {
  149.             return false;
  150.         }
  151.         cmu->RM = NULL;
  152.     }
  153.         
  154.     return true;
  155. }
  156. //-----------------------------------------------------------------------------
  157. bool cmu_sig_bt_config_downlink_power(CMU_VAR *cmu, double d_dn_power)
  158. {
  159.     ViStatus status;
  160.     char cmd[BUF];
  161.     unsigned long num;
  162.     char str[256];
  163.     sprintf(str, "%f", d_dn_power);
  164.     AnsiString as_power(str);
  165.     AnsiString as_cmd = "CONFigure:MSIGnal:TXLevel " + as_power;
  166.     strcpy(cmd, as_cmd.c_str());
  167.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  168.     if (status < VI_SUCCESS)
  169.     {
  170.         return false;
  171.     }
  172.     return true;
  173. }
  174. //=============================================================================
  175. ///////////////////////    Connection control   ///////////////////////////////
  176. //=============================================================================
  177. bool cmu_sig_bt_config_slave_parameter(CMU_VAR *cmu, unsigned short ch)
  178. {
  179.     ViStatus status;
  180.     char cmd[BUF];
  181.     unsigned long num;
  182.     // TX test
  183.     AnsiString as_cmd = "CONFigure:SSIGnal:TMODe:TMTYpe TXT";
  184.     strcpy(cmd, as_cmd.c_str());
  185.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  186.     if (status < VI_SUCCESS)
  187.     {
  188.         return false;
  189.     }
  190.     // non hopping
  191.     as_cmd = "CONFigure:SSIGnal:TMODe:HSCHeme RXTX";
  192.     strcpy(cmd, as_cmd.c_str());
  193.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  194.     if (status < VI_SUCCESS)
  195.     {
  196.         return false;
  197.     }
  198.     // RX/TX channel
  199.     as_cmd = "CONFigure:SSIGnal:TMODe:FREQuency:UNIT CH";
  200.     strcpy(cmd, as_cmd.c_str());
  201.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  202.     if (status < VI_SUCCESS)
  203.     {
  204.         return false;
  205.     }
  206.     as_cmd = "CONFigure:SSIGnal:TMODe:TXTests:FREQuency " + IntToStr(ch);
  207.     strcpy(cmd, as_cmd.c_str());
  208.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  209.     if (status < VI_SUCCESS)
  210.     {
  211.         return false;
  212.     }
  213.     // packet type
  214.     as_cmd = "CONFigure:SSIGnal:TMODe:TXTests:PATType P11";
  215.     strcpy(cmd, as_cmd.c_str());
  216.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  217.     if (status < VI_SUCCESS)
  218.     {
  219.         return false;
  220.     }
  221.     return true;
  222. }
  223. //---------------------------------------------------------------------------
  224. bool cmu_sig_bt_config_address(CMU_VAR *cmu, AnsiString as_bd_addr)
  225. {
  226.     ViStatus status;
  227.     char cmd[BUF];
  228.     unsigned long num;
  229.     AnsiString as_cmd = "CONFigure:MSIGnal:PAGing:TARGet "" + as_bd_addr + """;
  230.     strcpy(cmd, as_cmd.c_str());
  231.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  232.     if (status < VI_SUCCESS)
  233.     {
  234.         return false;
  235.     }
  236.     return true;
  237. }
  238. //--------------------------------------------------------------------------
  239. bool cmu_sig_bt_config_inquiry(CMU_VAR *cmu, S_BTT_INQUIRY s_inquiry)
  240. {
  241.     ViStatus status;
  242.     char cmd[BUF];
  243.     unsigned long num;
  244.     // timeout
  245.     AnsiString as_cmd = "CONFigure:MSIGnal:INQuiry:ILENgth " + IntToStr(s_inquiry.i_timeout);
  246.     strcpy(cmd, as_cmd.c_str());
  247.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  248.     if (status < VI_SUCCESS)
  249.     {
  250.         return false;
  251.     }
  252.     // number of response
  253.     as_cmd = "CONFigure:MSIGnal:INQuiry:NOResponses " + IntToStr(s_inquiry.i_response_num);
  254.     strcpy(cmd, as_cmd.c_str());
  255.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  256.     if (status < VI_SUCCESS)
  257.     {
  258.         return false;
  259.     }
  260.     return true;
  261. }
  262. //--------------------------------------------------------------------------
  263. bool cmu_sig_bt_inquiry(CMU_VAR *cmu)
  264. {
  265.     ViStatus status;
  266.     char cmd[BUF];
  267.     unsigned long num;
  268.     strcpy(cmd, "PROCedure:SIGNalling:ACTion INQuiry");
  269.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  270.     if (status < VI_SUCCESS)
  271.     {
  272.         return false;
  273.     }
  274.     return true;
  275. }
  276. //--------------------------------------------------------------------------
  277. bool cmu_sig_bt_connect_test(CMU_VAR *cmu)
  278. {
  279.     ViStatus status;
  280.     char cmd[BUF];
  281.     unsigned long num;
  282.     strcpy(cmd, "PROCedure:SIGNalling:ACTion TEST");
  283.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  284.     if (status < VI_SUCCESS)
  285.     {
  286.         return false;
  287.     }
  288.     return true;
  289. }
  290. //--------------------------------------------------------------------------
  291. bool cmu_sig_bt_query_state(CMU_VAR *cmu, E_BTT_STATE_T* e_state)
  292. {
  293.     ViStatus status;
  294.     char cmd[BUF];
  295.     char buf[BUF];
  296.     unsigned long num;
  297.     AnsiString as_cmd = "SIGNalling:XSTate?";
  298.     strcpy(cmd, as_cmd.c_str());
  299.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  300.     if (status < VI_SUCCESS)
  301.     {
  302.         return false;
  303.     }
  304.     status = viRead(cmu->s_bt, buf, BUF, &num);
  305.     if (status < VI_SUCCESS)
  306.     {
  307.         return false;
  308.     }
  309.     buf[num-1] = NULL;
  310.     AnsiString as(buf);
  311.     as = as.UpperCase();
  312.     if (as.AnsiPos("SBY"))
  313.     {
  314.         *e_state = BTT_STATUS_STANDBY;
  315.     }
  316.     else if (as.AnsiPos("INQ"))
  317.     {
  318.         *e_state = BTT_STATUS_INQUIRY;
  319.     }
  320.     else if (as.AnsiPos("PAG"))
  321.     {
  322.         *e_state = BTT_STATUS_PAGING;
  323.     }
  324.     else if (as.AnsiPos("CONN"))
  325.     {
  326.         *e_state = BTT_STATUS_CONNECTED;
  327.     }
  328.     else if (as.AnsiPos("TEST"))
  329.     {
  330.         *e_state = BTT_STATUS_TEST;
  331.     }
  332.     else if (as.AnsiPos("HOLD"))
  333.     {
  334.         *e_state = BTT_STATUS_HOLD;
  335.     }
  336.     else if (as.AnsiPos("SNIF"))
  337.     {
  338.         *e_state = BTT_STATUS_SNIF;
  339.     }
  340.     else if (as.AnsiPos("PARK"))
  341.     {
  342.         *e_state = BTT_STATUS_PARK;
  343.     }
  344.     else if (as.AnsiPos("AUD"))
  345.     {
  346.         *e_state = BTT_STATUS_AUDIO;
  347.     }
  348.     else if (as.AnsiPos("DET"))
  349.     {
  350.         *e_state = BTT_STATUS_DETACH;
  351.     }
  352.     return true;
  353. }
  354. //--------------------------------------------------------------------------
  355. bool cmu_sig_bt_release(CMU_VAR *cmu)
  356. {
  357.     ViStatus status;
  358.     char cmd[BUF];
  359.     unsigned long num;
  360.     strcpy(cmd, "PROCedure:SIGNalling:ACTion DETach");
  361.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  362.     if (status < VI_SUCCESS)
  363.     {
  364.         return false;
  365.     }
  366.     return true;
  367. }
  368. //===========================================================================
  369. ///////////////////////////    MPR measurement    ///////////////////////////
  370. //===========================================================================
  371. bool cmu_sig_bt_config_mpr(CMU_VAR *cmu, S_BTT_POWER bt_mpr)
  372. {
  373.     ViStatus status;
  374.     char cmd[BUF];
  375.     unsigned long num;
  376.     AnsiString as_cmd = "CONFigure:POWer:MPR:CONTrol:STATistics " + IntToStr(bt_mpr.i_burst_num);
  377.     strcpy(cmd, as_cmd.c_str());
  378.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  379.     if (status < VI_SUCCESS)
  380.     {
  381.         return false;
  382.     }
  383.     as_cmd = "CONFigure:POWer:MPR:CONTrol:REPetition SINGleshot,SONerror,NONE";
  384.     strcpy(cmd, as_cmd.c_str());
  385.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  386.     if (status < VI_SUCCESS)
  387.     {
  388.         return false;
  389.     }
  390.     // channel
  391.     as_cmd = "CONFigure:POWer:MPR:MMODe SINGle";
  392.     strcpy(cmd, as_cmd.c_str());
  393.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  394.     if (status < VI_SUCCESS)
  395.     {
  396.         return false;
  397.     }
  398.     as_cmd = "CONFigure:POWer:MPR:MFRequency:UNIT CH";
  399.     strcpy(cmd, as_cmd.c_str());
  400.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  401.     if (status < VI_SUCCESS)
  402.     {
  403.         return false;
  404.     }
  405.     as_cmd = "CONFigure:POWer:MPR:MFRequency " + IntToStr(bt_mpr.i_channel);
  406.     strcpy(cmd, as_cmd.c_str());
  407.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  408.     if (status < VI_SUCCESS)
  409.     {
  410.         return false;
  411.     }
  412.     return true;
  413. }
  414. //===========================================================================
  415. ///////////////////////////    MOD measurement    ///////////////////////////
  416. //===========================================================================
  417. bool cmu_sig_bt_config_mod(CMU_VAR *cmu, S_BTT_MOD bt_mod)
  418. {
  419.     ViStatus status;
  420.     char cmd[BUF];
  421.     unsigned long num;
  422.     AnsiString as_cmd = "CONFigure:MODulation:DEViation:CONTrol SCALar, " + IntToStr(bt_mod.i_burst_num) +
  423.                         ", SINGleshot, SONerror, NONE";
  424.     strcpy(cmd, as_cmd.c_str());
  425.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  426.     if (status < VI_SUCCESS)
  427.     {
  428.         return false;
  429.     }
  430.     // channel
  431.     as_cmd = "CONFigure:MODulation:DEViation:MMODe SINGle";
  432.     strcpy(cmd, as_cmd.c_str());
  433.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  434.     if (status < VI_SUCCESS)
  435.     {
  436.         return false;
  437.     }
  438.     as_cmd = "CONFigure:MODulation:DEViation:MFRequency:UNIT CH";
  439.     strcpy(cmd, as_cmd.c_str());
  440.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  441.     if (status < VI_SUCCESS)
  442.     {
  443.         return false;
  444.     }
  445.     as_cmd = "CONFigure:MODulation:DEViation:MFRequency " + IntToStr(bt_mod.i_channel);
  446.     strcpy(cmd, as_cmd.c_str());
  447.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  448.     if (status < VI_SUCCESS)
  449.     {
  450.         return false;
  451.     }
  452.     return true;
  453. }
  454. //---------------------------------------------------------------------------
  455. bool cmu_sig_bt_read_average_freq_error(CMU_VAR *cmu, double* freq_err)
  456. {
  457.     ViStatus status;
  458.     char cmd[BUF];
  459.     char buf[BUF];
  460.     unsigned long num;
  461.     AnsiString as_cmd = "READ:MOD:DEV:EXT?";
  462.     strcpy(cmd, as_cmd.c_str());
  463.     status = viWrite(cmu->s_bt, cmd, strlen(cmd), &num);
  464.     if (status < VI_SUCCESS)
  465.     {
  466.         return false;
  467.     }
  468.     status = viRead(cmu->s_bt, buf, BUF, &num);
  469.     if (status < VI_SUCCESS)
  470.     {
  471.         return false;
  472.     }
  473.     buf[num-1] = NULL;
  474.     AnsiString temp_total;
  475.     AnsiString temp_value;
  476.     AnsiString value[CMU200_BT_MOD_NUM];
  477.     int i_num;
  478.     AnsiString temp(buf);
  479.     if (temp.Pos("NAN"))
  480.     {
  481.         return false;
  482.     }
  483. #if 0
  484.     for (int i=0;i<CMU200_BT_MOD_NUM;i++)
  485.     {
  486.         temp_value=temp.SubString(1, temp.Pos(",")-1);
  487.         i_num= temp.AnsiPos(",");
  488.         value[i]=temp_value;
  489.         temp_total=temp.SubString(i_num+1, temp.Length());
  490.         temp=temp_total;
  491.     }
  492.     *freq_err = atof(value[CMU200_BT_MOD_FREQ_ACCURACY_AVERAGE].c_str());
  493. #endif
  494.     double d_array[CMU200_BT_MOD_NUM];
  495.     String_To_Array_double(temp.c_str(), d_array, CMU200_BT_MOD_NUM);
  496.     *freq_err = d_array[CMU200_BT_MOD_FREQ_ACCURACY_AVERAGE];
  497.     return true;
  498. }