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

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) 2001
  8. *
  9. *****************************************************************************/
  10. /*****************************************************************************
  11.  *
  12.  * Filename:
  13.  * ---------
  14.  *   misc_BT.cpp
  15.  *
  16.  * Project:
  17.  * --------
  18.  *   Maui META APP
  19.  *
  20.  * Description:
  21.  * ------------
  22.  *  BT Misc. function source
  23.  *
  24.  * Author:
  25.  * -------
  26.  *  Andy Ueng (mtk00490)
  27.  *
  28.  *============================================================================
  29.  *             HISTORY
  30.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  31.  *------------------------------------------------------------------------------
  32.  * $Revision$
  33.  * $Modtime$
  34.  * $Log$
  35.  * 
  36.  *------------------------------------------------------------------------------
  37.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  38.  *============================================================================
  39.  ****************************************************************************/
  40. #include <vcl.h>
  41. #include <math.h>
  42.  
  43. #pragma hdrstop
  44. #ifndef META_DLL_H
  45. #include "meta.h"
  46. #endif
  47. #ifndef  _MAN_ERROR_H_
  48. #include "man_error.h"
  49. #endif
  50. #ifndef  _FT_UTILS_H_
  51. #include "ft_utils.h"
  52. #endif
  53. // BT
  54. #ifndef  _BT_COMMON_H_
  55. #include "bt_common.h"
  56. #endif
  57. #ifndef  _BT_HCI_H_
  58. #include "bt_hci.h"
  59. #endif
  60. //==============================================================================
  61. //////////////////////////////   Format transform  /////////////////////////////
  62. //==============================================================================
  63. bool  BTHCIValue_To_AnsiString( S_BT_HCI_VALUE hci_value, AnsiString &ansi_str )
  64. {
  65.     double value=0;
  66.     unsigned char  uc_value[BT_HCI_VALUE_SIZE*2];
  67.     int   i;
  68.     for( i=0; i<BT_HCI_VALUE_SIZE*2; i++ )
  69.     {
  70.         if( 0 == i % 2 )
  71.             uc_value[i] = hci_value.uc_value[i/2] & 0x0F;
  72.         else
  73.             uc_value[i] = (hci_value.uc_value[i/2] & 0xF0) >> 4;
  74.     }
  75.     for(  i=BT_HCI_VALUE_SIZE*2-1; i>=0; i-- )
  76.     {  value = value * 16 + uc_value[i];
  77.     }
  78.     ansi_str = Double_To_AnsiString( value );
  79.     return true;
  80. }
  81. //----------------------------------------------------------------------------
  82. bool  BTHCIValue_To_Hex_AnsiString( S_BT_HCI_VALUE hci_value, AnsiString &ansi_str )
  83. {
  84.     unsigned char  str[BT_HCI_VALUE_SIZE*2+1];
  85.     char  *ptr = str;
  86.     unsigned char  uc_value[BT_HCI_VALUE_SIZE*2];
  87.     unsigned char nz_byte=2*BT_HCI_VALUE_SIZE;
  88.     int   i;
  89.     for( i=0; i<BT_HCI_VALUE_SIZE*2; i++ )
  90.     {
  91.         if( 0 == i % 2 )
  92.             uc_value[i] = hci_value.uc_value[i/2] & 0x0F;
  93.         else
  94.             uc_value[i] = (hci_value.uc_value[i/2] & 0xF0) >> 4;
  95.     }
  96.     for( i=BT_HCI_VALUE_SIZE*2-1; i>=0; i-- )
  97.     {
  98.         if( 0 == uc_value[i] )
  99.            nz_byte--;
  100.         else
  101.            break;
  102.     }
  103.     for( i=0; i<nz_byte; i++ )
  104.     { //  sprintf( &str[nz_byte-i-1], "%X",  uc_value[i] );
  105.         ptr += sprintf( ptr, "%X", uc_value[nz_byte-i-1] );
  106.     }
  107.     str[nz_byte] = '';
  108.     ansi_str = (char *)str;
  109.     if( 0 == nz_byte )
  110.     ansi_str = "0";
  111.     return true;
  112. }
  113. //----------------------------------------------------------------------------
  114. bool  BDAddress_To_Hex_AnsiString( S_BD_ADDR bd_addr, AnsiString &ansi_str )
  115. {
  116.     int i;
  117.     char str[2*BD_ADDRESS_LEN+1];
  118.     char  *ptr = str;
  119.     for( i=0; i<BD_ADDRESS_LEN*2; i++ )
  120.     {
  121.         if( 0 == i%2 )
  122.         {
  123.             ptr += sprintf( ptr, "%X", (bd_addr.uc_BD_Addr[BD_ADDRESS_LEN-i/2-1] & 0xF0) >> 4 );
  124.         }
  125.         else
  126.         {
  127.             ptr += sprintf( ptr, "%X", bd_addr.uc_BD_Addr[BD_ADDRESS_LEN-i/2-1] & 0x0F );
  128.         }
  129.     }
  130.     str[2*BD_ADDRESS_LEN] = '';
  131.     ansi_str = str;
  132.     return true;
  133. }
  134. //----------------------------------------------------------------------------
  135. bool  BDAddress_To_Hex_Colon_AnsiString( S_BD_ADDR bd_addr, AnsiString &ansi_str )
  136. {
  137.     int i;
  138.     char str[3*BD_ADDRESS_LEN];
  139.     char  *ptr = str;
  140.     for( i=0; i<BD_ADDRESS_LEN*2; i++ )
  141.     {
  142.         if( 0 == i%2 )
  143.         {
  144.             ptr += sprintf( ptr, "%X", (bd_addr.uc_BD_Addr[BD_ADDRESS_LEN-i/2-1] & 0xF0) >> 4 );
  145.         }
  146.         else
  147.         {
  148.             ptr += sprintf( ptr, "%X", bd_addr.uc_BD_Addr[BD_ADDRESS_LEN-i/2-1] & 0x0F );
  149.             ptr += sprintf( ptr, ":" );
  150.         }
  151.     }
  152.     str[3*BD_ADDRESS_LEN-1] = '';
  153.     ansi_str = str;
  154.     return true;
  155. }
  156. //----------------------------------------------------------------------------
  157. bool  AnsiString_To_Hex_BDAddress( AnsiString ansi_str, S_BD_ADDR &bd_addr )
  158. {
  159.     char  str[256];
  160.     unsigned  char  val;
  161.     unsigned char  uc_value[BD_ADDRESS_LEN*2];
  162.    /* check if each char is valid */
  163.      int   i;
  164.       char  ch;
  165.       int   str_len = ansi_str.Length();
  166.       if(str_len==0)  return(false);
  167.       strcpy( str, ansi_str.c_str() );
  168.       for( i=0; i<BD_ADDRESS_LEN; i++ )
  169.       {   bd_addr.uc_BD_Addr[i] = 0;
  170.       }
  171.       for( i=0; i<BD_ADDRESS_LEN*2; i++ )
  172.       {   uc_value[i] = 0;
  173.       }
  174.       for( i=0; i<str_len; i++ )
  175.       {
  176.          val = 0;
  177.          ch = str[i];
  178.          if( (ch>='0')&&(ch<='9') )
  179.          {  val <<= 4;
  180.             val += ch-'0';
  181.          }
  182.          else if( (ch>='A')&&(ch<='F') )
  183.          {  val <<= 4;
  184.             val += ch-'A'+10;
  185.          }
  186.          else if( (ch>='a')&&(ch<='f') )
  187.          {  val <<= 4;
  188.             val += ch-'a'+10;
  189.          }
  190.          else if( ch==' ' )
  191.          {
  192.          }
  193.          else
  194.          {  return false;
  195.          }
  196.          uc_value[str_len-i-1] = val;
  197.       }
  198.       for( i=0; i<BD_ADDRESS_LEN; i++ )
  199.       {
  200.           bd_addr.uc_BD_Addr[i] = uc_value[2*i] + 16 * uc_value[2*i+1];
  201.       }
  202.    return( true );
  203. }
  204. //----------------------------------------------------------------------------
  205. bool  Colon_AnsiString_To_Hex_BDAddress( AnsiString ansi_str, S_BD_ADDR &bd_addr )
  206. {
  207.     char  str[256];
  208.     unsigned  char  val;
  209.     unsigned char  uc_value[BD_ADDRESS_LEN*2];
  210.    /* check if each char is valid */
  211.     int   i;
  212.     char  ch;
  213.     int   str_len = ansi_str.Length();
  214.     if(str_len!=(BD_ADDRESS_LEN*3-1))  return(false);
  215.     strcpy( str, ansi_str.c_str() );
  216.     for( i=0; i<BD_ADDRESS_LEN; i++ )
  217.     {   bd_addr.uc_BD_Addr[i] = 0;
  218.     }
  219.     for( i=0; i<BD_ADDRESS_LEN*2; i++ )
  220.     {   uc_value[i] = 0;
  221.     }
  222.     int count=0;
  223.     for( i=0; i<str_len; i++ )
  224.     {
  225.         val = 0;
  226.         ch = str[i];
  227.         if( (ch>='0')&&(ch<='9') )
  228.         {
  229.             val <<= 4;
  230.             val += ch-'0';
  231.             count++;
  232.         }
  233.         else if( (ch>='A')&&(ch<='F') )
  234.         {
  235.             val <<= 4;
  236.             val += ch-'A'+10;
  237.             count++;
  238.         }
  239.         else if( (ch>='a')&&(ch<='f') )
  240.         {
  241.             val <<= 4;
  242.             val += ch-'a'+10;
  243.             count++;
  244.         }
  245.         else if( ch==' ' || ch==':')
  246.         {
  247.             continue;
  248.         }
  249.         else
  250.         {
  251.             return false;
  252.         }
  253.         uc_value[BD_ADDRESS_LEN*2-count] = val;
  254.     }
  255.     for( i=0; i<BD_ADDRESS_LEN; i++ )
  256.     {
  257.         bd_addr.uc_BD_Addr[i] = uc_value[2*i] + 16 * uc_value[2*i+1];
  258.     }
  259.     return true;
  260. }
  261. //----------------------------------------------------------------------------
  262. bool  AnsiString_To_BTHCIValue( AnsiString ansi_str, S_BT_HCI_VALUE &out_value )
  263. {
  264.    /* check if each char is valid */
  265.    unsigned char  uc_value[BT_HCI_VALUE_SIZE*2];
  266.      int   i;
  267.       char  ch;
  268.       char  str[256];
  269.       int   str_len = ansi_str.Length();
  270.       if(str_len==0)  return(false);
  271.       strcpy( str, ansi_str.c_str() );
  272.       for( i=0; i<BT_HCI_VALUE_SIZE; i++ )
  273.       {   out_value.uc_value[i] = 0;
  274.       }
  275.       for( i=0; i<BT_HCI_VALUE_SIZE*2; i++ )
  276.       {   uc_value[i] = 0;
  277.       }
  278.       for( i=0; i<str_len; i++ )
  279.       {  ch = str[i];
  280.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  281.          break;
  282.       }
  283.       if( i!=str_len )
  284.          return(false);
  285.    /* convert string to integer */
  286.    double d_out_value = atof(ansi_str.c_str());
  287.    if( d_out_value >= pow(2.0, 160) )  return false;
  288.    for( i=0; i<str_len; i++ )
  289.    {
  290.        uc_value[str_len-i-1] = ansi_str.SubString(i+1,1).ToInt();
  291.    }
  292.    out_value.uc_nz_byte = 0;
  293.    for( i=0; i<sizeof(out_value.uc_value)/sizeof(out_value.uc_value[0]); i++ )
  294.    {
  295.           out_value.uc_value[i] = uc_value[2*i] + 16 * uc_value[2*i+1];
  296.          // out_value.uc_nz_byte++;
  297.    }
  298.    for( i=sizeof(out_value.uc_value)/sizeof(out_value.uc_value[0])-1; i>=0; i-- )
  299.    {
  300.        if( out_value.uc_value[i] != 0 )
  301.        {
  302.            out_value.uc_nz_byte = i+1;
  303.            break;
  304.        }
  305.    }
  306.    return true;
  307. }
  308. //----------------------------------------------------------------------------
  309. bool  AnsiString_Hex_To_BTHCIValue( AnsiString ansi_str, S_BT_HCI_VALUE &out_value )
  310. {
  311.     char  str[256];
  312.     unsigned  char  val;
  313.     unsigned char  uc_value[BT_HCI_VALUE_SIZE*2];
  314.    /* check if each char is valid */
  315.      int   i;
  316.       char  ch;
  317.       int   str_len = ansi_str.Length();
  318.       if(str_len==0)  return(false);
  319.       strcpy( str, ansi_str.c_str() );
  320.       for( i=0; i<sizeof(out_value.uc_value)/sizeof(out_value.uc_value[0]); i++ )
  321.       {   out_value.uc_value[i] = 0;
  322.       }
  323.       for( i=0; i<BT_HCI_VALUE_SIZE*2; i++ )
  324.       {   uc_value[i] = 0;
  325.       }
  326.       for( i=0; i<str_len; i++ )
  327.       {
  328.          val = 0;
  329.          ch = str[i];
  330.          if( (ch>='0')&&(ch<='9') )
  331.          {  val <<= 4;
  332.             val += ch-'0';
  333.          }
  334.          else if( (ch>='A')&&(ch<='F') )
  335.          {  val <<= 4;
  336.             val += ch-'A'+10;
  337.          }
  338.          else if( (ch>='a')&&(ch<='f') )
  339.          {  val <<= 4;
  340.             val += ch-'a'+10;
  341.          }
  342.          else if( ch==' ' )
  343.          {
  344.          }
  345.          else
  346.          {  return false;
  347.          }
  348.          uc_value[str_len-i-1] = val;
  349.       }
  350.       out_value.uc_nz_byte = 0;
  351.       for( i=0; i<sizeof(out_value.uc_value)/sizeof(out_value.uc_value[0]); i++ )
  352.       {
  353.           out_value.uc_value[i] = uc_value[2*i] + 16 * uc_value[2*i+1];
  354.          // if( out_value.uc_value[i] != 0 )
  355.          //     out_value.uc_nz_byte++;
  356.       }
  357.       for( i=sizeof(out_value.uc_value)/sizeof(out_value.uc_value[0])-1; i>=0; i-- )
  358.       {
  359.           if( out_value.uc_value[i] != 0 )
  360.           {
  361.               out_value.uc_nz_byte = i+1;
  362.               break;
  363.           }
  364.       }
  365.    return true;
  366. }
  367. //------------------------------------------------------------------------------
  368. bool  AnsiString_Hex_To_BTPIN( AnsiString ansi_str, S_BT_PIN &pt_pin )
  369. {
  370.     char  str[256];
  371.     unsigned char  val;
  372.     unsigned char  uc_value[BT_PIN_LEN*2];
  373.    /* check if each char is valid */
  374.      int   i;
  375.       char  ch;
  376.       int   str_len = ansi_str.Length();
  377.       if(str_len==0)  return(false);
  378.       pt_pin.uc_pin_len = str_len;
  379.    //   strcpy( str, ansi_str.c_str() );
  380.       strcpy( pt_pin.uc_PIN, ansi_str.c_str() );
  381. #if 0
  382.       for( i=0; i<BT_PIN_LEN; i++ )
  383.       {   pt_pin.uc_PIN[i] = 0;
  384.       }
  385.       for( i=0; i<BT_PIN_LEN*2; i++ )
  386.       {   uc_value[i] = 0;
  387.       }
  388.       for( i=0; i<str_len; i++ )
  389.       {
  390.          val = 0;
  391.          ch = str[i];
  392.          if( (ch>='0')&&(ch<='9') )
  393.          {  val <<= 4;
  394.             val += ch-'0';
  395.          }
  396.          else if( (ch>='A')&&(ch<='F') )
  397.          {  val <<= 4;
  398.             val += ch-'A'+10;
  399.          }
  400.          else if( (ch>='a')&&(ch<='f') )
  401.          {  val <<= 4;
  402.             val += ch-'a'+10;
  403.          }
  404.          else if( ch==' ' )
  405.          {
  406.          }
  407.          else
  408.          {  return false;
  409.          }
  410.          uc_value[str_len-i-1] = val;
  411.       }
  412.       for( i=0; i<BT_PIN_LEN; i++ )
  413.       {
  414.           pt_pin.uc_PIN[i] = uc_value[2*i] + 16 * uc_value[2*i+1];
  415.       }
  416. #endif
  417.       return true;
  418. }
  419. //==============================================================================
  420. //////////////////////////////    range check      /////////////////////////////
  421. //==============================================================================
  422. //----------------------------------------------------------------------------
  423. bool  IsValidHexBTHCIValue( AnsiString ansi_str, unsigned char bytes, S_BT_HCI_VALUE &hci_value, S_BT_HCI_VALUE &min_hci_value, S_BT_HCI_VALUE &max_hci_value )
  424. {
  425.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_BTHCIValue( ansi_str, hci_value ) , RANGE_ERR_BT_HCI_VALUE );
  426.     if( hci_value.uc_nz_byte > bytes )  return false;
  427.     AnsiString as_hci_value;
  428.     AnsiString as_min_hci_value;
  429.     AnsiString as_max_hci_value;
  430.     char str_hci_value[BT_HCI_VALUE_SIZE+1];
  431.     char str_min_hci_value[BT_HCI_VALUE_SIZE+1];
  432.     char str_max_hci_value[BT_HCI_VALUE_SIZE+1];
  433.     BTHCIValue_To_Hex_AnsiString( hci_value, as_hci_value );
  434.     BTHCIValue_To_Hex_AnsiString( min_hci_value, as_min_hci_value );
  435.     BTHCIValue_To_Hex_AnsiString( max_hci_value, as_max_hci_value );
  436.     strcpy( str_hci_value, as_hci_value.c_str() );
  437.     strcpy( str_min_hci_value, as_min_hci_value.c_str() );
  438.     strcpy( str_max_hci_value, as_max_hci_value.c_str() );
  439.     double d_hci_value = 0;
  440.     double d_min_hci_value = 0;
  441.     double d_max_hci_value = 0;
  442.     for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  443.     {
  444.         char val;
  445.         if( str_hci_value[i] == 0 )
  446.             break;
  447.          if( (str_hci_value[i]>='0')&&(str_hci_value[i]<='9') )
  448.          {
  449.             val = str_hci_value[i]-'0';
  450.          }
  451.          else if( (str_hci_value[i]>='A')&&(str_hci_value[i]<='F') )
  452.          {
  453.             val = str_hci_value[i]-'A'+10;
  454.          }
  455.          else if( (str_hci_value[i]>='a')&&(str_hci_value[i]<='f') )
  456.          {
  457.             val = str_hci_value[i]-'a'+10;
  458.          }
  459.          d_hci_value = d_hci_value*16 + val;
  460.     }
  461.     for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  462.     {
  463.         char val;
  464.         if( str_min_hci_value[i] == 0 )
  465.             break;
  466.          if( (str_min_hci_value[i]>='0')&&(str_min_hci_value[i]<='9') )
  467.          {
  468.             val = str_min_hci_value[i]-'0';
  469.          }
  470.          else if( (str_min_hci_value[i]>='A')&&(str_min_hci_value[i]<='F') )
  471.          {
  472.             val = str_min_hci_value[i]-'A'+10;
  473.          }
  474.          else if( (str_min_hci_value[i]>='a')&&(str_min_hci_value[i]<='f') )
  475.          {
  476.             val = str_min_hci_value[i]-'a'+10;
  477.          }
  478.          d_min_hci_value = d_min_hci_value*16 + val;
  479.     }
  480.     for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  481.     {
  482.         char val;
  483.         if( str_max_hci_value[i] == 0 )
  484.             break;
  485.          if( (str_max_hci_value[i]>='0')&&(str_max_hci_value[i]<='9') )
  486.          {
  487.             val = str_max_hci_value[i]-'0';
  488.          }
  489.          else if( (str_max_hci_value[i]>='A')&&(str_max_hci_value[i]<='F') )
  490.          {
  491.             val = str_max_hci_value[i]-'A'+10;
  492.          }
  493.          else if( (str_max_hci_value[i]>='a')&&(str_max_hci_value[i]<='f') )
  494.          {
  495.             val = str_max_hci_value[i]-'a'+10;
  496.          }
  497.          d_max_hci_value = d_max_hci_value*16 + val;
  498.     }
  499.     if( ( d_hci_value > d_max_hci_value ) ||
  500.         ( d_hci_value < d_min_hci_value )
  501.      )
  502.       return false;
  503.    return true;
  504. }
  505. //----------------------------------------------------------------------------
  506. bool  IsValidHexBDAddress( AnsiString ansi_str, S_BD_ADDR &bd_addr )
  507. {
  508.     if( ansi_str.AnsiPos(":") == 0 )
  509.     {
  510.         RANGE_CHECK_ERROR( !AnsiString_To_Hex_BDAddress( ansi_str, bd_addr ) , RANGE_ERR_BT_BD_ADDRESS );
  511.     }
  512.     else
  513.     {
  514.         RANGE_CHECK_ERROR( !Colon_AnsiString_To_Hex_BDAddress( ansi_str, bd_addr ) , RANGE_ERR_BT_BD_ADDRESS );
  515.     }
  516.     return true;
  517. }
  518. //----------------------------------------------------------------------------
  519. bool  IsValidDecBTHCIValue( AnsiString ansi_str, unsigned char bytes, S_BT_HCI_VALUE &hci_value, S_BT_HCI_VALUE &min_hci_value, S_BT_HCI_VALUE &max_hci_value )
  520. {
  521.     RANGE_CHECK_ERROR( !AnsiString_To_BTHCIValue( ansi_str, hci_value ) , RANGE_ERR_BT_HCI_VALUE );
  522.     if( hci_value.uc_nz_byte > bytes )  return false;
  523.     for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  524.     {
  525.         if(  (hci_value.uc_value[i] > max_hci_value.uc_value[i]) ||
  526.             (hci_value.uc_value[i] < min_hci_value.uc_value[i])
  527.          )
  528.             return false;
  529.     }
  530.     return true;
  531. }
  532. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  533. bool  IsValidHexBTHCIOpcode( AnsiString ansi_str, unsigned short &opcode )
  534. {
  535.    RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedShort( ansi_str, opcode ) , RANGE_ERR_BT_HCI_OPCODE );
  536.    return true;
  537. }
  538. //----------------------------------------------------------------------------
  539. bool  IsValidHexBTHCIEventIndex( AnsiString ansi_str, unsigned char &event_idx )
  540. {
  541.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedChar( ansi_str, event_idx ) , RANGE_ERR_BT_HCI_EVENT_INDEX );
  542.      return true;
  543. }
  544. //---------------------------------------------------------------------------
  545. bool  IsValidBTFreq( AnsiString ansi_str, unsigned char &freq )
  546. {
  547.    RANGE_CHECK_ERROR( !AnsiString_To_UnsignedChar( ansi_str, freq, 0, 255 ) , RANGE_ERR_BT_FREQ );
  548.    return true;
  549. }
  550. //---------------------------------------------------------------------------
  551. bool  IsValidBTTxDataLength( AnsiString ansi_str, unsigned short &len, unsigned short range_min, unsigned short range_max )
  552. {
  553.    RANGE_CHECK_ERROR( !AnsiString_To_UnsignedShort( ansi_str, len, range_min, range_max ) , RANGE_ERR_BT_TX_DATA_LENGTH );
  554.    return true;
  555. }
  556. //---------------------------------------------------------------------------
  557. bool  IsValidBTTxPollPeriod( AnsiString ansi_str, unsigned char &period )
  558. {
  559.    RANGE_CHECK_ERROR( !AnsiString_To_UnsignedChar( ansi_str, period, 0, 255 ) , RANGE_ERR_BT_TX_POLL_PERIOD );
  560.    return true;
  561. }
  562. //---------------------------------------------------------------------------
  563. bool  IsValidBTTxPacketCount( AnsiString ansi_str, unsigned int &count )
  564. {
  565.     RANGE_CHECK_ERROR( !AnsiString_To_UnsignedInteger( ansi_str, count, 0, 4294967295 ) , RANGE_ERR_BT_TX_PACKET_COUNT );
  566.     return true;
  567. }
  568. //---------------------------------------------------------------------------
  569. bool  IsValidBTTxPcl( AnsiString ansi_str, unsigned char &pcl )
  570. {
  571.    RANGE_CHECK_ERROR( !AnsiString_To_UnsignedChar( ansi_str, pcl, 1, 7 ) , RANGE_ERR_BT_TX_PCL );
  572.    return true;
  573. }
  574. //---------------------------------------------------------------------------
  575. bool  IsValidHexBTLAP( AnsiString ansi_str, unsigned int &lap )
  576. {
  577.    RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedInt( ansi_str, lap ) , RANGE_ERR_BT_TX_LAP );
  578.    return true;
  579. }
  580. //---------------------------------------------------------------------------
  581. bool  IsValidHexBTTxAccessCode( AnsiString ansi_str, unsigned char &code )
  582. {
  583.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedChar( ansi_str, code, 0, 255  ) , RANGE_ERR_BT_TX_ACCESS_CODE );
  584.     return true;
  585. }
  586. //---------------------------------------------------------------------------
  587. bool IsValidDecBTHCIValue( AnsiString ansi_str, unsigned char bytes, S_BT_HCI_VALUE &value )
  588. {
  589.     RANGE_CHECK_ERROR( !AnsiString_To_BTHCIValue( ansi_str, value ) , RANGE_ERR_BT_HCI_VALUE );
  590.    // unsigned char nz_count = 0;
  591.    // for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  592.    // {
  593.    //     if(  value.uc_value[i] != 0 )
  594.    //         nz_count++;
  595.    // }
  596.     if( value.uc_nz_byte > bytes )  return false;
  597.    // value.uc_nz_byte = nz_count;
  598.     return true;
  599. }
  600. //---------------------------------------------------------------------------
  601. bool IsValidHexBTHCIValue( AnsiString ansi_str, unsigned char bytes, S_BT_HCI_VALUE &value )
  602. {
  603.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_BTHCIValue( ansi_str, value ) , RANGE_ERR_BT_HCI_VALUE );
  604.    // unsigned char nz_count = 0;
  605.    // for( int i=0; i<BT_HCI_VALUE_SIZE; i++ )
  606.    // {
  607.    //     if(  value.uc_value[i] != 0 )
  608.    //         nz_count++;
  609.    // }
  610.     if( value.uc_nz_byte > bytes )  return false;
  611.    // value.uc_nz_byte = nz_count;
  612.     return true;
  613. }
  614. //---------------------------------------------------------------------------
  615. bool IsValidHexBTPIN( AnsiString ansi_str, S_BT_PIN &pin )
  616. {
  617.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_BTPIN( ansi_str, pin ) , RANGE_ERR_BT_PIN );
  618.     return true;
  619. }
  620. //---------------------------------------------------------------------------
  621. bool IsValidHexBDAddress( AnsiString ansi_str, unsigned char &address )
  622. {
  623.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedChar( ansi_str, address, 0, 15  ) , RANGE_ERR_BT_BD_ADDRESS );
  624.     return true;
  625. }
  626. //---------------------------------------------------------------------------
  627. bool  IsValidBTTimeout( AnsiString ansi_str, unsigned int &timeout )
  628. {   RANGE_CHECK_ERROR( !AnsiString_To_UnsignedInteger( ansi_str, timeout, 0, 10000000 ) , RANGE_ERR_BT_TIMEOUT );
  629.    return true;
  630. }
  631. //============================================================================
  632. //////////////////////////      ESCO     /////////////////////////////////////
  633. //============================================================================
  634. bool IsValidTxBandwidth( AnsiString ansi_str, unsigned int &ui_bandwidth )
  635. {
  636.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedInt( ansi_str, ui_bandwidth  ) , RANGE_ERR_BT_TX_BANDWIDTH );
  637.     return true;
  638. }
  639. //---------------------------------------------------------------------------
  640. bool IsValidRxBandwidth( AnsiString ansi_str, unsigned int &ui_bandwidth )
  641. {
  642.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedInt( ansi_str, ui_bandwidth ) , RANGE_ERR_BT_RX_BANDWIDTH );
  643.     return true;
  644. }
  645. //---------------------------------------------------------------------------
  646. bool IsValidMaxLatency( AnsiString ansi_str, unsigned short &us_latency )
  647. {
  648.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedShort( ansi_str, us_latency  ) , RANGE_ERR_BT_MAX_LATENCY );
  649.     return true;
  650. }
  651. //---------------------------------------------------------------------------
  652. bool IsValidRetransmissionEffort( AnsiString ansi_str, unsigned char &uc_effort )
  653. {
  654.     RANGE_CHECK_ERROR( !AnsiString_Hex_To_UnsignedChar( ansi_str, uc_effort, 0, 0x02  ) , RANGE_ERR_BT_RETRANSMISSION_EFFORT );
  655.     return true;
  656. }