瀏覽代碼

完成Linux环境适配!

lwk 1 天之前
父節點
當前提交
c4c17fd622

File diff suppressed because it is too large
+ 545 - 207
Generator/Remedy/CCOS.Dev.Generator.RemedyST/CCOS.Dev.Generator.REMEDYST.cpp


+ 82 - 36
Generator/Remedy/CCOS.Dev.Generator.RemedyST/CCOS.Dev.Generator.REMEDYST.h

@@ -1,16 +1,33 @@
 #pragma once
+
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <atomic>
+#include <memory>
+#include <functional>
+#include <chrono>
+
 #include "CCOS.Dev.Generator.Mould.hpp"
-#include "IODeviceWithSCF.tlh"
-#include "IODeviceWithSCF.tli"
 #include "DAP.BasicMoulds.hpp"
 #include "CCOS.Dev.MSGMould.hpp"
 #include "CCOS.Dev.IODevice.Detail.hpp"
+#include "SCFWrapper.h"
+
+#define _CCOSDEVGENREMEDYST_API __attribute__((visibility("default")))
 
-#ifdef CCOSDEVGENREMEDYST_EXPORTS
-#define _CCOSDEVGENREMEDYST_API __declspec(dllexport)
-#else
-#define _CCOSDEVGENREMEDYST_API __declspec(dllimport)
-#endif
+// Linux 鍏煎�鐨勬暟鎹�被鍨嬪畾涔�
+using DWORD = unsigned long;
+using LPVOID = void*;
+using BOOL = int;
+using HANDLE = void*;
+#define TRUE 1
+#define FALSE 0
+
+// 鐫$湢鍑芥暟(浠ユ�绉掍负鍗曚綅)
+inline void Sleep(unsigned int milliseconds) {
+	std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
+}
 
 #define REMEDYST_LoopDefTime 1500
 #define REMEDYST_LoopExpTime 300
@@ -23,19 +40,20 @@ namespace CCOS::Dev::Detail::Generator
 //-----------------------------------------------------------------------------
 	namespace nDev = CCOS::Dev;
 	namespace DevDAP = CCOS::Dev::Detail::DAP;
-	class  _CCOSDEVGENREMEDYST_API  REMEDYSTDevice : public IODeviceWithSCF <IODeviceDetail>,public GeneratorMould
+	class  _CCOSDEVGENREMEDYST_API  REMEDYSTDevice : public IODeviceDetail,public GeneratorMould
 	{
-		using super = IODeviceWithSCF <IODeviceDetail>;
+		using super = IODeviceDetail;
 		using superGen = GeneratorMould;
 		
 	public:
 		//REMEDYSTDevice (std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF);
-		REMEDYSTDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF,string configfile);
+		REMEDYSTDevice(std::shared_ptr <IOEventCenter> center, std::shared_ptr<SCFWrapper> SCF,string configfile);
 		~REMEDYSTDevice ();
 
 		virtual std::string GetGUID() const override;
 	public:
-		static atomic<int>  m_iLoopTime;	          //循环间隔时间(毫秒)
+		static atomic<int>  m_iLoopTime;	          //寰�幆鏌ヨ�鏃堕棿(姣��)
+		static atomic<bool> m_bExtraFlag;	          //浣胯兘鏍囪�
 
 		float m_fPFLimitMaxMA;
 		float m_fPFLimitMaxKV;
@@ -51,14 +69,14 @@ namespace CCOS::Dev::Detail::Generator
 		bool  m_bMasR20;
 		bool  m_bUseEAcmd;
 	private:
-		RET_STATUS  HWSend (char * strCommand, int nTimeOut = TIMEOUTVALUE);
-		void OnCallBack ();		
+		RET_STATUS  HWSend (const char * strCommand, int length = 0, bool reSend = false, int nTimeOut = TIMEOUTVALUE);
+		void OnCallBack ();
+		std::shared_ptr<SCFWrapper> m_SCF;
 		std::unique_ptr<DevDAP::DOSEMould> m_DAP;
 		std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit;
 		bool StartHardwareStatusThread();
-		static DWORD HardwareStatusThread(LPVOID pParam);
-		HANDLE m_pHardwareStatusThread;
-
+		static void HardwareStatusThread(REMEDYSTDevice* pParam);
+		std::thread m_pHardwareStatusThread;
 		
 	private:
 		void Register();
@@ -106,7 +124,7 @@ namespace CCOS::Dev::Detail::Generator
 
 		virtual RET_STATUS Reset()override;
 		virtual RET_STATUS SetExpMode(std::string value) override;
-		virtual RET_STATUS SetFrameRate(FLOAT frameRate) override;
+		virtual RET_STATUS SetFrameRate(float frameRate) override;
 		virtual RET_STATUS SetFLFMode(std::string value) override;
 		virtual RET_STATUS SetEXAMMode(std::string value) override;
 
@@ -119,7 +137,7 @@ namespace CCOS::Dev::Detail::Generator
 		RET_STATUS StartMove();
 		RET_STATUS EndMove();
 
-		/********************透视命令****************************/
+		/********************閫忚�鐩稿叧****************************/
 
 		virtual RET_STATUS SetAPF(const _tAPFArgs& t) override;
 
@@ -155,11 +173,11 @@ namespace CCOS::Dev::Detail::Generator
 		int LoadConfig(string configfile);
 	protected:
 		RET_STATUS RefreshData ();
-		RET_STATUS SetRPS(int rps);//设置连续点片帧率
+		RET_STATUS SetRPS(int rps);//杩炵画鏇濆厜鐗囧抚鐜�
 	private:
 		void FireNotify (std::string key, std::string context);
-		HANDLE m_hGenPostEvent;			//暂时不使用了.		
-		_tAPRArgs m_t;					//保存服务传入的参数
+		HANDLE m_hGenPostEvent;			//鏆傛椂涓嶄娇鐢ㄤ簡.
+		_tAPRArgs m_t;					//鏀惧皠鏇濆厜鐨勫弬鏁�
 
 		string m_strConfigPath;			//REMEDYST generator confile.
 		ResDataObject m_GenConfig;		//driver's config file.
@@ -169,10 +187,10 @@ namespace CCOS::Dev::Detail::Generator
 		bool m_bResetActive;
 		bool m_bIsConfigLoaded;
 
-		vector<string> m_localErrorlist;	//本地error list,用于清除error时,使用里面的string。
-		vector<string> m_localWarnlist;		//本地warn  list,用于清除warn 时,使用里面的string。
+		vector<string> m_localErrorlist;	//淇濆瓨error list,鐢ㄤ簬瑙﹀彂error鏃跺垽鏂�槸鍚﹀凡缁弒tring浜�
+		vector<string> m_localWarnlist;		//淇濆瓨warn  list,鐢ㄤ簬瑙﹀彂warn 鏃跺垽鏂�槸鍚﹀凡缁弒tring浜�
 
-		string WSUI2Gen(int nUIWS);			//根据nWS,得到string WS.
+		string WSUI2Gen(int nUIWS);			//鏍规嵁nWS寰楀埌string WS.
 	};
 }
 
@@ -183,9 +201,9 @@ namespace CCOS::Dev::Detail::Generator
 
 namespace CCOS::Dev::Detail::Generator
 {
-	class  _CCOSDEVGENREMEDYST_API  REMEDYSTDriver : public IODriverWithSCF <DriverMould>
+	class  _CCOSDEVGENREMEDYST_API  REMEDYSTDriver : public DriverMould
 	{
-		using super = IODriverWithSCF <DriverMould>;
+		using super = DriverMould;
 
 	public:
 		REMEDYSTDriver ();
@@ -199,8 +217,8 @@ namespace CCOS::Dev::Detail::Generator
 		virtual void Disconnect() override;
 		virtual bool isConnected() const override;
 
-		virtual void Dequeue (const char * Packet, DWORD Length) override;
-		virtual void FireNotify (int code, std::string key, std::string content) override;
+		virtual void Dequeue (const char * Packet, DWORD Length) ;
+		virtual void FireNotify (int code, std::string key, std::string content) ;
 
 		virtual auto CreateDevice (int index)->std::unique_ptr <IODevice> override;
 
@@ -217,21 +235,49 @@ namespace CCOS::Dev::Detail::Generator
 		bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
 		bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue);
 
+		std::shared_ptr<SCFWrapper> m_scfWrapper;
 	private:
-		static PACKET_RET callbackPackageProcess (const char* RecData, DWORD nLength, DWORD& PacketLength);
+		static PACKET_RET callbackPackageProcess (const char* RecData, uint32_t nLength, uint32_t& PacketLength);
 
 		bool m_bDemoMode;
-		bool m_bDemoConnected;	//	在 DEMO 模式下, 调用过 Connect 吗?
-
+		bool m_bDemoConnected;	//	鍦� DEMO 妯″紡涓�, 璋冪敤杩� Connect 鍚�?
 
 		ResDataObject m_DeviceConfig;
 		ResDataObject m_DeviceConfigSend;
 		string g_strAppPath;
-		ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件
-		ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容
-
-
-		//webconfig使用
+		ResDataObject m_ConfigAll; //瀛樺偍褰撳墠閰嶇疆椤�,濡傛灉淇�敼閰嶇疆鏃跺啓鍏ユ枃浠�
+		ResDataObject m_Configurations; //瀛樺偍褰撳墠閰嶇疆椤逛腑CONFIGURATION鑺傜偣鍐呭�
+
+
+		enum class ConnectionState {
+			Disconnected,
+			Connecting,
+			Connected,
+			Failed
+		};
+
+		enum class ConnectionType {
+			Serial,       // 涓插彛
+			Ethernet      // 缃戝彛
+		};
+
+		std::atomic<ConnectionState> m_connectionState{ ConnectionState::Disconnected };
+		std::chrono::steady_clock::time_point m_lastConnectionAttempt;
+		std::mutex m_connectionMutex;
+		const std::chrono::seconds RESET_RETRY_AFTER{ 60 };
+
+		// 淇�敼鎴愬憳鍙橀噺瀹氫箟锛屾坊鍔爉utable鍏佽�const鍑芥暟淇�敼
+		mutable int m_connectionRetryCount{ 0 };  // 鍏抽敭锛氱敤mutable淇�グ
+		const int MAX_RETRY_COUNT = 3;
+		const std::chrono::seconds RETRY_INTERVAL{ 5 };
+
+		// 涓插彛鐩稿叧锛堝浐瀹氭敮鎸佺殑绔�彛锛屽彲浠庨厤缃�墿灞曪級
+		std::vector<std::string> m_serialPorts{ "/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3", "/dev/ttyUSB4" };
+		int m_currentSerialPortIndex{ 0 };  // 褰撳墠灏濊瘯鐨勪覆鍙g�鍙g储寮�
+		ConnectionType m_currentConnType{ ConnectionType::Serial };
+
+		//webconfig浣跨敤
+		std::string  m_SCFDllName;
 		std::unique_ptr <ResDataObject> m_pAttribute;
 		std::unique_ptr <ResDataObject>  m_pDescription;
 		REMEDYSTDevice* m_pDevice{ nullptr };

Some files were not shown because too many files changed in this diff