|
@@ -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 };
|