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

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   cbt_bt_sig.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  CBT 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  _CBT_BT_SIG_H_
  69. #include "cbt_bt_sig.h"
  70. #endif
  71. #pragma package(smart_init)
  72. //=============================================================================
  73. ///////////////////////      General      //////////////////////////////////
  74. //=============================================================================
  75. bool cbt_sig_bt_init(S_CBT_T *cbt, bool bReset)
  76. {
  77.     ViStatus status;
  78.     unsigned long num;
  79.     char cmd[BUF], buf[BUF];
  80.     if (NULL == cbt->base)
  81.     {
  82.         status = viOpenDefaultRM(&cbt->RM);
  83.         if (status < VI_SUCCESS)
  84.         {
  85.             return false;
  86.         }
  87.         status = viOpen(cbt->RM, (cbt->ADD+"::0::INSTR").c_str(), VI_NULL, cbt->TMO, &cbt->base);
  88.         if (status < VI_SUCCESS)
  89.         {
  90.             return false;
  91.         }
  92.         status = viSetAttribute(cbt->base, VI_ATTR_TMO_VALUE, cbt->TMO);
  93.         if (status < VI_SUCCESS)
  94.         {
  95.             return false;
  96.         }
  97.     }
  98.     strcpy(cmd, "SYST:REM:ADDR:SEC 21,"BLUETOOTH_Sig"");
  99.     viWrite(cbt->base, cmd, strlen(cmd), &num);
  100.     status = viOpen(cbt->RM, (cbt->ADD+"::21::INSTR").c_str(), VI_NULL, cbt->TMO, &(cbt->s_bt));
  101.     if (status < VI_SUCCESS)
  102.     {
  103.         return false;
  104.     }
  105.     status = viSetAttribute(cbt->s_bt, VI_ATTR_TMO_VALUE, cbt->TMO);
  106.     if (status < VI_SUCCESS)
  107.     {
  108.         return false;
  109.     }
  110.     // port
  111.     strcpy(cmd, "INP:STAT RF2");
  112.     viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  113.     strcpy(cmd, "OUTP:STAT RF2");
  114.     viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  115.     // loss
  116.     sprintf(cmd, "SENS:CORR:LOSS:INP2 %f", cbt->loss_bt_i);
  117.     viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  118.     sprintf(cmd, "SENS:CORR:LOSS:OUTP2 %f", cbt->loss_bt_o);
  119.     viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  120.     return true;
  121. }
  122. //-----------------------------------------------------------------------------
  123. bool cbt_sig_bt_close(S_CBT_T *cbt)
  124. {
  125.     ViStatus status;
  126.     if (NULL != cbt->s_bt)
  127.     {
  128.         status = viClose(cbt->s_bt);
  129.         if (status < VI_SUCCESS)
  130.         {
  131.             return false;
  132.         }
  133.         cbt->s_bt = NULL;
  134.     }
  135.     if (NULL != cbt->base)
  136.     {
  137.         status = viClose(cbt->base);
  138.         if (status < VI_SUCCESS)
  139.         {
  140.             return false;
  141.         }
  142.         cbt->base = NULL;
  143.     }
  144.     if (NULL != cbt->RM)
  145.     {
  146.         status = viClose(cbt->RM);
  147.         if (status < VI_SUCCESS)
  148.         {
  149.             return false;
  150.         }
  151.         cbt->RM = NULL;
  152.     }
  153.         
  154.     return true;
  155. }
  156. //-----------------------------------------------------------------------------
  157. bool cbt_sig_bt_config_downlink_power(S_CBT_T *cbt, 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(cbt->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 cbt_sig_bt_config_slave_parameter(S_CBT_T *cbt, 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(cbt->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(cbt->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(cbt->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(cbt->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(cbt->s_bt, cmd, strlen(cmd), &num);
  217.     if (status < VI_SUCCESS)
  218.     {
  219.         return false;
  220.     }
  221.     return true;
  222. }
  223. //---------------------------------------------------------------------------
  224. bool cbt_sig_bt_config_address(S_CBT_T *cbt, 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(cbt->s_bt, cmd, strlen(cmd), &num);
  232.     if (status < VI_SUCCESS)
  233.     {
  234.         return false;
  235.     }
  236.     return true;
  237. }
  238. //--------------------------------------------------------------------------
  239. bool cbt_sig_bt_config_inquiry(S_CBT_T *cbt, 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(cbt->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(cbt->s_bt, cmd, strlen(cmd), &num);
  256.     if (status < VI_SUCCESS)
  257.     {
  258.         return false;
  259.     }
  260.     return true;
  261. }
  262. //--------------------------------------------------------------------------
  263. bool cbt_sig_bt_inquiry(S_CBT_T *cbt)
  264. {
  265.     ViStatus status;
  266.     char cmd[BUF];
  267.     unsigned long num;
  268.     strcpy(cmd, "PROCedure:SIGNalling:ACTion INQuiry");
  269.     status = viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  270.     if (status < VI_SUCCESS)
  271.     {
  272.         return false;
  273.     }
  274.     return true;
  275. }
  276. //--------------------------------------------------------------------------
  277. bool cbt_sig_bt_connect_test(S_CBT_T *cbt)
  278. {
  279.     ViStatus status;
  280.     char cmd[BUF];
  281.     unsigned long num;
  282.     strcpy(cmd, "PROCedure:SIGNalling:ACTion TEST");
  283.     status = viWrite(cbt->s_bt, cmd, strlen(cmd), &num);
  284.     if (status < VI_SUCCESS)
  285.     {
  286.         return false;
  287.     }
  288.     return true;
  289. }
  290. //--------------------------------------------------------------------------
  291. bool cbt_sig_bt_query_state(S_CBT_T *cbt, 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(cbt->s_bt, cmd, strlen(cmd), &num);
  300.     if (status < VI_SUCCESS)
  301.     {
  302.         return false;
  303.     }
  304.     status = viRead(cbt->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 cbt_sig_bt_release(S_CBT_T *cbt)
  356. {
  357.     ViStatus status;
  358.     char cmd[BUF];
  359.     unsigned long num;
  360.     strcpy(cmd, "PROCedure:SIGNalling:ACTion DETach");
  361.     status = viWrite(cbt->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 cbt_sig_bt_config_mpr(S_CBT_T *cbt, 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(cbt->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(cbt->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(cbt->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(cbt->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(cbt->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 cbt_sig_bt_config_mod(S_CBT_T *cbt, 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(cbt->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(cbt->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(cbt->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(cbt->s_bt, cmd, strlen(cmd), &num);
  448.     if (status < VI_SUCCESS)
  449.     {
  450.         return false;
  451.     }
  452.     return true;
  453. }
  454. //---------------------------------------------------------------------------
  455. bool cbt_sig_bt_read_average_freq_error(S_CBT_T *cbt, 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(cbt->s_bt, cmd, strlen(cmd), &num);
  464.     if (status < VI_SUCCESS)
  465.     {
  466.         return false;
  467.     }
  468.     status = viRead(cbt->s_bt, buf, BUF, &num);
  469.     if (status < VI_SUCCESS)
  470.     {
  471.         return false;
  472.     }
  473.     buf[num-1] = NULL;
  474.     double d_result[CBT_BT_MOD_NUM];
  475.     AnsiString as_result(buf);
  476.     if (as_result.Pos("NAN"))
  477.     {
  478.         return false;
  479.     }
  480.     String_To_Array_double(buf, d_result, CBT_BT_MOD_NUM);
  481.     *freq_err = d_result[CBT_BT_MOD_FREQ_ACCURACY_AVERAGE];
  482.     return true;
  483. }