#pragma once #include "IODeviceWithSCF.tlh" #include "IODeviceWithSCF.tli" #include "DIOS.Dev.SYNBOX.Mould.hpp" #include "DeviceFullUCB.hpp" #ifdef DIOSDEVSYNFULLUCB_EXPORTS #define _DIOSDEVSYNBOX_API __declspec(dllexport) #else #define _DIOSDEVDYNBOX_API __declspec(dllimport) #endif namespace DIOS::Dev::Detail::SYNBOX { class _DIOSDEVSYNBOX_API SyncBoxDevice :public IODeviceWithSCF { using super = IODeviceWithSCF ; public: SyncBoxDevice(std::shared_ptr center, nsSCF::SCF SCF, string configfile); ~SyncBoxDevice(); virtual std::string GetGUID() const override; RET_STATUS HWSend(const char* strCommand, int nCMDLengh, int nTimeOut = TIMEOUTVALUE); //V3新方法 virtual void SubscribeSelf(dios_mqtt_connection* conn) override; protected: void Register(); void OnCallBack(); public: static SyncBoxDevice *m_SingleExample; std::unique_ptr m_MSGUnit; std::unique_ptr m_DeviceFullUCB; }; } //----------------------------------------------------------------------------- // SyncBoxDriver //----------------------------------------------------------------------------- namespace DIOS::Dev::Detail::SYNBOX { class _DIOSDEVSYNBOX_API SyncBoxDriver : public IODriverWithSCF { using super = IODriverWithSCF ; public: SyncBoxDriver(); virtual ~SyncBoxDriver(); public: virtual bool DriverEntry(std::string CfgFileName) override; virtual void Prepare() override; virtual bool DATA_ACTION Connect() override; 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 auto CreateDevice(int index)->std::unique_ptr override; virtual bool GetDeviceConfig(std::string& Cfg) override; virtual bool SetDeviceConfig(std::string Cfg) override; virtual std::string DriverProbe() override; virtual std::string GetResource() override; virtual std::string DeviceProbe() override; static PACKET_RET callbackPackageProcess(const char* RecData, DWORD nLength, DWORD& PacketLength); bool ReConnection(nsSCF::SCF& DevSCF); private: bool m_bConnected; //改为连接标志 SyncBoxDevice* m_pDYNDevice{ nullptr }; ResDataObject m_DeviceConfig; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; void HandshakeTest(); bool SaveConfigFile(bool bSendNotify); bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue); bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue); }; }