ソースを参照

1、将MainFrame中关于配置文件的声明转移入Global中。
2、U盘切换器配置及相关处理
3、优化_TestWizardProc函数。
4、新增U盘切换界面,以及重新布局设备管理器Panel.

scbc 5 年 前
コミット
4a52f7876c

+ 6 - 0
SATHelper/SATHelper/Global.cpp

@@ -21,6 +21,8 @@ namespace Global
 	ULONGLONG g_ulWaitTime = 15000;
 	int g_nSysZoomRatio = 100;
 	TCHAR g_szVersion[MAX_PATH] = _T("4.45.200421");
+	BaiduCfg g_bdcfg;
+	RsRunCfg g_rscfg;
 	//////////////////////////////////////////////////////////////////////////
 	// È«¾Öº¯Êý;
 	/************************************************************************/
@@ -340,6 +342,10 @@ namespace Global
 		memset(szValue, 0, MAX_PATH);
 
 		g_Config.twPort = GetPrivateProfileInt(_T("TestWizard"), _T("Com"), 0, szConfigpath);
+
+		// uÅÌÇл»;
+		g_Config.usbPort = GetPrivateProfileInt(_T("UsbSwitch"), _T("Com"), 0, szConfigpath);
+		g_Config.enableUSB = GetPrivateProfileInt(_T("SATHelper"), _T("enableUSB"), 0, szConfigpath);
 	}
 
 	BOOL GetOrientation(IN Image* pImg)

+ 47 - 0
SATHelper/SATHelper/Global.h

@@ -40,6 +40,10 @@ namespace Global
 		std::string twSignaldir;
 		std::string twUseSignal;
 
+		// usb change;
+		int usbPort;
+		bool enableUSB;
+
 		// ir-device;
 		std::string redratpath;
 		bool bGenerics;
@@ -59,6 +63,47 @@ namespace Global
 		int  nReconnectCycle;			// 重连周期;
 	}STConfig, * pSTConfig;
 
+	// 读取baidu.cfg配置文件内容;
+	typedef struct __COUNT_INFO__
+	{
+		std::string app_id;
+		std::string api_key;
+		std::string secret_key;
+		std::string ret_count;
+	}CountInfo, * pCountInfo;
+	
+	typedef struct __BAIDU_CFG__
+	{
+		std::string cur_count;
+		std::string reset_time;
+		std::map<std::string, __COUNT_INFO__> list_count;
+	}BaiduCfg, * pBaiduCfg;
+
+	// 读取resource_run.cfg配置文件内容;
+	typedef struct __RS_RUN_CFG__
+	{
+		std::string sound_list;	// 声音级别;
+		std::string sound1;
+		std::string sound2;
+		std::string full_cut;	// 是否全步骤截图;('True/False')
+		//....
+		std::string tg39_port;
+		std::string tv_port;
+		std::string sat_home;
+		std::string sat_result_dir;
+		std::string chroma22293;
+		//...
+		std::string menutree_chip;
+		std::string menutree_style;
+		std::string menutree_channel;
+		//...
+		std::string chroma1;
+		std::string chroma2;
+		// 是否监听电视;
+		bool bWatchTV;
+	}RsRunCfg, * pRsRunCfg;
+
+
 	//////////////////////////////////////////////////////////////////////////
 	// 全局变量;
 	extern TCHAR g_szCurModuleDir[MAX_PATH];
@@ -71,6 +116,8 @@ namespace Global
 	extern ULONGLONG g_ulWaitTime;
 	extern int g_nSysZoomRatio;
 	extern TCHAR g_szVersion[MAX_PATH];
+	extern BaiduCfg g_bdcfg;
+	extern RsRunCfg g_rscfg;
 
 	//////////////////////////////////////////////////////////////////////////
 	// 全局函数;

+ 15 - 18
SATHelper/SATHelper/IOCPModel.cpp

@@ -975,31 +975,28 @@ void CIOCPModel::_CaptureProc(PER_IO_CONTEXT* pIoContext, ProPackage* pak)
 
 void CIOCPModel::_TestWizardProc(PER_IO_CONTEXT* pIoContext, ProPackage* pak)
 {
-	char* retdata = "0"; //0表示失败,1表示成功
-	//content: ir>keyname  或者 cmd>cmd命令
-	std::string content = (char*)&pak->buf;
-	std::int8_t idx = content.find(">");
-	if (idx == string::npos) return;
-	std::string type = content.substr(0,idx);
-	std::string cmd = content.substr(idx + 1, content.size());
-	LPCTSTR twCmd = cmd.c_str();
-	OutputDebugString(_T("_TestWizardProc\n"));
-	if ((TW::sendCmd) && (type == "cmd")) {
-		boolean retFlag = TW::sendCmd(twCmd);
-		if (retFlag == true) retdata = "1";
-		else retdata = "0";
-	}else if ((TW::SendKey) && (type == "ir")) {
-		boolean retFlag = TW::SendKey(twCmd);
-		if (retFlag == true) retdata = "1";
-		else retdata = "0";
+	bool bRet = false;
+	TCHAR szType[8] = {0};
+	TCHAR szCmd[128] = {0};
+	int nRet = sscanf_s((char*)&pak->buf, _T("%[^>]>%s"), szType, 8, szCmd, 128);
+	if (nRet == 2) {
+		if ( _tcsicmp(szType, _T("cmd")) == 0 && TW::SendCmd ) 
+			bRet = TW::SendCmd(szCmd);
+
+		if (_tcsicmp(szType, _T("ir")) == 0 && TW::SendKey) 
+			bRet = TW::SendKey(szCmd);
+
+		if (_tcsicmp(szType, _T("usb")) == 0 && TW::SendSwitch) 
+			bRet = TW::SendSwitch(_tstoi(szCmd));
 	}
+
+	char* retdata = bRet ? "1" : "0";
 	byte* sdata = new byte[strlen(retdata) + PAK_LEN];
 	ProPackage* reponse_pak = (ProPackage*)sdata;
 	reponse_pak->header.version = 0xAC;
 	reponse_pak->header.len = strlen(retdata) + PAK_LEN;
 	memcpy(reponse_pak->buf, retdata, strlen(retdata));
 	int ret = send(pIoContext->m_sockAccept, (const char*)sdata, reponse_pak->header.len, 0);
-	TRACE1("ret= %d\n",ret);
 }
 
 /////////////////////////////////////////////////////////////////////

+ 118 - 56
SATHelper/SATHelper/MainFrm.cpp

@@ -102,6 +102,10 @@ BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
 	ON_COMMAND(ID_CHECK_ACTUATOR, &CMainFrame::OnCheckActuator)
 	ON_UPDATE_COMMAND_UI(ID_CHECK_ACTUATOR, &CMainFrame::OnUpdateCheckActuator)
 	ON_WM_TIMER()
+	ON_COMMAND(ID_COMBO_USB, &CMainFrame::OnComboUsb)
+	ON_UPDATE_COMMAND_UI(ID_COMBO_USB, &CMainFrame::OnUpdateComboUsb)
+	ON_COMMAND(ID_CHECK_USB, &CMainFrame::OnCheckUsb)
+	ON_UPDATE_COMMAND_UI(ID_CHECK_USB, &CMainFrame::OnUpdateCheckUsb)
 END_MESSAGE_MAP()
 
 // CMainFrame 构造/析构
@@ -125,8 +129,8 @@ CMainFrame::CMainFrame() noexcept :m_trayIcon(IDR_MAINFRAME)
 	m_bShotIR = FALSE;
 	m_pUB530View = m_pDeviceView = NULL;
 
-	ReadBaiduCfg(m_bdcfg);
-	ReadRsRunCfg(m_rscfg);
+	ReadBaiduCfg(Global::g_bdcfg);
+	ReadRsRunCfg(Global::g_rscfg);
 	ReadTreePath();
 }
 
@@ -390,9 +394,9 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	SetWindowText(strVersionInfo);
 
 #ifdef _DEBUG
-	SetTimer(0, 3000, NULL);
+	SetTimer(0, 300000, NULL);
 #else
-	SetTimer(0, 60000, NULL);
+	SetTimer(0, 180000, NULL);
 #endif
 	CSVNMgr::GetInstance()->Load();
 
@@ -853,7 +857,7 @@ LRESULT CMainFrame::OnRibbonChanged(WPARAM wParam, LPARAM lParam)
 	return LRESULT();
 }
 
-void CMainFrame::ReadBaiduCfg(BaiduCfg& bdcfg)
+void CMainFrame::ReadBaiduCfg(Global::BaiduCfg& bdcfg)
 {
 	TCHAR szValue[MAX_PATH] = { 0 };
 	TCHAR szBuffer[1024] = { 0 };
@@ -875,7 +879,7 @@ void CMainFrame::ReadBaiduCfg(BaiduCfg& bdcfg)
 			memcpy(szData, &szBuffer[j], i - j);
 			if (_tcsicmp(szData, _T("CurStatus")))
 			{
-				CountInfo countInfo;
+				Global::CountInfo countInfo;
 				GetPrivateProfileString(szData, _T("APP_ID"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
 				countInfo.app_id = szValue;
 
@@ -888,7 +892,7 @@ void CMainFrame::ReadBaiduCfg(BaiduCfg& bdcfg)
 				GetPrivateProfileString(szData, _T("Ret_Count"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
 				countInfo.ret_count = szValue;
 
-				bdcfg.list_count.insert(std::pair<std::string, CountInfo>(szData, countInfo));
+				bdcfg.list_count.insert(std::pair<std::string, Global::CountInfo>(szData, countInfo));
 			}
 			OutputDebugString(szData);
 			OutputDebugString("\n");
@@ -897,7 +901,7 @@ void CMainFrame::ReadBaiduCfg(BaiduCfg& bdcfg)
 	}
 }
 
-void CMainFrame::ReadRsRunCfg(RsRunCfg& rscfg)
+void CMainFrame::ReadRsRunCfg(Global::RsRunCfg& rscfg)
 {
 	TCHAR szValue[MAX_PATH] = { 0 };
 	TCHAR szBuffer[1024] = { 0 };
@@ -957,7 +961,7 @@ void CMainFrame::ReadTreePath()
 {
 	// 必须在ReadRsRunCfg之后调用;
 	TCHAR szRootDir[MAX_PATH] = { 0 };
-	_stprintf_s(szRootDir, _T("%s%s"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"));
+	_stprintf_s(szRootDir, _T("%s%s"), Global::g_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"));
 
 	auto _get_dir = [](std::string dir) {
 		int nIndex = dir.find_last_of('\\');
@@ -1034,9 +1038,9 @@ void CMainFrame::ReadTreePath()
 
 void CMainFrame::ParseJson()
 {
-	if (m_rscfg.chroma1.size() == 0)
+	if (Global::g_rscfg.chroma1.size() == 0)
 	{
-		cJSON* pJson = cJSON_Parse(m_rscfg.chroma22293.c_str());
+		cJSON* pJson = cJSON_Parse(Global::g_rscfg.chroma22293.c_str());
 		if (pJson)
 		{
 			cJSON* pArray = cJSON_GetObjectItem(pJson, "devices");
@@ -1049,17 +1053,17 @@ void CMainFrame::ParseJson()
 					if (pItem)
 					{
 						if (i == 0)
-							m_rscfg.chroma1 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
+							Global::g_rscfg.chroma1 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
 						if (i == 1)
-							m_rscfg.chroma2 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
+							Global::g_rscfg.chroma2 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
 					}
 				}
 			}
 		}
 
 		// 保存;
-		WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), m_rscfg.chroma1.c_str(), m_szRsCfgPath);
-		WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), m_rscfg.chroma2.c_str(), m_szRsCfgPath);
+		WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), Global::g_rscfg.chroma1.c_str(), m_szRsCfgPath);
+		WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), Global::g_rscfg.chroma2.c_str(), m_szRsCfgPath);
 	}
 }
 
@@ -1070,12 +1074,12 @@ void CMainFrame::RunDevice()
 	CMFCRibbonButton* pCheck1 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK1_22293));
 	CMFCRibbonButton* pCheck2 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK2_22293));
 
-	if (m_rscfg.chroma1.size())
+	if (Global::g_rscfg.chroma1.size())
 	{
 		CDevice* pdev = new CDevice();
 		pdev->m_iBaudrate = 115200;
 		pdev->m_iDatabit = 8;
-		pdev->m_iPort = atoi(m_rscfg.chroma1.substr(3).c_str());
+		pdev->m_iPort = atoi(Global::g_rscfg.chroma1.substr(3).c_str());
 		pdev->m_iParitybit = 0;
 		pdev->m_iStopbit = 0;
 		pdev->m_iID = 1;
@@ -1091,12 +1095,12 @@ void CMainFrame::RunDevice()
 		}
 	}
 
-	if (m_rscfg.chroma2.size())
+	if (Global::g_rscfg.chroma2.size())
 	{
 		CDevice* pdev = new CDevice();
 		pdev->m_iBaudrate = 115200;
 		pdev->m_iDatabit = 8;
-		pdev->m_iPort = atoi(m_rscfg.chroma2.substr(3).c_str());
+		pdev->m_iPort = atoi(Global::g_rscfg.chroma2.substr(3).c_str());
 		pdev->m_iParitybit = 0;
 		pdev->m_iStopbit = 0;
 		pdev->m_iID = 2;
@@ -1123,8 +1127,8 @@ void CMainFrame::InitCombobox_port()
 	CMFCRibbonComboBox* pCommbox2 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO2_22293));
 	CMFCRibbonComboBox* pCommboxTV = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TVPORT));
 	CMFCRibbonComboBox* pCommboxTW = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TWPORT));
-	for (std::vector<std::string>::iterator it = m_vtCOM.begin(); it != m_vtCOM.end(); it++)
-	{
+	CMFCRibbonComboBox* pCommboxUSB = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_USB));
+	for (std::vector<std::string>::iterator it = m_vtCOM.begin(); it != m_vtCOM.end(); it++) {
 		if (!IsPortInserted(pCommbox1, it->c_str()))
 			pCommbox1->AddItem(it->c_str());
 
@@ -1136,20 +1140,27 @@ void CMainFrame::InitCombobox_port()
 
 		if (!IsPortInserted(pCommboxTW, it->c_str()))
 			pCommboxTW->AddItem(it->c_str());
+
+		if (!IsPortInserted(pCommboxUSB, it->c_str()))
+			pCommboxUSB->AddItem(it->c_str());
 	}
 
-	if (m_rscfg.chroma1.size())
-		pCommbox1->SelectItem(m_rscfg.chroma1.c_str());
-	if (m_rscfg.chroma2.size())
-		pCommbox2->SelectItem(m_rscfg.chroma2.c_str());
-	if (m_rscfg.tv_port.size())
-		pCommboxTV->SelectItem(m_rscfg.tv_port.c_str());
-	if (Global::g_Config.twPort)
-	{
+	if (Global::g_rscfg.chroma1.size())
+		pCommbox1->SelectItem(Global::g_rscfg.chroma1.c_str());
+	if (Global::g_rscfg.chroma2.size())
+		pCommbox2->SelectItem(Global::g_rscfg.chroma2.c_str());
+	if (Global::g_rscfg.tv_port.size())
+		pCommboxTV->SelectItem(Global::g_rscfg.tv_port.c_str());
+	if (Global::g_Config.twPort) {
 		TCHAR szCom[16] = {0};
 		_stprintf_s(szCom, _T("COM%d"), Global::g_Config.twPort);
 		pCommboxTW->SelectItem(szCom);
 	}
+	if (Global::g_Config.usbPort) {
+		TCHAR szCom[16] = { 0 };
+		_stprintf_s(szCom, _T("COM%d"), Global::g_Config.usbPort);
+		pCommboxUSB->SelectItem(szCom);
+	}
 
 }
 
@@ -1195,27 +1206,27 @@ void CMainFrame::InitDevicePanel()
 	CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
 	if (pOcrCombo)
 	{
-		for (auto it : m_bdcfg.list_count)
+		for (auto it : Global::g_bdcfg.list_count)
 		{
 			pOcrCombo->AddItem(it.first.c_str());
 		}
 
 		// 选择默认项;
-		pOcrCombo->SetEditText(m_bdcfg.cur_count.c_str());
+		pOcrCombo->SetEditText(Global::g_bdcfg.cur_count.c_str());
 	}
 
 	// 剩余次数;
 	CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
 	if (pOcrCount)
 	{
-		pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
+		pOcrCount->SetEditText(Global::g_bdcfg.reset_time.c_str());
 	}
 
 	// 声音等级;
 	CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
 	if (pSoundLevel)
 	{
-		pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
+		pSoundLevel->SetEditText(Global::g_rscfg.sound1.c_str());
 	}
 
 	// 全步骤截图;
@@ -1235,7 +1246,7 @@ void CMainFrame::InitDevicePanel()
 		}
 
 		// 选择默认项;
-		pChipCombo->SetEditText(m_rscfg.menutree_chip.c_str());
+		pChipCombo->SetEditText(Global::g_rscfg.menutree_chip.c_str());
 
 		// UI下拉框;
 		CString curText = pChipCombo->GetEditText();
@@ -1249,15 +1260,15 @@ void CMainFrame::InitDevicePanel()
 			}
 		}
 
-		pStyleCombo->SetEditText(m_rscfg.menutree_style.c_str());
+		pStyleCombo->SetEditText(Global::g_rscfg.menutree_style.c_str());
 
 		CString strCurChip = pChipCombo->GetEditText();
 		CString strCurStyle = pStyleCombo->GetEditText();
-		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
+		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), Global::g_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
 	}
 
-// 	if (Global::g_Config.enableTW)
-// 		TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
+ 	if (Global::g_Config.enableUSB)
+		TW::OpenSwitch(Global::g_Config.usbPort, 115200, 8, 0, 0);
 
 	// 启动设备;
 	Global::GetSysSerialPort(m_vtCOM);
@@ -1274,7 +1285,7 @@ void CMainFrame::OnCheckFullCut()
 	if (pFullCutCheck)
 	{
 		WritePrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), !pFullCutCheck->IsChecked() ? _T("True") : _T("False"), m_szRsCfgPath);
-		m_rscfg.full_cut = !pFullCutCheck->IsChecked() ? _T("True") : _T("False");
+		Global::g_rscfg.full_cut = !pFullCutCheck->IsChecked() ? _T("True") : _T("False");
 	}
 }
 
@@ -1282,7 +1293,7 @@ void CMainFrame::OnCheckFullCut()
 void CMainFrame::OnUpdateCheckFullCut(CCmdUI* pCmdUI)
 {
 	// TODO: 在此添加命令更新用户界面处理程序代码
-	pCmdUI->SetCheck(!_tcsicmp(m_rscfg.full_cut.c_str(), _T("True")));
+	pCmdUI->SetCheck(!_tcsicmp(Global::g_rscfg.full_cut.c_str(), _T("True")));
 }
 
 
@@ -1322,13 +1333,13 @@ void CMainFrame::OnHadSound()
 				CloseHandle(sei.hProcess);
 		}
 #endif
-		ReadRsRunCfg(m_rscfg);
+		ReadRsRunCfg(Global::g_rscfg);
 		// Ribbon Combobox添加默认项;
 		CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
 		CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
 		if (pSoundLevel)
 		{
-			pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
+			pSoundLevel->SetEditText(Global::g_rscfg.sound1.c_str());
 		}
 	});
 	t.detach();
@@ -1350,14 +1361,14 @@ void CMainFrame::OnDefSound()
 	_stprintf_s(m_szRsCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg"));
 	WritePrivateProfileString(_T("Sound"), _T("sound_list"), _T("[2000,2000]"), m_szRsCfgPath);
 	// Ribbon Combobox添加默认项;
-	m_rscfg.sound1 = _T("2000");
-	m_rscfg.sound2 = _T("2000");
-	m_rscfg.sound_list = _T("[2000,2000]");
+	Global::g_rscfg.sound1 = _T("2000");
+	Global::g_rscfg.sound2 = _T("2000");
+	Global::g_rscfg.sound_list = _T("[2000,2000]");
 	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
 	CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
 	if (pSoundLevel)
 	{
-		pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
+		pSoundLevel->SetEditText(Global::g_rscfg.sound1.c_str());
 	}
 	
 }
@@ -1440,7 +1451,7 @@ void CMainFrame::OnComboProduct()
 		CString strSubStyle = pSubUICombo->GetEditText();
 		WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
 
-		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
+		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), Global::g_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
 	}
 }
 
@@ -1490,7 +1501,7 @@ void CMainFrame::OnComboUi()
 		CString strSubStyle = pSubUICombo->GetEditText();
 		WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
 
-		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
+		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), Global::g_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
 	}
 }
 
@@ -1533,14 +1544,14 @@ void CMainFrame::OnCombo1_22293()
 	{
 		CString strChroma1 = pCombobx1->GetEditText();
 		WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), strChroma1, m_szRsCfgPath);
-		m_rscfg.chroma1 = strChroma1.GetString();
+		Global::g_rscfg.chroma1 = strChroma1.GetString();
 
 		if (g_dmap.find(1) == g_dmap.end())
 		{
 			CDevice* pdev = new CDevice();
 			pdev->m_iBaudrate = 115200;
 			pdev->m_iDatabit = 8;
-			pdev->m_iPort = atoi(m_rscfg.chroma1.substr(3).c_str());
+			pdev->m_iPort = atoi(Global::g_rscfg.chroma1.substr(3).c_str());
 			pdev->m_iParitybit = 0;
 			pdev->m_iStopbit = 1;
 			pdev->m_iID = 1;
@@ -1587,14 +1598,14 @@ void CMainFrame::OnCombo2_22293()
 	{
 		CString strChroma2 = pCombobx2->GetEditText();
 		WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), strChroma2, m_szRsCfgPath);
-		m_rscfg.chroma2 = strChroma2.GetString();
+		Global::g_rscfg.chroma2 = strChroma2.GetString();
 
 		if (g_dmap.find(2) == g_dmap.end())
 		{
 			CDevice* pdev = new CDevice();
 			pdev->m_iBaudrate = 115200;
 			pdev->m_iDatabit = 8;
-			pdev->m_iPort = atoi(m_rscfg.chroma2.substr(3).c_str());
+			pdev->m_iPort = atoi(Global::g_rscfg.chroma2.substr(3).c_str());
 			pdev->m_iParitybit = 0;
 			pdev->m_iStopbit = 1;
 			pdev->m_iID = 2;
@@ -1703,7 +1714,7 @@ void CMainFrame::OnCombo2Tv()
 	{
 		CString strTVPort = pCombobxTV->GetEditText();
 		WritePrivateProfileString(_T("COMM"), _T("serial_communicator_port"), strTVPort, m_szRsCfgPath);
-		m_rscfg.tv_port = strTVPort.GetString();
+		Global::g_rscfg.tv_port = strTVPort.GetString();
 	}
 }
 
@@ -1720,15 +1731,15 @@ void CMainFrame::OnCheckWatchtv()
 	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
 	ASSERT_VALID(pRibbon);
 	CMFCRibbonButton* pCheckWatchTV = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_WATCHTV));
-	m_rscfg.bWatchTV = !pCheckWatchTV->IsChecked();
-	WritePrivateProfileString(_T("Abnormal"), _T("Watch"), m_rscfg.bWatchTV ? _T("1") : _T("0"), m_szRsCfgPath);
+	Global::g_rscfg.bWatchTV = !pCheckWatchTV->IsChecked();
+	WritePrivateProfileString(_T("Abnormal"), _T("Watch"), Global::g_rscfg.bWatchTV ? _T("1") : _T("0"), m_szRsCfgPath);
 }
 
 
 void CMainFrame::OnUpdateCheckWatchtv(CCmdUI* pCmdUI)
 {
 	// TODO: 在此添加命令更新用户界面处理程序代码
-	pCmdUI->SetCheck(m_rscfg.bWatchTV);
+	pCmdUI->SetCheck(Global::g_rscfg.bWatchTV);
 }
 
 
@@ -1840,3 +1851,54 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
 	}
 	CMDIFrameWndEx::OnTimer(nIDEvent);
 }
+
+
+void CMainFrame::OnComboUsb()
+{
+	// TODO: 在此添加命令处理程序代码
+	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
+	ASSERT_VALID(pRibbon);
+	CMFCRibbonComboBox* pCombobxUSB = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_USB));
+
+	// 保存到配置文件中;
+	int nCurSel = pCombobxUSB->GetCurSel();
+	if (nCurSel != CB_ERR) {
+		CString strUSBPort = pCombobxUSB->GetEditText();
+		Global::g_Config.usbPort = _ttol(strUSBPort.Mid(3).GetString());
+		WritePrivateProfileString(_T("UsbSwitch"), _T("Com"), strUSBPort.Mid(3).GetString(), Global::g_szConfig);
+
+		if (Global::g_Config.enableUSB) {
+			TW::CloseSwitch();
+			TW::OpenSwitch(Global::g_Config.usbPort, 115200, 8, 0, 0);
+		}
+	}
+}
+
+
+void CMainFrame::OnUpdateComboUsb(CCmdUI* pCmdUI)
+{
+	// TODO: 在此添加命令更新用户界面处理程序代码
+}
+
+
+void CMainFrame::OnCheckUsb()
+{
+	// TODO: 在此添加命令处理程序代码
+	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
+	ASSERT_VALID(pRibbon);
+	CMFCRibbonButton* pCheckEnableUSB = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_USB));
+	Global::g_Config.enableUSB = !pCheckEnableUSB->IsChecked();
+	WritePrivateProfileString(_T("SATHelper"), _T("enableUSB"), Global::g_Config.enableUSB ? _T("1") : _T("0"), Global::g_szConfig);
+
+	if (Global::g_Config.enableUSB)
+		TW::OpenSwitch(Global::g_Config.usbPort, 115200, 8, 0, 0);
+	else
+		TW::CloseSwitch();
+}
+
+
+void CMainFrame::OnUpdateCheckUsb(CCmdUI* pCmdUI)
+{
+	// TODO: 在此添加命令更新用户界面处理程序代码
+	pCmdUI->SetCheck(Global::g_Config.enableUSB);
+}

+ 8 - 44
SATHelper/SATHelper/MainFrm.h

@@ -178,54 +178,14 @@ public:
 	BOOL m_bShotIR;
 public:
 	//////////////////////////////////////////////////////////////////////////
-	// 读取baidu.cfg配置文件内容;
-	typedef struct __COUNT_INFO__
-	{
-		std::string app_id;
-		std::string api_key;
-		std::string secret_key;
-		std::string ret_count;
-	}CountInfo, * pCountInfo;
-
-	typedef struct __BAIDU_CFG__
-	{
-		std::string cur_count;
-		std::string reset_time;
-		std::map<std::string, __COUNT_INFO__> list_count;
-	}BaiduCfg, * pBaiduCfg;
-
-	BaiduCfg m_bdcfg;
+	//Global::BaiduCfg m_bdcfg;
 	TCHAR m_szBaiduCfgPath[MAX_PATH];
-	void ReadBaiduCfg(BaiduCfg& bdcfg);
+	void ReadBaiduCfg(Global::BaiduCfg& bdcfg);
 
 	//////////////////////////////////////////////////////////////////////////
-	// 读取resource_run.cfg配置文件内容;
-	typedef struct __RS_RUN_CFG__
-	{
-		std::string sound_list;	// 声音级别;
-		std::string sound1;
-		std::string sound2;
-		std::string full_cut;	// 是否全步骤截图;('True/False')
-		//....
-		std::string tg39_port;
-		std::string tv_port;
-		std::string sat_home;
-		std::string sat_result_dir;
-		std::string chroma22293;
-		//...
-		std::string menutree_chip;
-		std::string menutree_style;
-		std::string menutree_channel;
-		//...
-		std::string chroma1;
-		std::string chroma2;
-		// 是否监听电视;
-		bool bWatchTV;
-	}RsRunCfg, * pRsRunCfg;
-
-	RsRunCfg m_rscfg;
+	// 读取resource_run.cfg
 	TCHAR m_szRsCfgPath[MAX_PATH];
-	void ReadRsRunCfg(RsRunCfg& rscfg);
+	void ReadRsRunCfg(Global::RsRunCfg& rscfg);
 
 	//////////////////////////////////////////////////////////////////////////
 	// 读取menutree目录;
@@ -303,6 +263,10 @@ public:
 	afx_msg void OnCheckActuator();
 	afx_msg void OnUpdateCheckActuator(CCmdUI* pCmdUI);
 	afx_msg void OnTimer(UINT_PTR nIDEvent);
+	afx_msg void OnComboUsb();
+	afx_msg void OnUpdateComboUsb(CCmdUI* pCmdUI);
+	afx_msg void OnCheckUsb();
+	afx_msg void OnUpdateCheckUsb(CCmdUI* pCmdUI);
 };
 
 

+ 3 - 2
SATHelper/SATHelper/Resource.h

@@ -189,20 +189,21 @@
 #define ID_CHECK_SHOT_LOCAL             32819
 #define ID_CHECK_SHOT_SYSTEM            32820
 #define ID_CHECK_IR_SHOT                32823
-#define ID_CHECK2                       32824
 #define ID_CHECK_RCONTROL               32824
+#define ID_CHECK_USB                    32826
 #define ID_TRAYMENU_LOGIN               32825
 #define ID_BUTTON2                      32827
 #define ID_CHECK_LINEIN                 32828
 #define ID_DEVICES_DEL                  32829
 #define ID_CHECK_ACTUATOR               32830
+#define ID_COMBO_USB                    32831
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        327
-#define _APS_NEXT_COMMAND_VALUE         32831
+#define _APS_NEXT_COMMAND_VALUE         32832
 #define _APS_NEXT_CONTROL_VALUE         1024
 #define _APS_NEXT_SYMED_VALUE           310
 #endif

+ 0 - 14
SATHelper/SATHelper/SATHelper.vcxproj

@@ -208,19 +208,15 @@
     <ClInclude Include="..\UI\TreeComboBox.h" />
     <ClInclude Include="..\UI\XColorStatic.h" />
     <ClInclude Include="Base64.h" />
-    <ClInclude Include="calendarbar.h" />
     <ClInclude Include="CaptureDef.h" />
     <ClInclude Include="CharEncoding.h" />
     <ClInclude Include="DevicesWnd.h" />
-    <ClInclude Include="DeviceView.h" />
     <ClInclude Include="ChildFrm.h" />
-    <ClInclude Include="ClassView.h" />
     <ClInclude Include="CritSection.h" />
     <ClInclude Include="Device.h" />
     <ClInclude Include="DlgLogin.h" />
     <ClInclude Include="DlgProBar.h" />
     <ClInclude Include="DlgService.h" />
-    <ClInclude Include="FileView.h" />
     <ClInclude Include="framework.h" />
     <ClInclude Include="Global.h" />
     <ClInclude Include="IMGCommon.h" />
@@ -230,7 +226,6 @@
     <ClInclude Include="MemoryClient.h" />
     <ClInclude Include="MemoryComm.h" />
     <ClInclude Include="MemoryDef.h" />
-    <ClInclude Include="OutputWnd.h" />
     <ClInclude Include="QCAP.H" />
     <ClInclude Include="RedRatDLL.h" />
     <ClInclude Include="SATClient.h" />
@@ -239,7 +234,6 @@
     <ClInclude Include="SocketClientImpl.h" />
     <ClInclude Include="SocketHandle.h" />
     <ClInclude Include="stdafx.h" />
-    <ClInclude Include="PropertiesWnd.h" />
     <ClInclude Include="Resource.h" />
     <ClInclude Include="SATHelper.h" />
     <ClInclude Include="SATHelperDoc.h" />
@@ -252,7 +246,6 @@
     <ClInclude Include="tinyxml2.h" />
     <ClInclude Include="TrayIcon.h" />
     <ClInclude Include="UB530View.h" />
-    <ClInclude Include="ViewTree.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\cJson\cJSON.c">
@@ -270,17 +263,13 @@
     <ClCompile Include="..\UI\TreeComboBox.cpp" />
     <ClCompile Include="..\UI\XColorStatic.cpp" />
     <ClCompile Include="Base64.cpp" />
-    <ClCompile Include="calendarbar.cpp" />
     <ClCompile Include="CharEncoding.cpp" />
     <ClCompile Include="DevicesWnd.cpp" />
-    <ClCompile Include="DeviceView.cpp" />
     <ClCompile Include="ChildFrm.cpp" />
-    <ClCompile Include="ClassView.cpp" />
     <ClCompile Include="Device.cpp" />
     <ClCompile Include="DlgLogin.cpp" />
     <ClCompile Include="DlgProBar.cpp" />
     <ClCompile Include="DlgService.cpp" />
-    <ClCompile Include="FileView.cpp" />
     <ClCompile Include="Global.cpp" />
     <ClCompile Include="IMGCommon.cpp" />
     <ClCompile Include="IOCPModel.cpp" />
@@ -288,7 +277,6 @@
     <ClCompile Include="MainFrm.cpp" />
     <ClCompile Include="MemoryClient.cpp" />
     <ClCompile Include="MemoryComm.cpp" />
-    <ClCompile Include="OutputWnd.cpp" />
     <ClCompile Include="RedRatDLL.cpp" />
     <ClCompile Include="SATClient.cpp" />
     <ClCompile Include="SATData.cpp" />
@@ -299,7 +287,6 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
     </ClCompile>
-    <ClCompile Include="PropertiesWnd.cpp" />
     <ClCompile Include="SATHelper.cpp" />
     <ClCompile Include="SATHelperDoc.cpp" />
     <ClCompile Include="SATHelperView.cpp" />
@@ -312,7 +299,6 @@
     </ClCompile>
     <ClCompile Include="TrayIcon.cpp" />
     <ClCompile Include="UB530View.cpp" />
-    <ClCompile Include="ViewTree.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="SATHelper.rc" />

+ 0 - 42
SATHelper/SATHelper/SATHelper.vcxproj.filters

@@ -75,21 +75,6 @@
     <ClInclude Include="stdafx.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="calendarbar.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
-    <ClInclude Include="FileView.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
-    <ClInclude Include="ClassView.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
-    <ClInclude Include="OutputWnd.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
-    <ClInclude Include="PropertiesWnd.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
     <ClInclude Include="..\filehelper\filehelper.h">
       <Filter>filehelper</Filter>
     </ClInclude>
@@ -159,18 +144,12 @@
     <ClInclude Include="SynSerial.h">
       <Filter>视图</Filter>
     </ClInclude>
-    <ClInclude Include="ViewTree.h">
-      <Filter>DockPane</Filter>
-    </ClInclude>
     <ClInclude Include="Device.h">
       <Filter>视图</Filter>
     </ClInclude>
     <ClInclude Include="UB530View.h">
       <Filter>视图</Filter>
     </ClInclude>
-    <ClInclude Include="DeviceView.h">
-      <Filter>视图</Filter>
-    </ClInclude>
     <ClInclude Include="CaptureDef.h">
       <Filter>iocp</Filter>
     </ClInclude>
@@ -239,21 +218,6 @@
     <ClCompile Include="stdafx.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="calendarbar.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
-    <ClCompile Include="ClassView.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
-    <ClCompile Include="FileView.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
-    <ClCompile Include="OutputWnd.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
-    <ClCompile Include="PropertiesWnd.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
     <ClCompile Include="..\filehelper\filehelper.cpp">
       <Filter>filehelper</Filter>
     </ClCompile>
@@ -311,15 +275,9 @@
     <ClCompile Include="SynSerial.cpp">
       <Filter>视图</Filter>
     </ClCompile>
-    <ClCompile Include="ViewTree.cpp">
-      <Filter>DockPane</Filter>
-    </ClCompile>
     <ClCompile Include="Device.cpp">
       <Filter>视图</Filter>
     </ClCompile>
-    <ClCompile Include="DeviceView.cpp">
-      <Filter>视图</Filter>
-    </ClCompile>
     <ClCompile Include="UB530View.cpp">
       <Filter>视图</Filter>
     </ClCompile>

+ 33 - 4
SATHelper/SATHelper/TestWizardDLL.cpp

@@ -13,8 +13,12 @@ namespace TW {
 	OPEN_DEVICE OpenDevice = NULL;
 	CLOSE_DEVICE CloseDevice = NULL;
 	SEND_KEY SendKey = NULL;
-	SEND_KEY sendCmd = NULL;
+	SEND_KEY SendCmd = NULL;
 	GETSIGNALSNAME GetSignalsName = NULL;
+	OPEN_SWITCH OpenSwitch = NULL;
+	CLOSE_SWITCH CloseSwitch = NULL;
+	SEND_SWITCH SendSwitch = NULL;
+
 
 	BOOL LoadLibrary() 
 	{
@@ -87,8 +91,8 @@ namespace TW {
 			return FALSE;
 		}
 
-		sendCmd = (SEND_CMD)GetProcAddress(g_hdll, "sendCmd");
-		if (!sendCmd)
+		SendCmd = (SEND_CMD)GetProcAddress(g_hdll, "SendCmd");
+		if (!SendCmd)
 		{
 			UnloadLibrary();
 			return FALSE;
@@ -101,6 +105,28 @@ namespace TW {
 			return FALSE;
 		}
 
+		// usb switch
+		OpenSwitch = (OPEN_SWITCH)GetProcAddress(g_hdll, "OpenUsbSwitch");
+		if (!OpenSwitch)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		CloseSwitch = (CLOSE_SWITCH)GetProcAddress(g_hdll, "CloseUsbSwitch");
+		if (!CloseSwitch)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		SendSwitch = (SEND_SWITCH)GetProcAddress(g_hdll, "SendSwitch");
+		if (!SendSwitch)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
 		return TRUE;
 	}
 
@@ -119,8 +145,11 @@ namespace TW {
 				OpenDevice = NULL;
 				CloseDevice = NULL;
 				SendKey = NULL;
-				sendCmd = NULL;
+				SendCmd = NULL;
 				GetSignalsName = NULL;
+				OpenSwitch = NULL;
+				SendSwitch = NULL;
+				CloseSwitch = NULL;
 			}
 		}
 	}

+ 11 - 2
SATHelper/SATHelper/TestWizardDLL.h

@@ -18,8 +18,12 @@ namespace TW {
 	typedef BOOL(*OPEN_DEVICE)(int nPort, DWORD dwBaudrate, BYTE ByteSize, BYTE Parity, BYTE StopBits);
 	typedef void(*CLOSE_DEVICE)();
 	typedef bool(*SEND_KEY)(LPCTSTR lpKeyName);
-	typedef bool(*SEND_CMD)(LPCTSTR cmdStr);
+	typedef bool(*SEND_CMD)(LPCTSTR lpszCommand);
 	typedef LPCTSTR(WINAPI* GETSIGNALSNAME)();
+	// usb switch
+	typedef BOOL(*OPEN_SWITCH)(int nPort, DWORD dwBaudrate, BYTE ByteSize, BYTE Parity, BYTE StopBits);
+	typedef void(*CLOSE_SWITCH)();
+	typedef bool(*SEND_SWITCH)(int nIndex);
 
 	//////////////////////////////////////////////////////////////////////////
 	// ÉùÃ÷º¯ÊýÖ¸Õë;
@@ -32,8 +36,13 @@ namespace TW {
 	extern OPEN_DEVICE OpenDevice;
 	extern CLOSE_DEVICE CloseDevice;
 	extern SEND_KEY SendKey;
-	extern SEND_CMD sendCmd;
+	extern SEND_CMD SendCmd;
 	extern GETSIGNALSNAME GetSignalsName;
+	// usb switch;
+	extern OPEN_SWITCH OpenSwitch;
+	extern CLOSE_SWITCH CloseSwitch;
+	extern SEND_SWITCH SendSwitch;
+
 };
 
 

+ 61 - 15
SATHelper/SATHelper/res/ribbon.mfcribbon-ms

@@ -703,7 +703,7 @@
                 <PANELS>
                     <PANEL>
                         <ELEMENT_NAME>Panel</ELEMENT_NAME>
-                        <NAME>声音设置</NAME>
+                        <NAME>声音和OCR</NAME>
                         <INDEX>3</INDEX>
                         <JUSTIFY_COLUMNS>FALSE</JUSTIFY_COLUMNS>
                         <CENTER_COLUMN_VERT>TRUE</CENTER_COLUMN_VERT>
@@ -732,7 +732,7 @@
                                         <INDEX_SMALL>-1</INDEX_SMALL>
                                         <INDEX_LARGE>-1</INDEX_LARGE>
                                         <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
-                                        <WIDTH>55</WIDTH>
+                                        <WIDTH>80</WIDTH>
                                         <WIDTH_FLOATY>0</WIDTH_FLOATY>
                                         <SPIN_BUTTONS>FALSE</SPIN_BUTTONS>
                                         <VALUE>2000.0</VALUE>
@@ -767,21 +767,12 @@
                                     </ELEMENT>
                                 </ELEMENTS>
                             </ELEMENT>
-                        </ELEMENTS>
-                    </PANEL>
-                    <PANEL>
-                        <ELEMENT_NAME>Panel</ELEMENT_NAME>
-                        <NAME>百度OCR</NAME>
-                        <INDEX>5</INDEX>
-                        <JUSTIFY_COLUMNS>TRUE</JUSTIFY_COLUMNS>
-                        <CENTER_COLUMN_VERT>TRUE</CENTER_COLUMN_VERT>
-                        <ELEMENTS>
                             <ELEMENT>
                                 <ELEMENT_NAME>Group</ELEMENT_NAME>
                                 <ELEMENTS>
                                     <ELEMENT>
                                         <ELEMENT_NAME>Label</ELEMENT_NAME>
-                                        <TEXT>OCR:</TEXT>
+                                        <TEXT>百度识别:</TEXT>
                                         <PALETTE_TOP>FALSE</PALETTE_TOP>
                                         <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
                                         <INDEX_SMALL>-1</INDEX_SMALL>
@@ -800,7 +791,7 @@
                                         <INDEX_SMALL>-1</INDEX_SMALL>
                                         <INDEX_LARGE>-1</INDEX_LARGE>
                                         <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
-                                        <WIDTH>80</WIDTH>
+                                        <WIDTH>68</WIDTH>
                                         <WIDTH_FLOATY>80</WIDTH_FLOATY>
                                         <SPIN_BUTTONS>FALSE</SPIN_BUTTONS>
                                         <EDIT_BOX>FALSE</EDIT_BOX>
@@ -809,7 +800,7 @@
                                     </ELEMENT>
                                     <ELEMENT>
                                         <ELEMENT_NAME>Label</ELEMENT_NAME>
-                                        <TEXT>剩余次数:</TEXT>
+                                        <TEXT>余量:</TEXT>
                                         <PALETTE_TOP>FALSE</PALETTE_TOP>
                                         <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
                                         <INDEX_SMALL>-1</INDEX_SMALL>
@@ -828,7 +819,7 @@
                                         <INDEX_SMALL>-1</INDEX_SMALL>
                                         <INDEX_LARGE>-1</INDEX_LARGE>
                                         <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
-                                        <WIDTH>35</WIDTH>
+                                        <WIDTH>40</WIDTH>
                                         <WIDTH_FLOATY>0</WIDTH_FLOATY>
                                         <SPIN_BUTTONS>FALSE</SPIN_BUTTONS>
                                         <VALUE>10000</VALUE>
@@ -1043,6 +1034,61 @@
                             </ELEMENT>
                         </ELEMENTS>
                     </PANEL>
+                    <PANEL>
+                        <ELEMENT_NAME>Panel</ELEMENT_NAME>
+                        <NAME>U盘切换</NAME>
+                        <INDEX>5</INDEX>
+                        <JUSTIFY_COLUMNS>TRUE</JUSTIFY_COLUMNS>
+                        <CENTER_COLUMN_VERT>TRUE</CENTER_COLUMN_VERT>
+                        <ELEMENTS>
+                            <ELEMENT>
+                                <ELEMENT_NAME>Group</ELEMENT_NAME>
+                                <ELEMENTS>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>Label</ELEMENT_NAME>
+                                        <TEXT>U盘切换:</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                    </ELEMENT>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>ComboBox</ELEMENT_NAME>
+                                        <ID>
+                                            <NAME>ID_COMBO_USB</NAME>
+                                            <VALUE>32831</VALUE>
+                                        </ID>
+                                        <TEXT>U盘切换</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                        <WIDTH>108</WIDTH>
+                                        <WIDTH_FLOATY>0</WIDTH_FLOATY>
+                                        <SPIN_BUTTONS>FALSE</SPIN_BUTTONS>
+                                        <EDIT_BOX>TRUE</EDIT_BOX>
+                                        <DROPDOWN_LIST>TRUE</DROPDOWN_LIST>
+                                        <DROPDOWN_LIST_RESIZE>TRUE</DROPDOWN_LIST_RESIZE>
+                                    </ELEMENT>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>Button_Check</ELEMENT_NAME>
+                                        <ID>
+                                            <NAME>ID_CHECK_USB</NAME>
+                                            <VALUE>32826</VALUE>
+                                        </ID>
+                                        <TEXT>启动</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                    </ELEMENT>
+                                </ELEMENTS>
+                            </ELEMENT>
+                        </ELEMENTS>
+                    </PANEL>
                     <PANEL>
                         <ELEMENT_NAME>Panel</ELEMENT_NAME>
                         <NAME>其他设置</NAME>

+ 3 - 2
SATHelper/SATHelper/resource.h

@@ -189,20 +189,21 @@
 #define ID_CHECK_SHOT_LOCAL             32819
 #define ID_CHECK_SHOT_SYSTEM            32820
 #define ID_CHECK_IR_SHOT                32823
-#define ID_CHECK2                       32824
 #define ID_CHECK_RCONTROL               32824
+#define ID_CHECK_USB                    32826
 #define ID_TRAYMENU_LOGIN               32825
 #define ID_BUTTON2                      32827
 #define ID_CHECK_LINEIN                 32828
 #define ID_DEVICES_DEL                  32829
 #define ID_CHECK_ACTUATOR               32830
+#define ID_COMBO_USB                    32831
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        327
-#define _APS_NEXT_COMMAND_VALUE         32831
+#define _APS_NEXT_COMMAND_VALUE         32832
 #define _APS_NEXT_CONTROL_VALUE         1024
 #define _APS_NEXT_SYMED_VALUE           310
 #endif