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

MTK

开发平台:

C++ Builder

  1. #ifndef _BT_MT_RS232_H_
  2. #include "bt_mt_rs232.h"
  3. #endif
  4. //=============================================================================
  5. CBTMTRS232::CBTMTRS232(void)
  6. {
  7.     EventLen  = 0;
  8.     EventType = EVTTYPE_NONE;
  9. }
  10. //-----------------------------------------------
  11. bool CBTMTRS232::SetTransport(int port_no, long baudrate, int ena_flowctrl)
  12. {
  13.     bool ok;
  14.     ok = rs232.Open(port_no, baudrate, 8, 0, 0, 0, ena_flowctrl, 0);
  15.     return ok;
  16. }
  17. //-----------------------------------------------
  18. int CBTMTRS232::SendCommand(unsigned char *command, int len)
  19. {
  20.     int ok;
  21.     ok = rs232.SendData(command, len);
  22.     return ok;
  23. }
  24. //-----------------------------------------------
  25. int CBTMTRS232::ReadEvent(void)
  26. {
  27.     int len, len2;
  28.     unsigned char *p, ch;
  29.     long  last_read_pos;
  30.     int  ok;
  31.     last_read_pos = rs232.pos_read;
  32.     len = rs232.ReadData( &ch, 1 ) ;
  33.     if (len==0)
  34.     {
  35.         return 0;
  36.     }
  37.     ok = 0;
  38.     EventLen = len;
  39.     p = EventBuf;
  40.     *p++ = ch;
  41.     if (ch==0x04)      // HCI_event
  42.     {
  43.         EventType = EVTTYPE_EVENT;
  44.         len = rs232.ReadData( p, 2 ) ;
  45.         EventLen += len;
  46.         if (len==2)
  47.         {
  48.            len = p[1];   p = &(p[2]);   ok = 1;
  49.         }
  50.     }
  51.     else if (ch==0x03)  // SCO Data
  52.     {
  53.         EventType = EVTTYPE_SCO;
  54.         len = rs232.ReadData( p, 3 ) ;
  55.         EventLen += len;
  56.         if (len==3)
  57.         {  len = p[2];   p = &(p[3]);   ok = 1;
  58.         }
  59.     }
  60.     else if (ch==0x02)  // ACL Data
  61.     {
  62.         EventType = EVTTYPE_ACL;
  63.         len = rs232.ReadData( p, 4 ) ;
  64.         EventLen += len;
  65.         if (len==4)
  66.         {
  67.             len = (p[3]<<8)+p[2];   p = &(p[4]);   ok = 1;
  68.         }
  69.     }
  70.     else
  71.     {
  72.     }
  73.     if (ok)
  74.     {
  75.         len2 = rs232.ReadData( p, len) ;
  76.         EventLen += len2;
  77.         if (len!=len2)
  78.         {  ok = 0;
  79.         }
  80.     }
  81.     if (!ok)
  82.     {
  83.         EventType = EVTTYPE_NONE;
  84.         rs232.pos_read = last_read_pos;
  85.         ConsumeErrorEvent();
  86.         rs232.LogRXQposition();
  87.         return 0;
  88.     }
  89.     rs232.LogRXQposition();
  90.     return 1;
  91. }
  92. //-----------------------------------------------
  93. void  CBTMTRS232::ConsumeErrorEvent(void )
  94. {
  95. }
  96. //=============================================================================