瀏覽代碼

【软件版本】
V
【模块名称】
远程场测工具
【问题原因】
1、检测串口号的方式,由定时器处理。
2、UI调整,新增USB模块。
【修改描述】

【测试结果】

sat23 3 年之前
父節點
當前提交
8818f58d9a

+ 7 - 3
TestWizardTool/TestWizardTool/TestWizardTool.rc

@@ -96,9 +96,13 @@ FONT 9, "MS Shell Dlg", 0, 0, 0x1
 BEGIN
     COMBOBOX        COMBO_COM,10,12,38,85,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
     PUSHBUTTON      "Open",BTN_OPEN_COM,49,11,29,14
-    COMBOBOX        COMBO_SINGALS,81,12,98,125,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
-    PUSHBUTTON      "ReLoad",BTN_RELOAD_SIGNAL,181,11,29,14
-    GROUPBOX        "",IDC_STATIC_GROUP,7,2,206,50
+    COMBOBOX        COMBO_SINGALS,80,12,98,125,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
+    PUSHBUTTON      "ReLoad",BTN_RELOAD_SIGNAL,180,11,29,14
+    GROUPBOX        "",IDC_STATIC_GROUP,7,2,206,42
+    COMBOBOX        COMBO_COM2,10,29,38,85,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "Open",BTN_OPEN_COM2,49,28,29,14
+    CONTROL         "Switch A",IDC_CHECK_A,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,31,44,10
+    CONTROL         "Switch B",IDC_CHECK_B,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,128,31,43,10
 END
 
 

+ 100 - 47
TestWizardTool/TestWizardTool/TestWizardToolDlg.cpp

@@ -143,11 +143,13 @@ CTestWizardToolDlg::CTestWizardToolDlg(CWnd* pParent /*=NULL*/)
 void CTestWizardToolDlg::DoDataExchange(CDataExchange* pDX)
 {
     CDialog::DoDataExchange(pDX);
-    DDX_Control(pDX, COMBO_COM, m_cbCOM);
+    DDX_Control(pDX, COMBO_COM, m_cbCOMTW);
     DDX_Control(pDX, COMBO_SINGALS, m_cbSignals);
-    DDX_Control(pDX, BTN_OPEN_COM, m_btnOpen);
+    DDX_Control(pDX, BTN_OPEN_COM, m_btnOpenTW);
     DDX_Control(pDX, BTN_RELOAD_SIGNAL, m_btnReload);
     DDX_Control(pDX, IDC_STATIC_GROUP, m_stGroup);
+    DDX_Control(pDX, BTN_OPEN_COM2, m_btnOpenUSB);
+    DDX_Control(pDX, COMBO_COM2, m_cbUSBPort);
 }
 
 BEGIN_MESSAGE_MAP(CTestWizardToolDlg, CDialog)
@@ -165,6 +167,8 @@ BEGIN_MESSAGE_MAP(CTestWizardToolDlg, CDialog)
     ON_CBN_SELCHANGE(COMBO_SINGALS, &CTestWizardToolDlg::OnCbnSelchangeSingals)
     ON_BN_CLICKED(BTN_RELOAD_SIGNAL, &CTestWizardToolDlg::OnBnClickedReloadSignal)
     ON_WM_DESTROY()
+    ON_WM_TIMER()
+    ON_BN_CLICKED(BTN_OPEN_COM2, &CTestWizardToolDlg::OnBnClickedOpenCom2)
 END_MESSAGE_MAP()
 
 
@@ -204,13 +208,12 @@ BOOL CTestWizardToolDlg::OnInitDialog()
     m_stGroup.GetWindowRect(m_rcGroup);
     ScreenToClient(m_rcGroup);
 
-    GetSysSerialPort(m_vtPorts);
-    InitSerialCombobox();
-    m_cbCOM.SelectString(0, Global::g_Config.twPort.c_str());
     LoadSignals();
     m_cbSignals.SelectString(0, Global::g_Config.twUseSignal.c_str());
     LoadKeyInfo(m_vtKeyInfo, Global::g_Config.twSignaldir + _T("\\") + Global::g_Config.twUseSignal + _T(".xml"));
 
+    SetTimer(0, 100, NULL);
+
     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
 }
 
@@ -271,22 +274,22 @@ BOOL CTestWizardToolDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
     if ( pbdp && _tcsstr(pbdp->dbcp_name, _T("COM")) )
     {
         // 查找是否有添加过该项;
-        int nIndex = m_cbCOM.FindString(0, pbdp->dbcp_name);
+        int nIndex = m_cbCOMTW.FindString(0, pbdp->dbcp_name);
         // 删除和新增前,先获取当前选中的项;
         CString strCurCOM = _T("");
-        int nCurIndex = m_cbCOM.GetCurSel();
+        int nCurIndex = m_cbCOMTW.GetCurSel();
         if ( nCurIndex != CB_ERR )
-            m_cbCOM.GetLBText(nCurIndex, strCurCOM);
+            m_cbCOMTW.GetLBText(nCurIndex, strCurCOM);
 
         if ( nEventType == DBT_DEVICEREMOVECOMPLETE )
         {// 串口拨掉;
             TRACE(_T("串口拨掉\n"));
             if ( nIndex != CB_ERR )
             {                
-                m_cbCOM.DeleteString(nIndex);
+                m_cbCOMTW.DeleteString(nIndex);
                 // 删除后, 由于索引变化了,要重新设置选中项;
                 if ( nCurIndex != CB_ERR )
-                    m_cbCOM.SelectString(0, strCurCOM);
+                    m_cbCOMTW.SelectString(0, strCurCOM);
             }
         }
         else if ( nEventType == DBT_DEVICEARRIVAL )
@@ -294,10 +297,15 @@ BOOL CTestWizardToolDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
            TRACE(_T("串口插入\n"));
            if ( nIndex == CB_ERR )
            {
-               m_cbCOM.AddString(pbdp->dbcp_name);
+               m_cbCOMTW.AddString(pbdp->dbcp_name);
                // 新增后,由于索引变化了,要重新设置选中项;
                if ( nCurIndex != CB_ERR )
-                   m_cbCOM.SelectString(0, strCurCOM);
+                   m_cbCOMTW.SelectString(0, strCurCOM);
+               else
+               {
+                    IsTestWizardPort(pbdp->dbcp_name);
+               }
+               
            }
         }
     }
@@ -309,14 +317,10 @@ BOOL CTestWizardToolDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
 
 void CTestWizardToolDlg::InitSerialCombobox()
 {
-    m_cbCOM.ResetContent();
+    m_cbCOMTW.ResetContent();
     for (std::vector<std::string>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++) 
     {
-        m_cbCOM.AddString(it->c_str());
-        if ( !m_bFindTestWizardPort )
-        {
-            m_bFindTestWizardPort = IsTestWizardPort(it->c_str());
-        }
+        m_cbCOMTW.AddString(it->c_str());
     }
 }
 
@@ -752,17 +756,17 @@ void CTestWizardToolDlg::OnSignalBtnClick(UINT uId) // 
         pWnd->GetWindowText(text);
         KeyInfo *pKey = m_map_key.find(id)->second;
 
-        if ( m_Serial.IsOpen() ){
-            m_Serial.SetTimeouts();
+        if ( m_SerialTW.IsOpen() ){
+            m_SerialTW.SetTimeouts();
             // 封装发送包;
             byte szSendData[MAX_PATH] = {0};
             _stprintf_s((TCHAR*)szSendData, MAX_PATH, _T("*INPUT %s %s\r"), pKey->strType.c_str(), pKey->strValue.c_str());
 
             // 发送单信号;
-            if ( m_Serial.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
+            if ( m_SerialTW.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
             {
                 memset(szSendData, 0, MAX_PATH);
-                m_Serial.ReadSync(szSendData, MAX_PATH);
+                m_SerialTW.ReadSync(szSendData, MAX_PATH);
                 TRACE("发送单信号成功\n");
             }
             else
@@ -784,26 +788,26 @@ void CTestWizardToolDlg::OnBnClickedOpenCom() // 
     GetDlgItemText(BTN_OPEN_COM, strText);
     if ( strText == _T("Open") )
     {
-        int nCurSel = m_cbCOM.GetCurSel();
+        int nCurSel = m_cbCOMTW.GetCurSel();
         if ( nCurSel != CB_ERR ) 
         {
-            m_Serial.SetIOMode();
-            m_cbCOM.GetLBText(nCurSel,strText);
-            if ( m_Serial.Open(atol(strText.Mid(3).GetString()), 115200) )
+            m_SerialTW.SetIOMode();
+            m_cbCOMTW.GetLBText(nCurSel,strText);
+            if ( m_SerialTW.Open(atol(strText.Mid(3).GetString()), 115200) )
             {
                 SetDlgItemText(BTN_OPEN_COM, _T("Close"));
-                m_cbCOM.EnableWindow(FALSE);
-                m_Serial.SetBufferSize(1024,1024);
+                m_cbCOMTW.EnableWindow(FALSE);
+                m_SerialTW.SetBufferSize(1024,1024);
                 WritePrivateProfileString("TestWizard", "Com", strText.GetString(), Global::g_szConfig);
             }
         }
     }
     else
     {
-        m_cbCOM.EnableWindow();
+        m_cbCOMTW.EnableWindow();
         SetDlgItemText(BTN_OPEN_COM, _T("Open"));
-        if ( m_Serial.IsOpen() )
-            m_Serial.Close();
+        if ( m_SerialTW.IsOpen() )
+            m_SerialTW.Close();
     }
 }
 
@@ -851,19 +855,19 @@ void CTestWizardToolDlg::OnOK()
 void CTestWizardToolDlg::InitBtnStyle()
 {
     // 设置透明false以显示背景色
-    m_btnOpen.m_bTransparent = FALSE;
+    m_btnOpenTW.m_bTransparent = FALSE;
     //m_btnOpen.m_bDontUseWinXPTheme = TRUE;
     // 消除单击时黑色内圈;
-    m_btnOpen.m_bDrawFocus = FALSE;
+    m_btnOpenTW.m_bDrawFocus = FALSE;
     // 设置按钮扁平样式;
     //m_btnOpen.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
     // 设置鼠标形状;
-    m_btnOpen.SetMouseCursorHand();
+    m_btnOpenTW.SetMouseCursorHand();
     // 设置背景色;
-    m_btnOpen.SetFaceColor(RGB(250,80,80), TRUE);
+    m_btnOpenTW.SetFaceColor(RGB(250,80,80), TRUE);
     // 显示窗口;
-    m_btnOpen.ShowWindow(SW_SHOW);
-    m_btnOpen.SetTooltip(_T("Open the serial port"));
+    m_btnOpenTW.ShowWindow(SW_SHOW);
+    m_btnOpenTW.SetTooltip(_T("Open the serial port"));
 
     // 设置透明false以显示背景色
     m_btnReload.m_bTransparent = FALSE;
@@ -879,6 +883,21 @@ void CTestWizardToolDlg::InitBtnStyle()
     // 显示窗口;
     m_btnReload.ShowWindow(SW_SHOW);
     m_btnReload.SetTooltip(_T("Reload the signal file"));
+
+    // 设置透明false以显示背景色
+    m_btnOpenUSB.m_bTransparent = FALSE;
+    //m_btnOpen.m_bDontUseWinXPTheme = TRUE;
+    // 消除单击时黑色内圈;
+    m_btnOpenUSB.m_bDrawFocus = FALSE;
+    // 设置按钮扁平样式;
+    //m_btnOpen.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
+    // 设置鼠标形状;
+    m_btnOpenUSB.SetMouseCursorHand();
+    // 设置背景色;
+    m_btnOpenUSB.SetFaceColor(RGB(230,100,80), TRUE);
+    // 显示窗口;
+    m_btnOpenUSB.ShowWindow(SW_SHOW);
+    m_btnOpenUSB.SetTooltip(_T("Open the usbmodel port"));
 }
 
 BOOL CTestWizardToolDlg::PreTranslateMessage(MSG* pMsg)
@@ -958,8 +977,11 @@ bool CTestWizardToolDlg::IsTestWizardPort(CString strCOMPort)
     }
 
     /* 
-       发送:*about 
+       发送:
+            *about 
        返回:
+            *about
+
             Product name:      Test Wizard
             Firmware version:  v3.6.210811
             SN:                30FF6B064243393036140457
@@ -968,27 +990,27 @@ bool CTestWizardToolDlg::IsTestWizardPort(CString strCOMPort)
             Developer:         sun shengpeng
             Email:             sunsp@tcl.com
     */
-    m_Serial.SetIOMode();
-    if ( m_Serial.Open(atol(strCOMPort.Mid(3).GetString()), 115200) )
+    m_SerialTW.SetIOMode();
+    if ( m_SerialTW.Open(atol(strCOMPort.Mid(3).GetString()), 115200) )
     {
         // 快速响应读写,不需要设置过长的超时;
-        m_Serial.SetTimeouts(0,1,20,1,150);
+        m_SerialTW.SetTimeouts(0,1,20,1,150);
         // 封装发送包;
         byte szSendData[MAX_PATH] = _T("*about\r");
-        if ( m_Serial.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
+        if ( m_SerialTW.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
         {
             memset(szSendData, 0, MAX_PATH);
-            m_Serial.ReadSync(szSendData, MAX_PATH);
+            m_SerialTW.ReadSync(szSendData, MAX_PATH);
             if ( _tcsstr((TCHAR*)szSendData, _T("Product name:      Test Wizard\r")) )
             {
                 // 设置当前串口为选中状态;
-                m_cbCOM.SelectString(0, strCOMPort);
+                m_cbCOMTW.SelectString(0, strCOMPort);
                 Global::g_Config.twPort = strCOMPort;
                 WritePrivateProfileString("TestWizard", "Com", strCOMPort.GetString(), Global::g_szConfig);
                 // SetDlgItemText(BTN_OPEN_COM, _T("Close"));
                 // m_cbCOM.EnableWindow(FALSE);
                 // 关闭后,重新打开在设置超时值;
-                m_Serial.Close();
+                m_SerialTW.Close();
                 return true;
             }
             TRACE("发送单信号成功\n");
@@ -998,8 +1020,39 @@ bool CTestWizardToolDlg::IsTestWizardPort(CString strCOMPort)
             TRACE("发送单信号失败\n");
         }
 
-        m_Serial.Close();
+        m_SerialTW.Close();
     }
 
     return false;
-}
+}
+
+void CTestWizardToolDlg::OnTimer(UINT_PTR nIDEvent)
+{
+    // TODO: 在此添加消息处理程序代码和/或调用默认值
+    if ( nIDEvent == 0 )
+    {
+        KillTimer(nIDEvent);
+        GetSysSerialPort(m_vtPorts);
+        InitSerialCombobox();
+        if ( CB_ERR == m_cbCOMTW.SelectString(0, Global::g_Config.twPort.c_str()) )
+        {
+            for (std::vector<std::string>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++) 
+            {
+                if ( !m_bFindTestWizardPort )
+                {
+                    m_bFindTestWizardPort = IsTestWizardPort(it->c_str());
+                }
+            }
+
+            if ( !m_bFindTestWizardPort )
+                MessageBox(_T("No Test Wizard found"), _T("Prompt"), MB_OK);
+        }
+    }
+
+    CDialog::OnTimer(nIDEvent);
+}
+
+void CTestWizardToolDlg::OnBnClickedOpenCom2()  // 打开USB模块串口;
+{
+    // TODO: 在此添加控件通知处理程序代码
+}

+ 10 - 4
TestWizardTool/TestWizardTool/TestWizardToolDlg.h

@@ -78,7 +78,7 @@ public:
     int m_nDefaultHeight;
     int m_nTopMargin;
     int m_nLeftMargin;
-    CComboBox m_cbCOM;
+    CComboBox m_cbCOMTW;
     CComboBox m_cbSignals;
     int m_nComboHeight;
     std::vector<std::string> m_vtPorts;
@@ -86,7 +86,8 @@ public:
     std::map<UINT, KeyInfo*> m_map_key;
     std::vector<std::string> m_vtTWSignal;
     std::vector<BTNInfo*> m_vtBTNInfo;
-    CBaseSerial m_Serial;
+    CBaseSerial m_SerialTW;
+    CBaseSerial m_SerialUSB;
     CRect m_rcGroup;
     // 是否找到测试精灵串口;
     bool m_bFindTestWizardPort;
@@ -120,9 +121,14 @@ protected:
     // 自动根据Combobox选项长度设置宽度;
     void AutoSetDroppedWidth(CComboBox* pCombobox);
 public:
-    CMFCButton m_btnOpen;
+    CStatic m_stGroup;
+    CMFCButton m_btnOpenTW;
     CMFCButton m_btnReload;
+    CMFCButton m_btnOpenUSB;
+    CComboBox m_cbUSBPort;
+
     void InitBtnStyle();
     virtual BOOL PreTranslateMessage(MSG* pMsg);
-    CStatic m_stGroup;
+    afx_msg void OnTimer(UINT_PTR nIDEvent);
+    afx_msg void OnBnClickedOpenCom2();
 };

+ 6 - 1
TestWizardTool/TestWizardTool/resource.h

@@ -13,6 +13,11 @@
 #define COMBO_SINGALS                   1002
 #define BTN_RELOAD_SIGNAL               1003
 #define IDC_STATIC_GROUP                1004
+#define COMBO_COM2                      1005
+#define BTN_OPEN_COM2                   1006
+#define IDC_CHECK_A                     1007
+#define IDC_CHECK2                      1008
+#define IDC_CHECK_B                     1008
 
 // Next default values for new objects
 // 
@@ -20,7 +25,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        129
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1005
+#define _APS_NEXT_CONTROL_VALUE         1008
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif