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

MTK

开发平台:

C++ Builder

  1. #include <assert.h>
  2. #pragma hdrstop
  3. #ifndef _BT_MT_PARSE_H_
  4. #include "bt_mt_parse.h"
  5. #endif
  6. //=============================================================================
  7. CBTMTPARSE::CBTMTPARSE(void)
  8. {
  9.     Reset();
  10. }
  11. //-----------------------------------------------
  12. void  CBTMTPARSE::Reset(void)
  13. {
  14.     for (int n = 0; n < VARCOUNT; n++)
  15.     {
  16.         VarData[n] = 0;
  17.     }
  18.     for (int n = 0; n < CMDSIZE; n++)
  19.     {
  20.         Command[n] = 0;
  21.     }
  22.     for (int i = 0; i < MAX_EVENT_NUM; i++)
  23.     {
  24.         for (int n = 0; n < EVTSIZE; n++)
  25.         {
  26.             m_ucEvent[i][n] = 0;
  27.         }
  28.     }
  29.     for (int i = 0; i < MAX_EVENT_NUM; i++)
  30.     {
  31.         for (int n = 0; n < EVTSIZE; n++)
  32.         {
  33.             m_ucEvtTag[i][n]  = 0;
  34.         }
  35.     }
  36.     StrType = STRTYPE_NONE;
  37.     StrValue = 0;
  38.     StrValue2 = 0;
  39.     StrArg1 = 0;
  40.     StrArg2 = 0;
  41.     StrArg3 = 0;
  42.     StrLen = 0;
  43.     CmdLen = 0;
  44.     for (int i = 0; i < MAX_EVENT_NUM; i++)
  45.     {
  46.         m_iEvtLen[i] = 0;
  47.     }
  48. }
  49. //-----------------------------------------------
  50. int CBTMTPARSE::PreParseString(int i_event_idx, char *str)
  51. {  int  v, n;
  52.    char *p = str;
  53.    StrType = STRTYPE_NONE;
  54.    for( n=0; *p==' '; n++ )  {  p++;  }
  55.    if( (p[0]=='H')&&(p[1]=='C')&&(p[2]=='I') )
  56.    {  p = GotoDataFiled( &(p[3]), 1 );
  57.       if(p==0)  return(0);
  58.       GetDecimalData( p );
  59.       StrType = STRTYPE_HCI;
  60.    }
  61.    else if( (p[0]=='L')&&(p[1]=='O')&&(p[2]=='G')&&(p[3]=='P')&&(p[4]=='A')&&(p[5]=='T')&&(p[6]=='H') )
  62.    {  p = GotoDataFiled( &(p[7]), 0 );
  63.       if(p==0)  return(0);
  64.       GetStringData( p );
  65.       StrType = STRTYPE_LOGPATH;
  66.    }
  67.    else if( (p[0]=='T')&&(p[1]=='I')&&(p[2]=='T')&&(p[3]=='L')&&(p[4]=='E') )
  68.    {  p = GotoDataFiled( &(p[5]), 0 );
  69.       if(p==0)  return(0);
  70.       GetStringData( p );
  71.       StrType = STRTYPE_TITLE;
  72.    }
  73.    else if( (p[0]=='P')&&(p[1]=='R')&&(p[2]=='O')&&(p[3]=='C') )
  74.    {  p = GotoDataFiled( &(p[4]), 0 );
  75.       if(p==0)  return(0);
  76.       GetStringData( p );
  77.       StrType = STRTYPE_PROCNAME;
  78.    }
  79.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T')&&(p[4]=='P')&&(p[5]=='R')&&(p[6]=='O')&&(p[7]=='C') )
  80.    {  p = GotoDataFiled( &(p[8]), 0 );
  81.       if(p==0)  return(0);
  82.       GetStringData( p );
  83.       StrType = STRTYPE_WAITPROCNAME;
  84.    }
  85.    else if( (p[0]=='T')&&(p[1]=='I')&&(p[2]=='M')&&(p[3]=='E')&&(p[4]=='O')&&(p[5]=='U')&&(p[6]=='T') )
  86.    {  p = GotoDataFiled( &(p[7]), 0 );
  87.       if(p==0)  return(0);
  88.       GetDecimalData( p );
  89.       StrType = STRTYPE_TIMEOUT;
  90.    }
  91.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T') )
  92.    {  p = GotoDataFiled( &(p[4]), 0 );
  93.       if(p==0)  return(0);
  94.       GetDecimalData( p );
  95.       StrType = STRTYPE_WAIT;
  96.    }
  97.    else if( (p[0]=='x')||(p[0]=='y')||(p[0]=='z')||(p[0]=='X')||(p[0]=='Y')||(p[0]=='Z') )
  98.    {  if((*p=='x')||(*p=='y')||(*p=='z'))
  99.          v = (p[0]-'x')*10+(p[1]-'0');
  100.       if((*p=='X')||(*p=='Y')||(*p=='Z'))
  101.          v = (p[0]-'X')*10+(p[1]-'0');
  102.       StrValue2 = v;
  103.       p = GotoDataFiled( &(p[2]), 0 );
  104.       if(p==0)  return(0);
  105.       StrValue = ByteHexStr2Int(p);
  106.       if( StrValue<0 )  return(0);
  107.       StrType = STRTYPE_VAR;
  108.    }
  109.    else if( (p[0]=='T')&&(p[1]=='X') )
  110.    {  p = GotoDataFiled( &(p[2]), 1 );
  111.       if(p==0)  return(0);
  112.       GetStringData(p);
  113.       if (('0' == p[0]) && ('1' == p[1]))
  114.       {
  115.           StrType = STRTYPE_TX_HCI_CMD;
  116.           CmdLen = 0;
  117.       }
  118.       else if (('0' == p[0]) && ('2' == p[1]))
  119.       {
  120.           StrType = STRTYPE_TX_ACL_DATA;
  121.       }
  122.       else if (('0' == p[0]) && ('3' == p[1]))
  123.       {
  124.           StrType = STRTYPE_TX_SCO_DATA;
  125.       }
  126.    }
  127.    else if((p[0]=='R')&&(p[1]=='X'))
  128.    {  p = GotoDataFiled(&(p[2]), 1);
  129.       if(p==0)  return(0);
  130.       GetStringData( p );
  131.       if (('0' == p[0]) && ('2' == p[1]))
  132.       {
  133.           StrType = STRTYPE_RX_ACL_DATA;
  134.       }
  135.       else if (('0' == p[0]) && ('3' == p[1]))
  136.       {
  137.           StrType = STRTYPE_RX_SCO_DATA;
  138.       }
  139.       else if (('0' == p[0]) && ('4' == p[1]))
  140.       {
  141.           StrType = STRTYPE_RX_HCI_EVENT;
  142.           m_iEvtLen[i_event_idx] = 0;
  143.       }
  144.    }
  145.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T')&&(p[4]=='R')&&(p[5]=='X') )
  146.    {  p = GotoDataFiled( &(p[6]), 1 );
  147.       if(p==0)  return(0);
  148.       GetStringData( p );
  149.       m_iEvtLen[i_event_idx] = 0;
  150.       StrType = STRTYPE_WAITRX;
  151.    }
  152.    else if( (p[0]=='S')&&(p[1]=='I')&&(p[2]=='M')&&(p[3]=='R')&&(p[4]=='X') )
  153.    {  p = GotoDataFiled( &(p[5]), 1 );
  154.       if(p==0)  return(0);
  155.       GetStringData( p );
  156.       StrType = STRTYPE_SIMRX;
  157.    }
  158.    else if( (p[0]=='P')&&(p[1]=='A')&&(p[2]=='T')&&(p[3]=='C')&&(p[4]=='H') )
  159.    {  p = GotoDataFiled( &(p[5]), 1 );
  160.       if(p==0)  return(0);
  161.       GetStringData( p );
  162.       StrType = STRTYPE_PATCH;
  163.    }
  164.    else if( (p[0]=='B')&&(p[1]=='A')&&(p[2]=='U')&&(p[3]=='D')&&(p[4]=='R')&&(p[5]=='A')&&(p[6]=='T')&&(p[7]=='E') )
  165.    {  p = GotoDataFiled( &(p[8]), 1 );
  166.       if(p==0)  return(0);
  167.       StrValue = *p - '0';
  168.       StrType = STRTYPE_BAUDRATE;
  169.    }
  170.    else if( (p[0]=='F')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='L')&&(p[4]=='P')&&(p[5]=='R')&&(p[6]=='O')&&(p[7]=='C') )
  171.    {  StrType = STRTYPE_FAILPROC;
  172.    }
  173.    else if( (p[0]=='F')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='L')&&(p[4]=='E')&&(p[5]=='N')&&(p[6]=='D') )
  174.    {  StrType = STRTYPE_FAILEND;
  175.    }
  176.    else if( (p[0]=='G')&&(p[1]=='O')&&(p[2]=='T')&&(p[3]=='O')&&(p[4]=='N')&&(p[5]=='E')&&(p[6]=='X')&&(p[7]=='T')&&(p[8]=='P')&&(p[9]=='R')&&(p[10]=='O')&&(p[11]=='C') )
  177.    {  StrType = STRTYPE_GOTONEXTPROC;
  178.    }
  179.    else if( (p[0]=='F')&&(p[1]=='O')&&(p[2]=='R')&&(p[3]=='C')&&(p[4]=='E')&&(p[5]=='E')&&(p[6]=='N')&&(p[7]=='D') )
  180.    {  StrType = STRTYPE_FORCEEND;
  181.    }
  182.    else if( (p[0]=='S')&&(p[1]=='H')&&(p[2]=='O')&&(p[3]=='W')&&(p[4]=='M')&&(p[5]=='S')&&(p[6]=='G') )
  183.    {  p = GotoDataFiled( &(p[7]), 1 );
  184.       if(p==0)  return(0);
  185.       GetStringData( p );
  186.       StrType = STRTYPE_SHOWMSG;
  187.    }
  188.    else if( (p[0]=='K')&&(p[1]=='Y')&&(p[2]=='L')&&(p[3]=='E') )
  189.    {  p = GotoDataFiled( &(p[8]), 0 );
  190.       if(p==0)  return(0);
  191.       StrArg1 = GetDecimalArg( p );
  192.       StrArg2 = GetDecimalArg( p );
  193.       StrArg3 = GetDecimalArg( p );
  194.       StrType = STRTYPE_KYLE;
  195.    }
  196.    else if( (p[0]=='E')&&(p[1]=='N')&&(p[2]=='D') )
  197.    {  StrType = STRTYPE_END;
  198.    }
  199.    else  if( n>=3 )  // 3 space in front of this line
  200.    {  GetStringData( p );
  201.       StrType = STRTYPE_CONTI;
  202.    }
  203.    return(1);
  204. }
  205. //-----------------------------------------------
  206. int CBTMTPARSE::PreParseStringType(char *str)
  207. {  int  n;
  208.    char *p = str;
  209.    StrType = STRTYPE_NONE;
  210.    for( n=0; *p==' '; n++ )  {  p++;  }
  211.    if( (p[0]=='H')&&(p[1]=='C')&&(p[2]=='I') )
  212.    {  StrType = STRTYPE_HCI;     }
  213.    else if( (p[0]=='L')&&(p[1]=='O')&&(p[2]=='G')&&(p[3]=='P')&&(p[4]=='A')&&(p[5]=='T')&&(p[6]=='H') )
  214.    {  StrType = STRTYPE_LOGPATH; }
  215.    else if( (p[0]=='T')&&(p[1]=='I')&&(p[2]=='T')&&(p[3]=='L')&&(p[4]=='E') )
  216.    {  p = GotoDataFiled( &(p[5]), 0 );
  217.       if(p==0)  return(0);
  218.       GetStringData( p );
  219.       StrType = STRTYPE_TITLE;
  220.       return(1);
  221.    }
  222.    else if( (p[0]=='P')&&(p[1]=='R')&&(p[2]=='O')&&(p[3]=='C') )
  223.    {  p = GotoDataFiled( &(p[4]), 0 );
  224.       if(p==0)  return(0);
  225.       GetStringData( p );
  226.       StrType = STRTYPE_PROCNAME;
  227.       return(1);
  228.    }
  229.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T')&&(p[4]=='P')&&(p[5]=='R')&&(p[6]=='O')&&(p[7]=='C') )
  230.    {  p = GotoDataFiled( &(p[8]), 0 );
  231.       if(p==0)  return(0);
  232.       GetStringData( p );
  233.       StrType = STRTYPE_WAITPROCNAME;
  234.       return(1);
  235.    }
  236.    else if( (p[0]=='T')&&(p[1]=='I')&&(p[2]=='M')&&(p[3]=='E')&&(p[4]=='O')&&(p[5]=='U')&&(p[6]=='T') )
  237.    {  StrType = STRTYPE_TIMEOUT;}
  238.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T') )
  239.    {  StrType = STRTYPE_WAIT;   }
  240.    else if( (p[0]=='x')||(p[0]=='y')||(p[0]=='z')||(p[0]=='X')||(p[0]=='Y')||(p[0]=='Z') )
  241.    {  StrType = STRTYPE_VAR;    }
  242.    else if((p[0]=='T')&&(p[1]=='X'))
  243.    {
  244.         p = GotoDataFiled(&(p[2]), 1);
  245.         if (p==0)
  246.         {
  247.             return(0);
  248.         }
  249.         if (('0' == p[0]) && ('1' == p[1]))
  250.         {
  251.             StrType = STRTYPE_TX_HCI_CMD;
  252.         }
  253.         else if (('0' == p[0]) && ('2' == p[1]))
  254.         {
  255.             StrType = STRTYPE_TX_ACL_DATA;
  256.         }
  257.         else if (('0' == p[0]) && ('3' == p[1]))
  258.         {
  259.             StrType = STRTYPE_TX_SCO_DATA;
  260.         }
  261.    }
  262.    else if ((p[0]=='R') && (p[1]=='X'))
  263.    {
  264.         p = GotoDataFiled(&(p[2]), 1);
  265.         if(p==0)  return(0);
  266.         if (('0' == p[0]) && ('2' == p[1]))
  267.         {
  268.             StrType = STRTYPE_RX_ACL_DATA;
  269.         }
  270.         else if (('0' == p[0]) && ('3' == p[1]))
  271.         {
  272.             StrType = STRTYPE_RX_SCO_DATA;
  273.         }
  274.         else if (('0' == p[0]) && ('4' == p[1]))
  275.         {
  276.             StrType = STRTYPE_RX_HCI_EVENT;
  277.         }
  278.    }
  279.    else if( (p[0]=='W')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='T')&&(p[4]=='R')&&(p[5]=='X') )
  280.    {  StrType = STRTYPE_WAITRX; }
  281.    else if( (p[0]=='S')&&(p[1]=='I')&&(p[2]=='M')&&(p[3]=='R')&&(p[4]=='X') )
  282.    {  StrType = STRTYPE_SIMRX;  }
  283.    else if( (p[0]=='P')&&(p[1]=='A')&&(p[2]=='T')&&(p[3]=='C')&&(p[4]=='H') )
  284.    {  StrType = STRTYPE_PATCH;  }
  285.    else if( (p[0]=='B')&&(p[1]=='A')&&(p[2]=='U')&&(p[3]=='D')&&(p[4]=='R')&&(p[5]=='A')&&(p[6]=='T')&&(p[7]=='E') )
  286.    {  StrType = STRTYPE_BAUDRATE;  }
  287.    else if( (p[0]=='F')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='L')&&(p[4]=='P')&&(p[5]=='R')&&(p[6]=='O')&&(p[7]=='C') )
  288.    {  StrType = STRTYPE_FAILPROC;  }
  289.    else if( (p[0]=='F')&&(p[1]=='A')&&(p[2]=='I')&&(p[3]=='L')&&(p[4]=='E')&&(p[5]=='N')&&(p[6]=='D') )
  290.    {  StrType = STRTYPE_FAILEND;   }
  291.    else if( (p[0]=='G')&&(p[1]=='O')&&(p[2]=='T')&&(p[3]=='O')&&(p[4]=='N')&&(p[5]=='E')&&(p[6]=='X')&&(p[7]=='T')&&(p[8]=='P')&&(p[9]=='R')&&(p[10]=='O')&&(p[11]=='C') )
  292.    {  StrType = STRTYPE_GOTONEXTPROC;  }
  293.    else if( (p[0]=='F')&&(p[1]=='O')&&(p[2]=='R')&&(p[3]=='C')&&(p[4]=='E')&&(p[5]=='E')&&(p[6]=='N')&&(p[7]=='D') )
  294.    {  StrType = STRTYPE_FORCEEND;  }
  295.    else if( (p[0]=='S')&&(p[1]=='H')&&(p[2]=='O')&&(p[3]=='W')&&(p[4]=='M')&&(p[5]=='S')&&(p[6]=='G') )
  296.    {  StrType = STRTYPE_SHOWMSG;   }
  297.    else if( (p[0]=='K')&&(p[1]=='Y')&&(p[2]=='L')&&(p[3]=='E') )
  298.    {  StrType = STRTYPE_KYLE;   }
  299.    else if( (p[0]=='E')&&(p[1]=='N')&&(p[2]=='D') )
  300.    {  StrType = STRTYPE_END;    }
  301.    else  if( n>=3 )  // 3 space in front of this line
  302.    {  StrType = STRTYPE_CONTI;  }
  303.    return(1);
  304. }
  305. //-----------------------------------------------
  306. char *CBTMTPARSE::GotoDataFiled( char *p, int mode  )
  307. {  if(mode==0)
  308.    {  while( *p==' ' )  p++;
  309.       if(*p++!=':')  return(0);
  310.       while( *p==' ' )  p++;
  311.    }
  312.    else
  313.    {  if((*p>='1')&&(*p<'9'))
  314.       {  StrValue2 = *p - '0';   p++;    }
  315.       else
  316.       {  StrValue2 = 0;          p++;    }
  317.       while( *p==' ' )  p++;
  318.       if(*p++!=':')  return(0);
  319.       while( *p==' ' )  p++;
  320.    }
  321.    return(p);
  322. }
  323. //-----------------------------------------------
  324. void CBTMTPARSE::GetStringData( char *p )
  325. {  int n;
  326.    for( n=0; (*p!=0)&&(*p!='n'); n++)
  327.    {  if( (p[0]=='/')&&(p[1]=='/') )   break;  // ignore comment "//"
  328.       if( (p[0]=='\')&&(p[1]=='\') ) break;  // ignore comment "//"
  329.       String[n] = *p++;
  330.    }
  331.    String[n] = 0;
  332.    StrLen = n;
  333. }
  334. //-----------------------------------------------
  335. void CBTMTPARSE::GetDecimalData( char *p )
  336. {  int v;
  337.    for(v=0; (*p>='0')&&(*p<='9'); p++ )
  338.    { v = v*10 + (*p-'0');  }
  339.    StrValue = v;
  340. }
  341. //-----------------------------------------------
  342. int CBTMTPARSE::GetDecimalArg( char *p )
  343. {  int v;
  344.    while(*p==' ') p++;
  345.    for(v=0; (*p>='0')&&(*p<='9'); p++ )
  346.    { v = v*10 + (*p-'0');  }
  347.    return(v);
  348. }
  349. //-----------------------------------------------
  350. int CBTMTPARSE::ByteHexStr2Int( char *p )
  351. {  int n, v = 0;
  352.    for(n=0; n<2; n++)
  353.    {
  354.            if( (*p>='0')&&(*p<='9') )  v = v*16 + (*p-'0');
  355.       else if( (*p>='A')&&(*p<='F') )  v = v*16 + (10+*p-'A');
  356.       else if( (*p>='a')&&(*p<='f') )  v = v*16 + (10+*p-'a');
  357.       else return(-1);
  358.       p++;
  359.    }
  360.    return(v);
  361. }
  362. //-----------------------------------------------
  363. // "00 11 00 11 A5 33 DE FF x1 x2 x3"
  364. bool CBTMTPARSE::String2Command(void)
  365. {
  366.     int  v;
  367.     char *p = String;
  368.     while ((p[0]!=0) && (p[1]!=0))
  369.     {
  370.         if ((*p=='x')||(*p=='y')||(*p=='z'))
  371.         {
  372.             v = VarData[10*(p[0]-'x')+(p[1]-'0')];
  373.         }
  374.         else
  375.         {
  376.             v = ByteHexStr2Int(p);
  377.             if (v < 0)
  378.             {
  379.                 return false;
  380.             }
  381.         }
  382.         Command[CmdLen] = v;
  383.         CmdLen++;
  384.         p+=2;
  385.         while(*p==' ')  p++; //delete space
  386.     }
  387.     return true;
  388. }
  389. //-----------------------------------------------
  390. // "00 11 00 11 A5 33 DE FF x1 x2 x3"
  391. bool CBTMTPARSE::String2TxAclData(void)
  392. {
  393.     int  v;
  394.     char *p = String;
  395.     while ((p[0]!=0) && (p[1]!=0))
  396.     {
  397.         if ((*p == 'x') || (*p == 'y') || (*p == 'z'))
  398.         {
  399.             v = VarData[10*(p[0]-'x')+(p[1]-'0')];
  400.         }
  401.         else
  402.         {
  403.             v = ByteHexStr2Int(p);
  404.             if (v < 0)
  405.             {
  406.                 return false;
  407.             }
  408.         }
  409.         m_ucTxAclData[m_iTxAclDataLen] = v;
  410.         m_iTxAclDataLen++;
  411.         p+=2;
  412.         while(*p==' ')  p++; //delete space
  413.     }
  414.     return true;
  415. }
  416. //-----------------------------------------------
  417. // "00 11 00 11 ?? ?? 35 ?? 33 DE FF x1 x2 x3 AA X8 X9 Y9 *"
  418. bool CBTMTPARSE::String2Event(int i_event_idx)
  419. {
  420.     int  v;
  421.     char *p = String;
  422.     m_iEvtLen[i_event_idx] = 0;
  423.     while ((p[0]!=0) && (p[1]!=0))
  424.     {
  425.         if ((*p=='x') || (*p=='y') || (*p=='z'))
  426.         {
  427.             m_ucEvtTag[i_event_idx][m_iEvtLen[i_event_idx]] = 1;
  428.             v =  10*(p[0]-'x')+(p[1]-'0');
  429.         }
  430.         else if ((*p=='X') || (*p=='Y') || (*p=='Z'))
  431.         {
  432.             m_ucEvtTag[i_event_idx][m_iEvtLen[i_event_idx]] = 2;
  433.             v =  10*(p[0]-'X')+(p[1]-'0');
  434.         }
  435.         else if ((p[0] == '?') && (p[1] == '?'))
  436.         {
  437.             m_ucEvtTag[i_event_idx][m_iEvtLen[i_event_idx]] = 3;
  438.             v =  0;
  439.         }
  440.         else if (p[0]=='*')
  441.         {
  442.             m_ucEvtTag[i_event_idx][m_iEvtLen[i_event_idx]] = 4;
  443.             v =  0;
  444.         }
  445.         else
  446.         {
  447.             assert(i_event_idx < MAX_EVENT_NUM);
  448.             assert(m_iEvtLen[i_event_idx] < EVTSIZE);
  449.             m_ucEvtTag[i_event_idx][m_iEvtLen[i_event_idx]] = 0;
  450.             v = ByteHexStr2Int(p);
  451.             if (v < 0)
  452.             {
  453.                 return false;
  454.             }
  455.         }
  456.         m_ucEvent[i_event_idx][m_iEvtLen[i_event_idx]] = v;
  457.         m_iEvtLen[i_event_idx]++;
  458.         p += 2;
  459.         while (*p == ' ')  p++; //delete space
  460.     }
  461.     return true;
  462. }
  463. //-----------------------------------------------
  464. // "00 11 00 11 ?? ?? 35 ?? 33 DE FF x1 x2 x3 AA X8 X9 Y9 *"
  465. bool CBTMTPARSE::String2AutoEvent(int i_event_idx)
  466. {
  467.     int  v;
  468.     char *p = String;
  469.     m_iAutoEvtLen[i_event_idx] = 0;
  470.     while ((p[0]!=0) && (p[1]!=0))
  471.     {
  472.         if ((*p=='x') || (*p=='y') || (*p=='z'))
  473.         {
  474.             m_ucAutoEvtTag[i_event_idx][m_iAutoEvtLen[i_event_idx]] = 1;
  475.             v =  10*(p[0]-'x')+(p[1]-'0');
  476.         }
  477.         else if ((*p=='X') || (*p=='Y') || (*p=='Z'))
  478.         {
  479.             m_ucAutoEvtTag[i_event_idx][m_iAutoEvtLen[i_event_idx]] = 2;
  480.             v =  10*(p[0]-'X')+(p[1]-'0');
  481.         }
  482.         else if ((p[0] == '?') && (p[1] == '?'))
  483.         {
  484.             m_ucAutoEvtTag[i_event_idx][m_iAutoEvtLen[i_event_idx]] = 3;
  485.             v =  0;
  486.         }
  487.         else if (p[0]=='*')
  488.         {
  489.             m_ucAutoEvtTag[i_event_idx][m_iAutoEvtLen[i_event_idx]] = 4;
  490.             v =  0;
  491.         }
  492.         else
  493.         {
  494.             assert(i_event_idx < MAX_EVENT_NUM);
  495.             assert(m_iAutoEvtLen[i_event_idx] < EVTSIZE);
  496.             m_ucAutoEvtTag[i_event_idx][m_iAutoEvtLen[i_event_idx]] = 0;
  497.             v = ByteHexStr2Int(p);
  498.             if (v < 0)
  499.             {
  500.                 return false;
  501.             }
  502.         }
  503.         m_ucAutoEvent[i_event_idx][m_iAutoEvtLen[i_event_idx]] = v;
  504.         m_iAutoEvtLen[i_event_idx]++;
  505.         p += 2;
  506.         while (*p == ' ')  p++; //delete space
  507.     }
  508.     return true;
  509. }
  510. //-----------------------------------------------
  511. // "00 11 00 11 ?? ?? 35 ?? 33 DE FF x1 x2 x3 AA X8 X9 Y9 *"
  512. bool CBTMTPARSE::String2RxAclData(void)
  513. {
  514.     int  v;
  515.     char *p = String;
  516.     m_iTxAclDataLen = 0;
  517.     while ((p[0]!=0) && (p[1]!=0))
  518.     {
  519.         if ((*p=='x') || (*p=='y') || (*p=='z'))
  520.         {
  521.             m_ucRxAclDataTag[m_iRxAclDataLen] = 1;
  522.             v =  10*(p[0]-'x')+(p[1]-'0');
  523.         }
  524.         else if ((*p=='X') || (*p=='Y') || (*p=='Z'))
  525.         {
  526.             m_ucRxAclDataTag[m_iRxAclDataLen] = 2;
  527.             v =  10*(p[0]-'X')+(p[1]-'0');
  528.         }
  529.         else if ((p[0] == '?') && (p[1] == '?'))
  530.         {
  531.             m_ucRxAclDataTag[m_iRxAclDataLen] = 3;
  532.             v =  0;
  533.         }
  534.         else if (p[0]=='*')
  535.         {
  536.             m_ucRxAclDataTag[m_iRxAclDataLen] = 4;
  537.             v =  0;
  538.         }
  539.         else
  540.         {
  541.             assert(m_iRxAclDataLen < MAX_ACL_DATA_LEN);
  542.             m_ucRxAclDataTag[m_iRxAclDataLen] = 0;
  543.             v = ByteHexStr2Int(p);
  544.             if (v < 0)
  545.             {
  546.                 return false;
  547.             }
  548.         }
  549.         m_ucRxAclData[m_iRxAclDataLen] = v;
  550.         m_iRxAclDataLen++;
  551.         p += 2;
  552.         while (*p == ' ')  p++; //delete space
  553.     }
  554.     return true;
  555. }
  556. //-----------------------------------------------
  557. // "00 11 00 11 ?? ?? 35 ?? 33 DE FF x1 x2 x3 AA X8 X9 Y9 *"
  558. bool CBTMTPARSE::CompareEvent(int i_event_idx, unsigned char *event, int len)
  559. {
  560.     int n;
  561. //   if(len!=m_iEvtLen)   return(0);
  562.     for (n = 0; n < len; n++)
  563.     {
  564.         if (m_ucEvtTag[n] == 0)
  565.         {
  566.             if (m_ucEvent[i_event_idx][n] != event[n])
  567.             {
  568.                 return false;
  569.             }
  570.         }
  571.         else if (m_ucEvtTag[i_event_idx][n] == 2)  // compare variable
  572.         {
  573.             if (VarData[m_ucEvent[i_event_idx][n]] != event[n])
  574.             {
  575.                 return(0);
  576.             }
  577.         }
  578.         else if (m_ucEvtTag[i_event_idx][n] == 3)  // ??
  579.         {  // nothing to do
  580.         }
  581.         else if (m_ucEvtTag[i_event_idx][n] == 4)  // *
  582.         {
  583.             break;
  584.         }
  585.     }
  586.     for (n = 0; n < len; n++)
  587.     {
  588.         if (m_ucEvtTag[i_event_idx][n] == 1)   // assign value to variable
  589.         {
  590.             VarData[m_ucEvent[i_event_idx][n]] = event[n];
  591.         }
  592.     }
  593.     return true;
  594. }
  595. //=============================================================================