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

MTK

开发平台:

C++ Builder

  1. #include <windows.h>
  2. #include <dos.h>
  3. #include <stdio.h>
  4. #include <process.h>
  5. #include <dir.h>
  6. #include <string.h>
  7. #include <assert.h>
  8. #pragma hdrstop
  9. #ifndef  _BT_HCI_FT_H_
  10. #include "bt_hci_ft.h"
  11. #endif
  12. #ifndef _BT_MT_H_
  13. #include "bt_mt.h"
  14. #endif
  15. #ifndef _BT_MT_PARSE_H_
  16. #include "bt_mt_Parse.h"
  17. #endif
  18. //=============================================================================
  19. #define  BT_MODULE_TEST_SRCSTR_SIZE  8192
  20. //=============================================================================
  21. static long  GiveDateTime(void);
  22. //=============================================================================
  23. int CBTMT::TimerTick(void)
  24. {
  25.     int ok = ERR_NONE;
  26.     int n;
  27.     Ticks++;
  28.     m_cLogString[0] = 0;
  29.     LogStrPtr = m_cLogString;
  30.     //m_pcHci->rs232.LogString[0] = 0;
  31.     //m_pcHci->rs232.LogStrPtr = m_pcHci->rs232.LogString;
  32.     m_cHciUart.rs232.LogString[0] = 0;
  33.     m_cHciUart.rs232.LogStrPtr = m_cHciUart.rs232.LogString;
  34.     
  35.     //---------------------------------
  36.     if (WaitCounter > 0)
  37.     {
  38.         WaitCounter--;
  39.         goto _process_result;
  40.     }
  41.     //---------------------------------
  42.     if (TimeoutTime > 0)
  43.     {
  44.         TimeoutCounter++;
  45.         if (TimeoutCounter == TimeoutTime)
  46.         {
  47.             ProcFailCount++;
  48.             LogStrPtr += sprintf( LogStrPtr, "Tick Time :%ld n", Ticks );
  49.             LogStrPtr += sprintf( LogStrPtr, "TIMEOUT (%d ms)!! n", (int)(TimeoutCounter*TIMERTICK_UNITE) );
  50.             if (WaitRX != 0)
  51.             {
  52.                 WaitRX = 0;
  53.             }
  54.             ok = ERR_TIMEOUT;
  55.             goto _process_result;  // //goto _process_result;
  56.         }
  57.     }
  58.     //---------------------------------
  59.     if (WaitRX)
  60.     {
  61.         //if (!m_pcHci->rs232.IsRxDataReady())
  62.         if (!m_cHciUart.rs232.IsRxDataReady())
  63.         {
  64.             goto _process_result;
  65.         }
  66.         LogStrPtr += sprintf(LogStrPtr, "Tick Time :%ldn", Ticks );
  67.        // LogStrPtr += sprintf(LogStrPtr, "%s", m_pcHci->rs232.LogString);
  68.         LogStrPtr += sprintf(LogStrPtr, "%s", m_cHciUart.rs232.LogString);
  69.         //m_pcHci->rs232.LogString[0] = 0;
  70.         //m_pcHci->rs232.LogStrPtr = m_pcHci->rs232.LogString;
  71.         m_cHciUart.rs232.LogString[0] = 0;
  72.         m_cHciUart.rs232.LogStrPtr = m_cHciUart.rs232.LogString;
  73.         //if (!m_pcHci->ReadEvent())
  74.         if (!m_cHciUart.ReadEvent())
  75.         {
  76.             LogStrPtr += sprintf(LogStrPtr, "Read HCI m_ucEvent Fail");
  77.             goto _process_result;
  78.         }
  79.         //LogStrPtr += sprintf(LogStrPtr, "%s", m_pcHci->rs232.LogString);
  80.         LogStrPtr += sprintf(LogStrPtr, "%s", m_cHciUart.rs232.LogString);
  81.         WaitRX = 0;
  82.         //if (Parse.CompareEvent(m_pcHci->EventBuf, m_pcHci->EventLen))
  83.         if (Parse.CompareEvent(m_iEventIdx, m_cHciUart.EventBuf, m_cHciUart.EventLen))
  84.         {
  85.             WaitRX = 0;
  86.             LogStrPtr += sprintf(LogStrPtr, "PASS: Compare HCI RX data n");
  87.         }
  88.         else
  89.         {
  90.             if (WaitRX != 2)   // not waiting for some event
  91.             {
  92.                 WaitRX=0;
  93.                 ProcFailCount++;
  94.                 LogStrPtr += sprintf(LogStrPtr, "FAIL: Wrong HCI RX data n");
  95.                 LogStrPtr += sprintf(LogStrPtr, "Pattern : ");
  96.                 for (n = 0; n < Parse.m_iEvtLen[m_iEventIdx]; n++)
  97.                 {
  98.                     LogStrPtr += sprintf(LogStrPtr, "%02X ", Parse.m_ucEvent[n]);
  99.                 }
  100.                 LogStrPtr += sprintf(LogStrPtr, " n");
  101.             }
  102.             LogStrPtr += sprintf(LogStrPtr, "HCI Data:");
  103.             //for (n = 0; n < m_pcHci->EventLen; n++)
  104.             for (n = 0; n < m_cHciUart.EventLen; n++)
  105.             {
  106.                 //LogStrPtr += sprintf(LogStrPtr, "%02X ", m_pcHci->EventBuf[n]);
  107.                 LogStrPtr += sprintf(LogStrPtr, "%02X ", m_cHciUart.EventBuf[n]);
  108.             }
  109.             LogStrPtr += sprintf(LogStrPtr, "n");
  110.             ok = ERR_RXCOMP;
  111.         }
  112.         ProcessResult(ok);
  113.     }
  114.     //---------------------------------
  115.     TimeoutCounter = 0;
  116.     // LogStrPtr += sprintf( LogStrPtr, "Tick Time :%ldn", Ticks );
  117.     ok = ExecuteNextScript();
  118.  _process_result:
  119.    ProcessResult( ok );
  120.    if(LogFs!=0)
  121.       fputs(m_cLogString, LogFs );
  122.    return(ok);
  123. }
  124. //-----------------------------------------------
  125. int CBTMT::ExecuteNextScript(void)
  126. {
  127.     int ok;
  128.     long fpos;
  129.     char str[BT_MODULE_TEST_SRCSTR_SIZE];
  130.     char *p;
  131.     if (RUN_Time < 0)
  132.     {
  133.         RUN_Time = GiveDateTime();
  134.     }
  135.     if (CS_feof(ScrFs))
  136.     {
  137.         CountProcResult();
  138.         CloseScript();
  139.         return(ERR_FILEEND);
  140.     }
  141.     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  142.     LogStrPtr += sprintf(LogStrPtr, "n=> %s", str);
  143.     Parse.PreParseString(m_iEventIdx, str);
  144.     if (IsForceEnd)
  145.     {
  146.         Parse.StrType = STRTYPE_END;
  147.     }
  148.     switch (Parse.StrType)
  149.     {
  150.         case STRTYPE_HCI:
  151.         {
  152.             if ((BT_RS232 == m_eBtTrans[1]) && (2 == Parse.StrValue2))
  153.             {
  154.                 //ok = HciUart[Parse.StrValue2-1].SetTransport(Parse.StrValue, 115200L, 0 );
  155.                 ok = m_cHciUart.SetTransport(m_iComPort, 115200L, 0);
  156.                 if (!ok)
  157.                 {
  158.                     ProcFailCount++;
  159.                     LogStrPtr += sprintf(LogStrPtr, "Open COM%d Fail! n", m_iComPort);
  160.                     return(ERR_HCIOPEN);
  161.                 }
  162.                 // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  163.                 LogStrPtr += sprintf(LogStrPtr, "Open COM%d OK n", m_iComPort);
  164.             }
  165.         }
  166.         break;
  167.         case STRTYPE_LOGPATH:
  168.         {
  169.             strcpy(LogPath, Parse.String);
  170.             mkdir(LogPath);
  171.         }
  172.         break;
  173.         case STRTYPE_TITLE:
  174.         {
  175.         }
  176.         break;
  177.         case STRTYPE_PROCNAME:
  178.         {
  179.             CountProcResult();
  180.         }
  181.         break;
  182.         case STRTYPE_WAITPROCNAME:
  183.         {
  184.             CountProcResult();
  185.             IsWaitProc = 1;
  186.             WaitProcPos = CS_ftell( ScrFs );
  187.         }
  188.         break;
  189.         case STRTYPE_TIMEOUT:
  190.         {
  191.             TimeoutCounter = TimeoutTime = (int)(Parse.StrValue/TIMERTICK_UNITE);
  192.             LogStrPtr += sprintf( LogStrPtr, "Setting TIMEOUT value (%d ms) n", (int)(TimeoutTime*TIMERTICK_UNITE));
  193.         }
  194.         break;
  195.         case STRTYPE_WAIT:
  196.         {
  197.             WaitCounter = WaitTime = (int)(Parse.StrValue/TIMERTICK_UNITE);
  198.             LogStrPtr += sprintf( LogStrPtr, "Waiting %d ms n", (int)(WaitTime*TIMERTICK_UNITE));
  199.         }
  200.         break;
  201.         case STRTYPE_VAR:
  202.         {
  203.             Parse.VarData[Parse.StrValue2] = Parse.StrValue;
  204.             LogStrPtr += sprintf(LogStrPtr, "Set Var[%d] value = %d n", Parse.StrValue2, (int)Parse.VarData[Parse.StrValue2]);
  205.         }
  206.         break;
  207.         case STRTYPE_TX_HCI_CMD:
  208.         {
  209.             E_BT_DEVICE_T bt_device_tx = (E_BT_DEVICE_T) Parse.StrValue2-1;
  210.             m_iEventIdx = 0;
  211.             m_iEventNum = 0;
  212.             m_iAutoEventIdx = 0;
  213.             m_iAutoEventNum = 0;
  214.             BT_META_HCI_T cmd;
  215.             cmd.e_bt_device = (E_BT_DEVICE_T) Parse.StrValue2-1;
  216.             cmd.e_bt_trans[0] = m_eBtTrans[0];
  217.             cmd.e_bt_trans[1] = m_eBtTrans[1];
  218.             // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  219.             if (BT_RS232 == m_eBtTrans[Parse.StrValue2-1])
  220.             {
  221.                 ok = m_cHciMETA.RegAutoCallBack0();
  222.                 if (!ok)
  223.                 {
  224.                     return(ERR_META);
  225.                 }
  226.                 Parse.String2Command();
  227.                 do
  228.                 {
  229.                     fpos = CS_ftell(ScrFs);
  230.                     if (CS_feof(ScrFs))
  231.                     {
  232.                         break;
  233.                     }
  234.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  235.                     Parse.PreParseStringType(str);
  236.                     if (Parse.StrType != STRTYPE_CONTI)
  237.                     {
  238.                         break;
  239.                     }
  240.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  241.                     Parse.PreParseString(m_iEventIdx, str);
  242.                     Parse.String2Command();
  243.                 }while(1);
  244.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  245.                 //ok = m_pcHci->SendCommand(Parse.Command, Parse.CmdLen );
  246.                 ok = m_cHciUart.SendCommand(Parse.Command, Parse.CmdLen);
  247.                 //LogStrPtr += sprintf(LogStrPtr, "%s", m_pcHci->rs232.LogString);
  248.                 LogStrPtr += sprintf(LogStrPtr, "%s", m_cHciUart.rs232.LogString);
  249.                 //m_pcHci->rs232.LogString[0] = 0;
  250.                 m_cHciUart.rs232.LogString[0] = 0;
  251.                 if (ok)
  252.                 {
  253.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI Command OK! n");
  254.                     return(ERR_NONE);
  255.                 }
  256.                 else
  257.                 {
  258.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI Command FAIL!! n");
  259.                     ProcFailCount++;
  260.                     return(ERR_TX);
  261.                 }
  262.             }
  263.             else
  264.             {
  265.                 Parse.String2Command();
  266.                 do
  267.                 {
  268.                     fpos = CS_ftell(ScrFs);
  269.                     if (CS_feof(ScrFs))
  270.                     {
  271.                         break;
  272.                     }
  273.                     //int i = 1;
  274.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  275.                     Parse.PreParseStringType(str);
  276.                     Parse.PreParseString(m_iEventIdx, str);
  277.                     if (STRTYPE_RX_HCI_EVENT == Parse.StrType)
  278.                     {
  279.                         if (bt_device_tx == (E_BT_DEVICE_T) Parse.StrValue2-1)
  280.                         {
  281.                             Parse.String2Event(m_iEventIdx);
  282.                             m_iEventIdx++;
  283.                             m_iEventNum = m_iEventIdx;
  284.                         }
  285.                         else
  286.                         {
  287.                             Parse.String2AutoEvent(m_iAutoEventIdx);
  288.                             m_iAutoEventIdx++;
  289.                             m_iAutoEventNum = m_iAutoEventIdx;
  290.                         }
  291.                     }
  292.                     else if ((STRTYPE_TX_HCI_CMD == Parse.StrType)  ||
  293.                              (STRTYPE_TX_ACL_DATA == Parse.StrType) ||
  294.                              (STRTYPE_TX_SCO_DATA == Parse.StrType) ||
  295.                              (STRTYPE_PROCNAME == Parse.StrType)
  296.                              )
  297.                     {
  298.                         CS_fseek(ScrFs, fpos, SEEK_SET);
  299.                         break;
  300.                     }
  301.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  302.                 }while(1);
  303.                 CBTHCIFT BT_HCI_FT_Obj;
  304.                 BT_HCI_FT_Obj.Reset_HCI_Command(cmd.s_hci_cmd);
  305.                 cmd.s_hci_cmd.m_opcode = (Parse.Command[2] << 8) | Parse.Command[1];
  306.                 cmd.s_hci_cmd.m_len    = Parse.Command[3];
  307.                 for (int i = 0; i < cmd.s_hci_cmd.m_len; i++)
  308.                 {
  309.                     cmd.s_hci_cmd.m_cmd[i] = Parse.Command[4 + i];
  310.                 }
  311.                 cmd.i_event_num = m_iEventNum;
  312.                 for (int event_idx = 0; event_idx < cmd.i_event_num; event_idx++)
  313.                 {
  314.                     cmd.s_hci_event[event_idx].m_event = Parse.m_ucEvent[event_idx][1];
  315.                     cmd.s_hci_event[event_idx].m_len   = Parse.m_ucEvent[event_idx][2];
  316.                     for (int i = 0; i < cmd.s_hci_event[event_idx].m_len; i++)
  317.                     {
  318.                         cmd.s_hci_event[event_idx].m_parms[i] = Parse.m_ucEvent[event_idx][3 + i];
  319.                     }
  320.                 }
  321.                 cmd.i_auto_event_num = m_iAutoEventNum;
  322.                 for (int event_idx = 0; event_idx < cmd.i_auto_event_num; event_idx++)
  323.                 {
  324.                     cmd.s_hci_auto_event[event_idx].m_event = Parse.m_ucAutoEvent[event_idx][1];
  325.                     cmd.s_hci_auto_event[event_idx].m_len   = Parse.m_ucAutoEvent[event_idx][2];
  326.                     for (int i = 0; i < cmd.s_hci_auto_event[event_idx].m_len; i++)
  327.                     {
  328.                         cmd.s_hci_auto_event[event_idx].m_parms[i] = Parse.m_ucAutoEvent[event_idx][3 + i];
  329.                     }
  330.                 }
  331.                 ok = m_cHciMETA.SendCommand(cmd);
  332.                 if (!ok)
  333.                 {
  334.                     ProcFailCount++;
  335.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI command Fail! n");
  336.                     return(ERR_TX);
  337.                 }
  338.             }
  339.         }
  340.         break;
  341.         case STRTYPE_TX_ACL_DATA:
  342.         {
  343.             m_iEventIdx = 0;
  344.             m_iEventNum = 0;
  345.             E_BT_DEVICE_T bt_device_tx = (E_BT_DEVICE_T) Parse.StrValue2-1;
  346.             BT_META_ACL_DATA_T acl_data;
  347.             acl_data.e_bt_device = (E_BT_DEVICE_T) Parse.StrValue2-1;
  348.             acl_data.e_bt_trans[0] = m_eBtTrans[0];
  349.             acl_data.e_bt_trans[1] = m_eBtTrans[1];
  350.             // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  351.             if (BT_RS232 == m_eBtTrans[Parse.StrValue2-1])
  352.             {
  353.                 ok = m_cHciMETA.RegAclRxData0();
  354.                 if (!ok)
  355.                 {
  356.                     return(ERR_META);
  357.                 }
  358.                 Parse.String2TxAclData();
  359.                 do
  360.                 {
  361.                     fpos = CS_ftell(ScrFs);
  362.                     if (CS_feof(ScrFs))
  363.                     {
  364.                         break;
  365.                     }
  366.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  367.                     Parse.PreParseStringType(str);
  368.                     if (Parse.StrType != STRTYPE_CONTI)
  369.                     {
  370.                         break;
  371.                     }
  372.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  373.                     Parse.PreParseString(m_iEventIdx, str);
  374.                     Parse.String2TxAclData();
  375.                 }while(1);
  376.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  377.                 //ok = m_pcHci->SendCommand(Parse.Command, Parse.CmdLen );
  378.                 ok = m_cHciUart.SendCommand(Parse.Command, Parse.CmdLen);
  379.                 //LogStrPtr += sprintf(LogStrPtr, "%s", m_pcHci->rs232.LogString);
  380.                 LogStrPtr += sprintf(LogStrPtr, "%s", m_cHciUart.rs232.LogString);
  381.                 //m_pcHci->rs232.LogString[0] = 0;
  382.                 m_cHciUart.rs232.LogString[0] = 0;
  383.                 if (ok)
  384.                 {
  385.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI Command OK! n");
  386.                     return(ERR_NONE);
  387.                 }
  388.                 else
  389.                 {
  390.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI Command FAIL!! n");
  391.                     ProcFailCount++;
  392.                     return(ERR_TX);
  393.                 }
  394.             }
  395.             else
  396.             {
  397.                 Parse.String2TxAclData();
  398.                 do
  399.                 {
  400.                     fpos = CS_ftell(ScrFs);
  401.                     if (CS_feof(ScrFs))
  402.                     {
  403.                         break;
  404.                     }
  405.                     //int i = 1;
  406.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  407.                     Parse.PreParseStringType(str);
  408.                     Parse.PreParseString(m_iEventIdx, str);
  409.                     if (STRTYPE_RX_HCI_EVENT == Parse.StrType)
  410.                     {
  411.                         if (bt_device_tx == (E_BT_DEVICE_T) Parse.StrValue2-1)
  412.                         {
  413.                             Parse.String2Event(m_iEventIdx);
  414.                             m_iEventIdx++;
  415.                             m_iEventNum = m_iEventIdx;
  416.                         }
  417.                         else
  418.                         {
  419.                             Parse.String2RxAclData();
  420.                         }
  421.                     }
  422.                     else if ((STRTYPE_TX_HCI_CMD == Parse.StrType)  ||
  423.                              (STRTYPE_TX_ACL_DATA == Parse.StrType) ||
  424.                              (STRTYPE_TX_SCO_DATA == Parse.StrType) ||
  425.                              (STRTYPE_PROCNAME == Parse.StrType))
  426.                     {
  427.                         CS_fseek(ScrFs, fpos, SEEK_SET);
  428.                         break;
  429.                     }
  430.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  431.                 }while(1);
  432.                 //CBTHCIFT BT_HCI_FT_Obj;
  433.                 //BT_HCI_FT_Obj.Reset_HCI_Command(acl_data.s_tx_acl_data);
  434.                 acl_data.s_tx_acl_data.m_con_hdl = (Parse.m_ucTxAclData[2] << 8) | Parse.m_ucTxAclData[1];
  435.                 acl_data.s_tx_acl_data.m_len    = Parse.m_ucTxAclData[3] | (Parse.m_ucTxAclData[4] << 8);
  436.                 for (int i = 0; i < acl_data.s_tx_acl_data.m_len; i++)
  437.                 {
  438.                     acl_data.s_tx_acl_data.m_buffer[i] = Parse.m_ucTxAclData[5 + i];
  439.                 }
  440.                 acl_data.i_event_num = m_iEventNum;
  441.                 for (int event_idx = 0; event_idx < acl_data.i_event_num; event_idx++)
  442.                 {
  443.                     acl_data.s_hci_event[event_idx].m_event = Parse.m_ucEvent[event_idx][1];
  444.                     acl_data.s_hci_event[event_idx].m_len   = Parse.m_ucEvent[event_idx][2];
  445.                     for (int i = 0; i < acl_data.s_hci_event[event_idx].m_len; i++)
  446.                     {
  447.                         acl_data.s_hci_event[event_idx].m_parms[i] = Parse.m_ucEvent[event_idx][3 + i];
  448.                     }
  449.                 }
  450.                 ok = m_cHciMETA.SendAclData(acl_data);
  451.                 if (!ok)
  452.                 {
  453.                     ProcFailCount++;
  454.                     LogStrPtr += sprintf(LogStrPtr, "Send HCI command Fail! n");
  455.                     return(ERR_TX);
  456.                 }
  457.             }
  458.         }
  459.         break;
  460.         case STRTYPE_RX_HCI_EVENT:
  461.         {
  462.             if (BT_RS232 == m_eBtTrans[Parse.StrValue2-1])
  463.             {
  464.                 // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  465.                 Parse.String2Event(m_iEventIdx);
  466.                 m_iEventIdx++;
  467.                 m_iAutoEventNum = m_iEventIdx;
  468.                 do
  469.                 {
  470.                     fpos = CS_ftell(ScrFs);
  471.                     if (CS_feof(ScrFs))
  472.                     {
  473.                         break;
  474.                     }
  475.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  476.                     ok = Parse.PreParseStringType(str);
  477.                     if (!ok)
  478.                     {
  479.                         return(ERR_PARSESTR);
  480.                     }
  481.                     if (Parse.StrType != STRTYPE_CONTI)
  482.                     {
  483.                         break;
  484.                     }
  485.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  486.                     Parse.PreParseString(m_iEventIdx, str);
  487.                     Parse.String2Event(m_iEventIdx);
  488.                 }while(1);
  489.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  490.                 LogStrPtr += sprintf(LogStrPtr, "Waiting for HCI Data...... n");
  491.                 WaitRX = 1;
  492.             }
  493.             else
  494.             {
  495.                 Parse.String2AutoEvent(m_iAutoEventIdx);
  496.                 BT_META_HCI_T cmd;
  497.                 cmd.i_auto_event_num = m_iAutoEventNum;
  498.                 cmd.s_hci_auto_event[m_iAutoEventIdx].m_event = Parse.m_ucAutoEvent[m_iAutoEventIdx][1];
  499.         cmd.s_hci_auto_event[m_iAutoEventIdx].m_len = Parse.m_ucAutoEvent[m_iAutoEventIdx][2];
  500.                 for (int i = 0; i < cmd.s_hci_auto_event[m_iAutoEventIdx].m_len; i++)
  501.                 {
  502.             cmd.s_hci_auto_event[m_iAutoEventIdx].m_parms[i] = Parse.m_ucAutoEvent[m_iAutoEventIdx][3 + i];
  503.                 }
  504.                 m_cHciMETA.Set_HciCmd(cmd);
  505.                 m_iAutoEventIdx++;
  506.                 m_iAutoEventNum = m_iAutoEventIdx;
  507.                 do
  508.                 {
  509.                     fpos = CS_ftell(ScrFs);
  510.                     if (CS_feof(ScrFs))
  511.                     {
  512.                         break;
  513.                     }
  514.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  515.                     ok = Parse.PreParseStringType(str);
  516.                     if (!ok)
  517.                     {
  518.                         return(ERR_PARSESTR);
  519.                     }
  520.                     if (Parse.StrType != STRTYPE_CONTI)
  521.                     {
  522.                         break;
  523.                     }
  524.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  525.                     Parse.PreParseString(m_iEventIdx, str);
  526.                     Parse.String2Event(m_iEventIdx);
  527.                 }while(1);
  528.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  529.                 LogStrPtr += sprintf(LogStrPtr, "Waiting for HCI Data...... n");
  530.                 WaitRX = 1;
  531.                 while (!m_cHciMETA.Get_CallAutoCallback(Parse.StrValue2-1))
  532.                 {
  533.                     Sleep(100);
  534.                 }
  535.                 ok = m_cHciMETA.Get_EventOk();
  536.                 if (!ok)
  537.                 {
  538.                     ProcFailCount++;
  539.                     LogStrPtr += sprintf(LogStrPtr, "Receive HCI event Fail! n");
  540.                     return(ERR_RXCOMP);
  541.                 }
  542.                 WaitRX = 0;
  543.             }
  544.         }
  545.         break;
  546.         case STRTYPE_RX_ACL_DATA:
  547.         {
  548.             if (BT_RS232 == m_eBtTrans[Parse.StrValue2-1])
  549.             {
  550.                 Parse.String2RxAclData();
  551.                 do
  552.                 {
  553.                     fpos = CS_ftell(ScrFs);
  554.                     if (CS_feof(ScrFs))
  555.                     {
  556.                         break;
  557.                     }
  558.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  559.                     ok = Parse.PreParseStringType(str);
  560.                     if (!ok)
  561.                     {
  562.                         return(ERR_PARSESTR);
  563.                     }
  564.                     if (Parse.StrType != STRTYPE_CONTI)
  565.                     {
  566.                         break;
  567.                     }
  568.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  569.                     Parse.PreParseString(m_iEventIdx, str);
  570.                     Parse.String2RxAclData();
  571.                 }while(1);
  572.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  573.                 LogStrPtr += sprintf(LogStrPtr, "Waiting for HCI Data...... n");
  574.                 WaitRX = 1;
  575.             }
  576.             else
  577.             {
  578.                 Parse.String2RxAclData();
  579.                 do
  580.                 {
  581.                     fpos = CS_ftell(ScrFs);
  582.                     if (CS_feof(ScrFs))
  583.                     {
  584.                         break;
  585.                     }
  586.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  587.                     ok = Parse.PreParseStringType(str);
  588.                     if (!ok)
  589.                     {
  590.                         return(ERR_PARSESTR);
  591.                     }
  592.                     if (Parse.StrType != STRTYPE_CONTI)
  593.                     {
  594.                         break;
  595.                     }
  596.                     LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  597.                     Parse.PreParseString(m_iEventIdx, str);
  598.                     Parse.String2RxAclData();
  599.                 }while(1);
  600.                 CS_fseek(ScrFs, fpos, SEEK_SET);
  601.                 LogStrPtr += sprintf(LogStrPtr, "Waiting for HCI Data...... n");
  602. #if 0
  603.                 WaitRX = 1;
  604.                 while (!m_cHciMETA.Get_CallAutoCallback(Parse.StrValue2-1))
  605.                 {
  606.                     Sleep(100);
  607.                 }
  608.                 ok = m_cHciMETA.Get_EventOk();
  609.                 if (!ok)
  610.                 {
  611.                     ProcFailCount++;
  612.                     LogStrPtr += sprintf(LogStrPtr, "Receive HCI event Fail! n");
  613.                     return(ERR_RXCOMP);
  614.                 }
  615.                 WaitRX = 0;
  616. #endif                
  617.             }
  618.         }
  619.         break;
  620.         case STRTYPE_WAITRX:
  621.         {
  622.             // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  623.             Parse.String2Event(m_iEventIdx);
  624.             do
  625.             {
  626.                 fpos = CS_ftell(ScrFs);
  627.                 if (CS_feof(ScrFs))
  628.                 {
  629.                     break;
  630.                 }
  631.                 CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  632.                 ok = Parse.PreParseStringType(str);
  633.                 if (!ok)
  634.                 {
  635.                     return(ERR_PARSESTR);
  636.                 }
  637.                 if (Parse.StrType != STRTYPE_CONTI)
  638.                 {
  639.                     break;
  640.                 }
  641.                 LogStrPtr += sprintf(LogStrPtr, "n=> %s", str);
  642.                 Parse.PreParseString(m_iEventIdx, str);
  643.                 Parse.String2Event(m_iEventIdx);
  644.             }while(1);
  645.             CS_fseek(ScrFs, fpos, SEEK_SET);
  646.             LogStrPtr += sprintf(LogStrPtr, "Waiting for HCI Data......n");
  647.             WaitRX = 2;
  648.         }
  649.         break;
  650.         case STRTYPE_SIMRX:
  651.         {
  652.             //m_pcHci = &(HciUart[Parse.StrValue2-1]);
  653.             Parse.String2Event(m_iEventIdx);
  654.             do
  655.             {
  656.                 fpos = CS_ftell(ScrFs);
  657.                 if (CS_feof(ScrFs))
  658.                 {
  659.                     break;
  660.                 }
  661.                 CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  662.                 ok = Parse.PreParseStringType(str);
  663.                 if (!ok)
  664.                 {
  665.                     return ERR_PARSESTR;
  666.                 }
  667.                 if (Parse.StrType != STRTYPE_CONTI)
  668.                 {
  669.                     CS_fseek(ScrFs, fpos, SEEK_SET);
  670.                     break;
  671.                 }
  672.                 LogStrPtr += sprintf(LogStrPtr, "=> %s", str);
  673.                 Parse.PreParseString(m_iEventIdx, str);
  674.                 Parse.String2Event(m_iEventIdx);
  675.             }while(1);
  676.             //m_pcHci->rs232.PutData2Buf(Parse.m_ucEvent, Parse.m_iEvtLen);
  677.             m_cHciUart.rs232.PutData2Buf(Parse.m_ucEvent, Parse.m_iEvtLen[m_iEventIdx]);
  678.             LogStrPtr += sprintf( LogStrPtr, "Put debug data to UART RX buffer. n");
  679.             CS_fseek(ScrFs, fpos, SEEK_SET);
  680.         }
  681.         break;
  682.         case STRTYPE_PATCH:
  683.         {
  684.             // m_pcHci = &(HciUart[Parse.StrValue2-1]);
  685.             ok = GeneratePatchScript( Parse.StrValue2, Parse.String );
  686.             if (ok)
  687.             {
  688.                 SelSource = SRC_TMPFILE;
  689.                 if (TmpFs != 0)
  690.                 {
  691.                     fclose(TmpFs);
  692.                 }
  693.                 TmpFs = fopen("~tmpfile.txt", "rt");
  694.             }
  695.         }
  696.         break;
  697.         case STRTYPE_BAUDRATE:
  698.         {
  699.             //m_pcHci = &(HciUart[Parse.StrValue2-1]);
  700.             ok = GenerateChangeBaudrateScript(Parse.StrValue2, Parse.StrValue);
  701.             if (ok)
  702.             {
  703.                 SelSource = SRC_TMPFILE;
  704.                 if (TmpFs != 0)
  705.                 {
  706.                     fclose(TmpFs);
  707.                 }
  708.                 TmpFs = fopen("~tmpfile.txt", "rt");
  709.             }
  710.         }
  711.         break;
  712.         case STRTYPE_FAILPROC:
  713.         {
  714.             FILE *fs = fopen("~failprc.txt", "w+t");
  715.             if (fs != 0)
  716.             {
  717.                 HasFailProc = true;
  718.                 while (!feof(ScrFs))
  719.                 {
  720.                     CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  721.                     Parse.PreParseStringType(str);
  722.                     if (Parse.StrType == STRTYPE_FAILEND)
  723.                     {
  724.                         fputs("END", fs);
  725.                         fclose(fs);
  726.                         break;
  727.                     }
  728.                     else
  729.                     {
  730.                         fputs(str, fs);
  731.                     }
  732.                 }
  733.             }
  734.         }
  735.         break;
  736.         case STRTYPE_GOTONEXTPROC:
  737.         {
  738.             bool has_fail_proc = HasFailProc;
  739.             HasFailProc = false;
  740.             while (!feof(ScrFs))
  741.             {
  742.                 CS_fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  743.                 Parse.PreParseStringType(str);
  744.                 if (Parse.StrType == STRTYPE_PROCNAME)
  745.                 {
  746.                     CountProcResult();
  747.                     break;
  748.                 }
  749.                 else if (Parse.StrType == STRTYPE_END)
  750.                 {
  751.                     if (SelSource == SRC_ORGFILE)
  752.                     {
  753.                         CountProcResult();
  754.                         return ERR_FILEEND;
  755.                     }
  756.                     else if (SelSource == SRC_TMPFILE)
  757.                     {
  758.                         if (TmpFs != 0)
  759.                         {
  760.                             fclose(TmpFs);
  761.                         }
  762.                         TmpFs = 0;
  763.                         SelSource = SRC_ORGFILE;
  764.                     }
  765.                 }
  766.             }
  767.             HasFailProc = has_fail_proc;
  768.         }
  769.         break;
  770.         case STRTYPE_FORCEEND:
  771.         {
  772.             IsForceEnd = true;
  773.         }
  774.         break;
  775.         case STRTYPE_SHOWMSG:
  776.         {
  777.             ::MessageBox(NULL, Parse.String, "Message", MB_OK);
  778.         }
  779.         break;
  780.         case STRTYPE_KYLE:
  781.         {
  782.             ok = GenerateKyleScript(Parse.StrArg1, Parse.StrArg2, Parse.StrArg3);
  783.             if (ok)
  784.             {
  785.                 SelSource = SRC_TMPFILE;
  786.                 if (TmpFs!=0)
  787.                 {
  788.                     fclose(TmpFs);
  789.                 }
  790.                 TmpFs = fopen("~tmpfile.txt", "rt");
  791.             }
  792.         }
  793.         break;
  794.         case STRTYPE_END:
  795.         {
  796.             if (SelSource == SRC_ORGFILE)
  797.             {
  798.                 CountProcResult();
  799.                 return ERR_FILEEND;
  800.             }
  801.             else if (SelSource == SRC_TMPFILE)
  802.             {
  803.                 if (TmpFs != 0)
  804.                 {
  805.                     fclose(TmpFs);
  806.                 }
  807.                 TmpFs = 0;
  808.                 SelSource = SRC_ORGFILE;
  809.            }
  810.        }
  811.        break;
  812.     } // switch ()
  813.     return ERR_NONE;
  814. }
  815. //-----------------------------------------------
  816. int CBTMT::GeneratePatchScript(int hci_no, char* patchfile)
  817. {
  818.     FILE *pfs, *fs;
  819.     char str[BT_MODULE_TEST_SRCSTR_SIZE], *p;
  820.     unsigned char buf[240];
  821.     long len;
  822.     int n;
  823.     pfs = fopen( patchfile, "rb" );
  824.     if (pfs == 0)
  825.     {
  826.         return 0;
  827.     }
  828.     fs = fopen("~tmpfile.txt", "w+t");
  829.     if (fs == 0)
  830.     {
  831.         fclose(pfs);
  832.         return(0);
  833.     }
  834.     // Generate 1'st segement of patch
  835.     len = fread(buf, 1, 240, pfs);
  836.     p=str;
  837.     p += sprintf(p, "TX%d : 01 C4 FC F5 00 F0 00 00 00 ", hci_no);
  838.     for (n=0; n<len; n++)
  839.     {
  840.         p+=sprintf(p, "%02X ", (int)buf[n]);
  841.     }
  842.     fputs(str, fs);
  843.     sprintf(str, "nRX%d : 04 0E 04 01 C4 FC 00n", hci_no);
  844.     fputs(str, fs);
  845.     // Generate middle segements of patch
  846.     len = fread(buf, 1, 240, pfs);
  847.     while (len >= 240)
  848.     {
  849.         p = str;
  850.         p += sprintf(p, "TX%d : 01 C4 FC F5 01 F0 00 00 00 ", hci_no);
  851.         for (n=0; n<len; n++)
  852.         {
  853.             p+=sprintf(p, "%02X ", (int)buf[n]);
  854.         }
  855.         fputs(str, fs);
  856.         sprintf(str, "nRX%d : 04 0E 04 01 C4 FC 00n", hci_no);
  857.         fputs(str, fs);
  858.         len = fread(buf, 1, 240, pfs);
  859.     }
  860.     // Generate last segement of patch
  861.     p = str;
  862.     p += sprintf(p, "TX%d : 01 C4 FC %02X 02 %02X 00 00 00 ", hci_no, (int)(5+len), (int)len);
  863.     for (n=0; n<len; n++)
  864.     {
  865.         p += sprintf(p, "%02X ", (int)buf[n]);
  866.     }
  867.     fputs(str, fs);
  868.     sprintf(str, "nRX%d : 04 0E 04 01 C4 FC 00n", hci_no);
  869.     fputs(str, fs);
  870.     sprintf(str, "END");
  871.     fputs(str, fs);
  872.     fclose(fs);
  873.     fclose(pfs);
  874.     return 1;
  875. }
  876. //-----------------------------------------------
  877. int CBTMT::GenerateChangeBaudrateScript(int hci_no, int baudrate)
  878. {
  879.     FILE *fs;
  880.     char str[BT_MODULE_TEST_SRCSTR_SIZE];
  881.     int baudchar;
  882.     if (1 == baudrate)
  883.     {
  884.         baudchar = 0x08; // 115K
  885.     }
  886.     else if (baudrate==2)
  887.     {
  888.         baudchar = 0x09; // 230K
  889.     }
  890.     else if (baudrate==4)
  891.     {
  892.         baudchar = 0x0A; // 460K
  893.     }
  894.     else if (baudrate==9)
  895.     {
  896.         baudchar = 0x0B; // 921K
  897.     }
  898.     else if (baudrate==3)
  899.     {
  900.         baudchar = 0x0C; // 3M
  901.     }
  902.     else
  903.     {
  904.         return(0);
  905.     }
  906.     fs = fopen("~tmpfile.txt", "w+t" );
  907.     if (fs==0)
  908.     {
  909.         return(0);
  910.     }
  911.     // Generate 1'st segement of patch
  912.     sprintf(str, "TX%d : 01 77 FC 02 %02X 00n", hci_no, baudchar);
  913.     fputs(str, fs);
  914.     sprintf(str, "RX%d : 04 0F 04 00 01 77 FCn", hci_no);
  915.     fputs(str, fs);
  916.     sprintf(str, "TX%d : FFn", hci_no, baudchar);
  917.     fputs(str, fs);
  918.     sprintf(str, "RX%d : 04 0E 04 00 01 C0 FCn", hci_no);
  919.     fputs(str, fs);
  920.     sprintf(str, "RX%d : 04 0E 04 00 01 C0 FCn", hci_no);
  921.     fputs(str, fs);
  922.     sprintf(str, "END");
  923.     fputs(str, fs);
  924.     fclose(fs);
  925.     return 1;
  926. }
  927. //-----------------------------------------------
  928. CBTMT::CBTMT(void)
  929. {
  930.     ScrFs = 0;
  931.     TmpFs = 0;
  932.     LogFs = 0;
  933.     strcpy(m_cTitle, "Test Process");
  934.     m_asProcName[0] = "Test1";
  935.     for (int n=1; n<PROCCOUNT; n++)
  936.     {
  937.         m_asProcName[n] = "";
  938.     }
  939.     m_iProcCount = 0;
  940.     m_iEventIdx = 0;
  941.     m_iAutoEventIdx = 0;
  942. //   Reset();
  943. }
  944. //-----------------------------------------------
  945. CBTMT::~CBTMT(void)
  946. {
  947.     if (TmpFs != 0)
  948.     {
  949.         fclose(TmpFs);
  950.         TmpFs = 0;
  951.     }
  952.     if (ScrFs != 0)
  953.     {
  954.         fclose(ScrFs);
  955.         ScrFs = 0;
  956.     }
  957.     if (LogFs != 0)
  958.     {
  959.         fclose(LogFs);
  960.         LogFs = 0;
  961.     }
  962.     //HciUart[0].rs232.Close();
  963.     //HciUart[1].rs232.Close();
  964.     m_cHciUart.rs232.Close();
  965. }
  966. //-----------------------------------------------
  967. int CBTMT::Reset(void)
  968. {
  969.     int n;
  970.     //HciUart[0].rs232.Close();
  971.     //HciUart[1].rs232.Close();
  972.     m_cHciUart.rs232.Close();
  973.    // m_pcHci = &HciUart[0];
  974.    m_iLastProc = m_iCurProc = -1;
  975.    for(n=0; n<PROCCOUNT+1; n++)  m_cProcFail[n] = 0;
  976.    ProcFailCount = 0;
  977.    m_iFailCount = 0;
  978.    IsWaitProc=0;
  979.    WaitProcPos=0;
  980.    IsForceEnd = false;
  981.    HasFailProc = false;
  982.    Ticks = 0;
  983.    WaitRX = 0;
  984.    WaitTime = 0;
  985.    WaitCounter = 0;
  986.    TimeoutTime = 0;
  987.    TimeoutCounter = 0;
  988.    RUN_Time = -1;
  989.    SelSource = SRC_ORGFILE;
  990.    if(TmpFs!=0)
  991.    {  fclose(TmpFs);  TmpFs = 0;   }
  992.    if(ScrFs!=0)
  993.    {  fclose(ScrFs);  ScrFs = 0;   }
  994.    ScrFs = fopen( ScriptFilename, "rt" );
  995.    if(ScrFs==0)   return(0);
  996.    if(LogFs!=0)
  997.    {  fclose(LogFs);  LogFs = 0;   }
  998.    if(LogEnable)
  999.       LogFs = fopen("logfile.txt", "w+t" );
  1000.    else
  1001.       LogFs = 0;
  1002.    LogPath[0] = 0;
  1003.    m_cLogString[0] = 0;
  1004.    LogStrPtr = m_cLogString;
  1005.    LogEnable = true;
  1006.    m_iErrorCode = ERR_NONE;
  1007.    return(1);
  1008. }
  1009. //-----------------------------------------------
  1010. bool CBTMT::OpenScript(char *filename)
  1011. {
  1012.     char str[BT_MODULE_TEST_SRCSTR_SIZE];
  1013.     strcpy(ScriptFilename, filename);
  1014.     if (ScrFs != NULL)
  1015.     {
  1016.         fclose(ScrFs);
  1017.     }
  1018.     ScrFs = fopen(ScriptFilename, "rt");
  1019.     if (ScrFs==0)
  1020.     {
  1021.         return(0);
  1022.     }
  1023.     m_iProcCount = 0;
  1024.     while (!feof(ScrFs))
  1025.     {
  1026.         fgets(str, BT_MODULE_TEST_SRCSTR_SIZE, ScrFs);
  1027.         Parse.PreParseStringType(str);
  1028.         // ok = Parse.PreParseStringType( str );
  1029.         // if(!ok)  return(ERR_PARSESTR);
  1030.         if (Parse.StrType == STRTYPE_TITLE)
  1031.         {
  1032.             strcpy(m_cTitle, Parse.String);
  1033.         }
  1034.         else if ((Parse.StrType == STRTYPE_PROCNAME)    ||
  1035.                  (Parse.StrType == STRTYPE_WAITPROCNAME)
  1036.                  )
  1037.         {
  1038.             if (m_iProcCount < PROCCOUNT)
  1039.             {
  1040.                 //strcpy(m_cProcName[m_iProcCount], Parse.String);
  1041.                 m_asProcName[m_iProcCount] = Parse.String;
  1042.                 m_iProcCount++;
  1043.             }
  1044.         }
  1045.     }
  1046.     fclose(ScrFs);
  1047.     ScrFs = 0;
  1048.     Reset();
  1049.     return 1;
  1050. }
  1051. //-----------------------------------------------
  1052. int CBTMT::CloseScript(void)
  1053. {
  1054.     long cur_time = GiveDateTime();
  1055.     RUN_Time = cur_time - RUN_Time;
  1056.     LogStrPtr += sprintf( LogStrPtr, "Execution Time = %ld secn", (long)RUN_Time);
  1057.     if (TmpFs != 0)
  1058.     {
  1059.         fclose(TmpFs);
  1060.         TmpFs = 0;
  1061.     }
  1062.     if (ScrFs != 0)
  1063.     {
  1064.         fclose(ScrFs);
  1065.         ScrFs = 0;
  1066.     }
  1067.     if (LogFs != 0)
  1068.     {
  1069.         fclose(LogFs);
  1070.         LogFs = 0;
  1071.     }
  1072.     //HciUart[0].rs232.Close();
  1073.     //HciUart[1].rs232.Close();
  1074.     m_cHciUart.rs232.Close();
  1075.     
  1076.     if ((LogPath[0] != 0) && (m_iFailCount != 0))  // copy log to logpath
  1077.     {
  1078.         char str[2048];
  1079.         sprintf(str, "copy logfile.txt %s\%08ld.txt", LogPath, (long)cur_time );
  1080.         system(str);
  1081.     }
  1082.     return 1;
  1083. }
  1084. //-----------------------------------------------
  1085. int  CBTMT::CountProcResult(void)
  1086. {
  1087. int fail_count = ProcFailCount ;
  1088.    if(m_iProcCount<0)
  1089.       return(0);
  1090.    if(m_iCurProc<0)
  1091.    {  m_iCurProc = 0;
  1092.       return(0);
  1093.    }
  1094.    if((IsWaitProc)&&(ProcFailCount!=0))    // do again
  1095.    {  m_cProcFail[m_iCurProc]= 1;
  1096.       m_iLastProc = -1;
  1097.       CS_fseek(ScrFs, WaitProcPos, SEEK_SET);
  1098.    }
  1099.    else
  1100.    {
  1101.       if(ProcFailCount!=0)
  1102.       {  m_cProcFail[m_iCurProc]= 1;
  1103.          m_iFailCount++;
  1104.          if(HasFailProc)
  1105.          {  system( " copy ~failprc.txt ~tmpfile.txt/Y" );
  1106.             SelSource = SRC_TMPFILE;
  1107.             if(TmpFs!=0) fclose(TmpFs);
  1108.             TmpFs = fopen("~tmpfile.txt", "rt" );
  1109.          }
  1110.       }
  1111.       else
  1112.       {  m_cProcFail[m_iCurProc] = 0;
  1113.          IsWaitProc = 0;
  1114.       }
  1115.       m_iLastProc = m_iCurProc;
  1116.       m_iCurProc += (m_iCurProc<m_iProcCount) ? 1 : 0;
  1117.    }
  1118.    ProcFailCount = 0;
  1119.    return(fail_count);
  1120. }
  1121. //-----------------------------------------------
  1122. int  CBTMT::ProcessResult( int err_code )
  1123. {
  1124.     m_iErrorCode = err_code;
  1125.     if( m_iErrorCode!=ERR_NONE )
  1126.        if(HasFailProc)
  1127.        {  system( " copy ~failprc.txt ~tmpfile.txt/Y" );
  1128.           SelSource = SRC_TMPFILE;
  1129.           if(TmpFs!=0) fclose(TmpFs);
  1130.           TmpFs = fopen("~tmpfile.txt", "rt" );
  1131.        }
  1132.     return(1);
  1133. }
  1134. //-----------------------------------------------
  1135. int CBTMT::CS_feof(FILE *fs)
  1136. {  if(SelSource==SRC_ORGFILE)
  1137.       return(feof(fs));
  1138.    if(SelSource==SRC_TMPFILE)
  1139.    {  int ok = feof(TmpFs);
  1140.       if(!ok)  return(ok);
  1141.       fclose(TmpFs);
  1142.       TmpFs = 0;
  1143.       SelSource = SRC_ORGFILE;
  1144.       return(ftell(fs));
  1145.    }
  1146.    return(0);
  1147. }
  1148. //-----------------------------------------------
  1149. char *CBTMT::CS_fgets(char *s, int n, FILE *fs)
  1150. {  if(SelSource==SRC_ORGFILE)
  1151.       return(fgets(s, n, fs));
  1152.    if(SelSource==SRC_TMPFILE)
  1153.    {  if(TmpFs==0)
  1154.       {  TmpFs = fopen("~tmpfile.txt", "rt" );  }
  1155.       return(fgets(s, n, TmpFs));
  1156.    }
  1157.    return(0);
  1158. }
  1159. //-----------------------------------------------
  1160. long int CBTMT::CS_ftell(FILE *fs)
  1161. {  if(SelSource==SRC_ORGFILE)
  1162.       return(ftell(fs));
  1163.    if(SelSource==SRC_TMPFILE)
  1164.       return(ftell(TmpFs));
  1165.    return(0);
  1166. }
  1167. //-----------------------------------------------
  1168. int CBTMT::CS_fseek(FILE *fs, long offset, int whence)
  1169. {  if(SelSource==SRC_ORGFILE)
  1170.       return(fseek(fs, offset, whence));
  1171.    if(SelSource==SRC_TMPFILE)
  1172.       return(fseek(TmpFs, offset, whence));
  1173.    return(0);
  1174. }
  1175. //-----------------------------------------------
  1176. static long  GiveDateTime( void )
  1177. {  struct date d;
  1178.    struct time t;
  1179.    unsigned long v = 0;
  1180.    getdate(&d);
  1181.    gettime(&t);
  1182.    v = (v*100)+d.da_mon;
  1183.    v = (v*100)+d.da_day;
  1184.    v = (v*100)+t.ti_hour;
  1185.    v = (v*100)+t.ti_min;
  1186.    v = (v*100)+t.ti_sec;
  1187.    return(v);
  1188. }
  1189. //=============================================================================
  1190. int   CBTMT::GenerateKyleScript( int arg1, int arg2, int arg3 )
  1191. {  FILE *fs;
  1192.    char str[BT_MODULE_TEST_SRCSTR_SIZE];
  1193.    fs = fopen("~tmpfile.txt", "w+t" );
  1194.    if(fs==0)  return(0);
  1195.    /*==== Generate Script statements =======*/
  1196.    // example:
  1197.    //
  1198.    // p=str;
  1199.    // p += sprintf( p, "TX1 : 01 C4 FC F5 %02X F0 00 00 00 ", arg1);
  1200.    // for(n=0; n<len; n++) {  p+=sprintf( p, "%02X ", (int)buf[n] ); }
  1201.    // fputs( str, fs );
  1202.    // sprintf( str, "nRX%d : 04 0E 04 01 C4 FC 00n", hci_no);
  1203.    // fputs( str, fs );
  1204.    // LogStrPtr += sprintf( LogStrPtr, "You can add trace string in this statement");
  1205.    //
  1206.    /*==== Generate Script statements */
  1207.    fclose(fs);
  1208.    return(1);
  1209. }
  1210. //=============================================================================
  1211. ///////////////////////////  Export information   /////////////////////////////
  1212. //=============================================================================
  1213. void CBTMT::Set_ComPort(int com_port)
  1214. {
  1215.     m_iComPort = com_port;
  1216. }
  1217. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1218. void CBTMT::Set_BTTrans(int idx, E_BT_TRANS_T bt_trans)
  1219. {
  1220.     assert(idx < 2);
  1221.     m_eBtTrans[idx] = bt_trans;
  1222. }
  1223. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1224. int CBTMT::Get_LogStringLen(void)
  1225. {
  1226.     return strlen(m_cLogString);
  1227. }
  1228. //-----------------------------------------------------------------------------
  1229. char CBTMT::Get_LogString(int idx)
  1230. {
  1231.     return m_cLogString[idx];
  1232. }
  1233. //-----------------------------------------------------------------------------
  1234. void CBTMT::Set_LogString(int idx, char c)
  1235. {
  1236.     m_cLogString[idx] = c;
  1237. }
  1238. //-----------------------------------------------------------------------------
  1239. char* CBTMT::Get_LogString(void)
  1240. {
  1241.     return m_cLogString;
  1242. }
  1243. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1244. int CBTMT::Get_LastProc(void)
  1245. {
  1246.     return m_iLastProc;
  1247. }
  1248. //-----------------------------------------------------------------------------
  1249. void CBTMT::Set_LastProc(int proc)
  1250. {
  1251.     m_iLastProc = proc;
  1252. }
  1253. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1254. int CBTMT::Get_CurProc(void)
  1255. {
  1256.     return m_iCurProc;
  1257. }
  1258. //-----------------------------------------------------------------------------
  1259. void CBTMT::Set_CurProc(int proc)
  1260. {
  1261.     m_iCurProc = proc;
  1262. }
  1263. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1264. int CBTMT::Get_ErrorCode(void)
  1265. {
  1266.     return m_iErrorCode;
  1267. }
  1268. //-----------------------------------------------------------------------------
  1269. void CBTMT::Set_ErrorCode(int err_code)
  1270. {
  1271.     m_iErrorCode = err_code;
  1272. }
  1273. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1274. int CBTMT::Get_FailCount(void)
  1275. {
  1276.     return m_iFailCount;
  1277. }
  1278. //----------------------------------------------------------------------------
  1279. void CBTMT::Set_FailCount(int fail_count)
  1280. {
  1281.     m_iFailCount = fail_count;
  1282. }
  1283. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1284. char* CBTMT::Get_Title(void)
  1285. {
  1286.     return m_cTitle;
  1287. }
  1288. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1289. int CBTMT::Get_ProcCount(void)
  1290. {
  1291.     return m_iProcCount;
  1292. }
  1293. //----------------------------------------------------------------------------
  1294. void CBTMT::Set_ProcCount(int proc_count)
  1295. {
  1296.     m_iProcCount = proc_count;
  1297. }
  1298. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1299. char CBTMT::Get_ProcFail(int idx)
  1300. {
  1301.     assert(idx <= PROCCOUNT);
  1302.     return m_cProcFail[idx];
  1303. }
  1304. //----------------------------------------------------------------------------
  1305. void CBTMT::Set_ProcFail(int idx, char proc_fail)
  1306. {
  1307.     assert(idx <= PROCCOUNT);
  1308.     m_cProcFail[idx] = proc_fail;
  1309. }
  1310. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1311. AnsiString CBTMT::Get_ProcName(int idx)
  1312. {
  1313.     assert(idx < PROCCOUNT);
  1314.     return m_asProcName[idx];
  1315. }
  1316. //----------------------------------------------------------------------------
  1317. void CBTMT::Set_ProcName(int idx, AnsiString proc_name)
  1318. {
  1319.     assert(idx < PROCCOUNT);
  1320.     m_asProcName[idx] = proc_name;
  1321. }