Parcourir la source

1、添加函数:SaveDeviceStatus2Config用于保存adb设备状态到配置文件中,便于atx脚本判断usb设备是否在线;
2、usb设备Offline使用adb reconnect offline命令进行重连;
3、usb设备Dropline时,如果drop时长超过9秒(大概三次重连),则kill server进行处理;

scbc.sat2 il y a 5 ans
Parent
commit
8f1e1aa2e3
2 fichiers modifiés avec 53 ajouts et 14 suppressions
  1. 50 14
      SATService/SATService/SATDevices.cpp
  2. 3 0
      SATService/SATService/SATDevices.h

+ 50 - 14
SATService/SATService/SATDevices.cpp

@@ -167,25 +167,42 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 							// offline只能reconnect才能重连;
 							std::string str = "adb reconnect offline";
 							WinExec(str.c_str(), SW_HIDE);
-							// 重连后,break此次循环;
-							GLOBAL::WriteTextLog("offline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命名:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
-							// 等待重连;
-							Sleep(3500);
-							break;
+							GLOBAL::WriteTextLog("offline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 						} 
 						else if ( it->nStatus == SATDEV::Dropline ) {
 							std::string str = "adb connect ";
 							str.append(it->strName);
 							WinExec(str.c_str(), SW_HIDE);
-							GLOBAL::WriteTextLog("dropline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命名:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
-							// 等待重连;
-							Sleep(3500);
+							GLOBAL::WriteTextLog("dropline重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 						}
+						// 等待adb重连完成;
+						Sleep(2500);
 					} else if ( it->nType == SATDEV::Usb ) {
-#if 0
-						// offline只能reconnect才能重连;
-						std::string str = "adb reconnect offline";
-						WinExec(str.c_str(), SW_HIDE);
+#if 1
+						if ( it->nStatus == SATDEV::Offline ) {
+							// offline需要reconnect才能重连;
+							std::string str = "adb reconnect offline";
+							WinExec(str.c_str(), SW_HIDE);
+							GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+							// 等待adb启动;
+							Sleep(2500);
+						}
+						else{
+							// 是否需要kill=当时间达到掉线时长的1/2,则开启kill;
+							if ( GetTickCount64() -  it->ulOfflineTime > 9000 ) { // 1/2掉线时长太久,固定9秒时间,大概3次重连;
+								std::string str = "adb kill-server";
+								// 如果是usb的话,可能要kill-server,再全部重连接;
+								WinExec(str.c_str(), SW_HIDE);
+								// 重连所有;
+								ReConnectAllDevices();
+								// 重连后,break此次循环;
+								GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
+								// 等待adb启动;
+								Sleep(3500);
+								// kill后,需要重新GetCurrentDevices查询;
+								break;
+							}
+						}	
 #else
 						std::string str = "adb kill-server";
 						// 如果是usb的话,可能要kill-server,再全部重连接;
@@ -193,11 +210,12 @@ DWORD CSATDevices::WorkThread(LPVOID lpVoid)
 						// 重连所有;
 						ReConnectAllDevices();
 						// 重连后,break此次循环;
-						GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命名:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
-#endif
+						GLOBAL::WriteTextLog("usb重连->设备类型:%d, 设备名称:%s, 状态:%d, 命令:%s", it->nType, it->strName.c_str(), it->nStatus, str.c_str());
 						// 等待adb启动;
 						Sleep(3500);
+						// kill后,需要重新GetCurrentDevices查询;
 						break;
+#endif
 					}
 
 					it++;
@@ -320,6 +338,9 @@ bool CSATDevices::IsDevicesOffline(SATDEV::STDevice &stDevice, std::vector<SATDE
 		}
 	}	
 
+	// 将设备状态保存到配置文件中;
+	SaveDeviceStatus2Config(stDevice);
+
 	return bOffline;
 }
 
@@ -427,4 +448,19 @@ int CSATDevices::AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[SATPROTO::MAX
 	}
 
 	return count;
+}
+
+void CSATDevices::SaveDeviceStatus2Config(SATDEV::STDevice &stDevice)
+{
+	if ( stDevice.nType == SATDEV::Usb ) {
+		// 如果是usb设备重连成功,写入文件中;
+		TCHAR szIniPath[MAX_PATH] = {0};
+		_stprintf_s(szIniPath, _T("%s%s"), GLOBAL::g_szPython27Dir, "Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg");
+		if ( stDevice.nStatus == SATDEV::Online )
+			WritePrivateProfileString(_T("ADBSTATUS"), stDevice.strName.c_str(), _T("Online"), szIniPath);
+		else if ( stDevice.nStatus == SATDEV::Offline )
+			WritePrivateProfileString(_T("ADBSTATUS"), stDevice.strName.c_str(), _T("Offline"), szIniPath);
+		else if ( stDevice.nStatus == SATDEV::Dropline )
+			WritePrivateProfileString(_T("ADBSTATUS"), stDevice.strName.c_str(), _T("Dropline"), szIniPath);
+	}
 }

+ 3 - 0
SATService/SATService/SATDevices.h

@@ -114,6 +114,9 @@ public:
 	// 附加设备名到缓存中;
 	static int AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[SATPROTO::MAX_DEVS]);
 
+	// 保存设备状态到配置文件中;
+	static void SaveDeviceStatus2Config(SATDEV::STDevice &stDevice);
+
 };
 
 #endif // __SAT_QUERIER__