|
@@ -12,6 +12,7 @@
|
|
|
|
|
|
#define MINIMUM_WINDOWS_X 395
|
|
|
#define MINIMUM_WINDOWS_Y 535
|
|
|
+#define MAX_SWITCH_LEN 16
|
|
|
|
|
|
unsigned char TwoHexChar2Char(char ch1, char ch2)
|
|
|
{
|
|
@@ -138,6 +139,7 @@ CTestWizardToolDlg::CTestWizardToolDlg(CWnd* pParent /*=NULL*/)
|
|
|
m_nDefaultWidth = 360;
|
|
|
m_nDefaultHeight = 600;
|
|
|
m_bFindTestWizardPort = false;
|
|
|
+ m_bFindSwitcherPort = false;
|
|
|
}
|
|
|
|
|
|
void CTestWizardToolDlg::DoDataExchange(CDataExchange* pDX)
|
|
@@ -169,6 +171,8 @@ BEGIN_MESSAGE_MAP(CTestWizardToolDlg, CDialog)
|
|
|
ON_WM_DESTROY()
|
|
|
ON_WM_TIMER()
|
|
|
ON_BN_CLICKED(BTN_OPEN_COM2, &CTestWizardToolDlg::OnBnClickedOpenCom2)
|
|
|
+ ON_BN_CLICKED(IDC_CHECK_A, &CTestWizardToolDlg::OnBnClickedCheckA)
|
|
|
+ ON_BN_CLICKED(IDC_CHECK_B, &CTestWizardToolDlg::OnBnClickedCheckB)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
@@ -318,9 +322,11 @@ BOOL CTestWizardToolDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
|
|
|
void CTestWizardToolDlg::InitSerialCombobox()
|
|
|
{
|
|
|
m_cbCOMTW.ResetContent();
|
|
|
+ m_cbUSBPort.ResetContent();
|
|
|
for (std::vector<std::string>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++)
|
|
|
{
|
|
|
m_cbCOMTW.AddString(it->c_str());
|
|
|
+ m_cbUSBPort.AddString(it->c_str());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1026,6 +1032,80 @@ bool CTestWizardToolDlg::IsTestWizardPort(CString strCOMPort)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+bool CTestWizardToolDlg::IsUSBSwitchPort(CString strCOMPort)
|
|
|
+{
|
|
|
+ CString strText = _T("");
|
|
|
+ GetDlgItemText(BTN_OPEN_COM2, strText);
|
|
|
+ if ( strText == _T("Close") )
|
|
|
+ {// 串口已打开;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 发送:
|
|
|
+ *SET PORT A\r
|
|
|
+ 返回:
|
|
|
+ set PORT A\r\n
|
|
|
+ */
|
|
|
+ m_SerialUSB.SetIOMode();
|
|
|
+ if ( m_SerialUSB.Open(atol(strCOMPort.Mid(3).GetString()), 115200) )
|
|
|
+ {
|
|
|
+ // 快速响应读写,不需要设置过长的超时;
|
|
|
+ m_SerialUSB.SetTimeouts(0,1,20,1,150);
|
|
|
+ // 封装发送包;
|
|
|
+ byte szSendData[MAX_PATH] = _T("*SET PORT A\r");
|
|
|
+ if ( m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
|
|
|
+ {
|
|
|
+ memset(szSendData, 0, MAX_PATH);
|
|
|
+ m_SerialUSB.ReadSync(szSendData, MAX_PATH);
|
|
|
+ if ( _tcscmp((TCHAR*)szSendData, _T("set PORT A\r\n")) == 0 )
|
|
|
+ {
|
|
|
+ // 设置当前串口为选中状态;
|
|
|
+ m_cbUSBPort.SelectString(0, strCOMPort);
|
|
|
+ Global::g_Config.switchPort = strCOMPort;
|
|
|
+ WritePrivateProfileString("Switcher", "Com", strCOMPort.GetString(), Global::g_szConfig);
|
|
|
+ // SetDlgItemText(BTN_OPEN_COM, _T("Close"));
|
|
|
+ // m_cbCOM.EnableWindow(FALSE);
|
|
|
+ // 关闭后,重新打开在设置超时值;
|
|
|
+ m_SerialUSB.Close();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ TRACE("发送单信号成功\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TRACE("发送单信号失败\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ m_SerialUSB.Close();
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void CTestWizardToolDlg::SwitchUSB(BOOL bCheckA)
|
|
|
+{
|
|
|
+ if ( m_SerialUSB.IsOpen() )
|
|
|
+ {
|
|
|
+ m_SerialUSB.SetTimeouts(0,2,50,1,150);
|
|
|
+ // 封装发送包;
|
|
|
+ byte szSendData[MAX_SWITCH_LEN] = {0};
|
|
|
+ _stprintf_s((TCHAR*)szSendData, MAX_SWITCH_LEN, _T("*SET PORT %c\r"), bCheckA ? 'A':'B');
|
|
|
+
|
|
|
+ // 发送单信号;
|
|
|
+ if ( m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
|
|
|
+ {
|
|
|
+ memset(szSendData, 0, MAX_SWITCH_LEN);
|
|
|
+ m_SerialUSB.ReadSync(szSendData, MAX_SWITCH_LEN);
|
|
|
+ TRACE("切换U盘成功\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TRACE("切换U盘失败\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void CTestWizardToolDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
{
|
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
@@ -1042,11 +1122,30 @@ void CTestWizardToolDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
{
|
|
|
m_bFindTestWizardPort = IsTestWizardPort(it->c_str());
|
|
|
}
|
|
|
+
|
|
|
+ if ( !m_bFindSwitcherPort )
|
|
|
+ {
|
|
|
+ m_bFindSwitcherPort = IsUSBSwitchPort(it->c_str());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if ( !m_bFindTestWizardPort )
|
|
|
MessageBox(_T("No Test Wizard found"), _T("Prompt"), MB_OK);
|
|
|
}
|
|
|
+
|
|
|
+ if ( CB_ERR == m_cbUSBPort.SelectString(0, Global::g_Config.switchPort.c_str()) )
|
|
|
+ {
|
|
|
+ for (std::vector<std::string>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++)
|
|
|
+ {
|
|
|
+ if ( !m_bFindSwitcherPort )
|
|
|
+ {
|
|
|
+ m_bFindSwitcherPort = IsUSBSwitchPort(it->c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( !m_bFindSwitcherPort )
|
|
|
+ MessageBox(_T("No USB Switcher found"), _T("Prompt"), MB_OK);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
CDialog::OnTimer(nIDEvent);
|
|
@@ -1055,4 +1154,59 @@ void CTestWizardToolDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
void CTestWizardToolDlg::OnBnClickedOpenCom2() // 打开USB模块串口;
|
|
|
{
|
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
|
+ CString strText = _T("");
|
|
|
+ GetDlgItemText(BTN_OPEN_COM2, strText);
|
|
|
+ if ( strText == _T("Open") )
|
|
|
+ {
|
|
|
+ int nCurSel = m_cbUSBPort.GetCurSel();
|
|
|
+ if ( nCurSel != CB_ERR )
|
|
|
+ {
|
|
|
+ m_SerialUSB.SetIOMode();
|
|
|
+ m_cbUSBPort.GetLBText(nCurSel,strText);
|
|
|
+ if ( m_SerialUSB.Open(atol(strText.Mid(3).GetString()), 115200) )
|
|
|
+ {
|
|
|
+ SetDlgItemText(BTN_OPEN_COM2, _T("Close"));
|
|
|
+ m_cbUSBPort.EnableWindow(FALSE);
|
|
|
+ m_SerialUSB.SetBufferSize(1024,1024);
|
|
|
+ WritePrivateProfileString("Switcher", "Com", strText.GetString(), Global::g_szConfig);
|
|
|
+
|
|
|
+ // 启用复选框;
|
|
|
+ GetDlgItem(IDC_CHECK_A)->EnableWindow();
|
|
|
+ GetDlgItem(IDC_CHECK_B)->EnableWindow();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_cbUSBPort.EnableWindow();
|
|
|
+ SetDlgItemText(BTN_OPEN_COM2, _T("Open"));
|
|
|
+ if ( m_SerialUSB.IsOpen() )
|
|
|
+ m_SerialUSB.Close();
|
|
|
+
|
|
|
+ // 启用复选框;
|
|
|
+ GetDlgItem(IDC_CHECK_A)->EnableWindow(FALSE);
|
|
|
+ GetDlgItem(IDC_CHECK_B)->EnableWindow(FALSE);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CTestWizardToolDlg::OnBnClickedCheckA()
|
|
|
+{
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ CButton *pChckA = (CButton*)GetDlgItem(IDC_CHECK_A);
|
|
|
+ BOOL bChecA = pChckA->GetCheck();
|
|
|
+
|
|
|
+ pChckA->SetCheck(bChecA);
|
|
|
+ ((CButton*)GetDlgItem(IDC_CHECK_B))->SetCheck(!bChecA);
|
|
|
+ SwitchUSB(bChecA);
|
|
|
+}
|
|
|
+
|
|
|
+void CTestWizardToolDlg::OnBnClickedCheckB()
|
|
|
+{
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ CButton *pChckB = (CButton*)GetDlgItem(IDC_CHECK_B);
|
|
|
+ BOOL bChecB = pChckB->GetCheck();
|
|
|
+
|
|
|
+ pChckB->SetCheck(bChecB);
|
|
|
+ ((CButton*)GetDlgItem(IDC_CHECK_A))->SetCheck(!bChecB);
|
|
|
+ SwitchUSB(!bChecB);
|
|
|
}
|