#pragma once #include "LogicDevice.h" #include "commonDataStruct.h" #include "ScopeLock.h" #ifndef SYSTEMDEVICE_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "LogicDeviceX64D.lib") #else #pragma comment(lib, "LogicDeviceX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "LogicDeviceD.lib") #else #pragma comment(lib, "LogicDevice.lib") #endif #endif #endif #define CONNECTIONERROR 1 #define UNCLEARERROR 2 #define CLEARERROR 3 #define AUTOCLEARERROR 4 #ifdef SYSTEMDEVICE_EXPORTS #define SYSTEMDEVICE_API __declspec(dllexport) #else #define SYSTEMDEVICE_API __declspec(dllimport) #endif class SYSTEMDEVICE_API DeviceObject { public: DeviceObject(); virtual ~DeviceObject(); //打开设备 int Open(string DeviceRootURI); int OpenDevice(); //关闭设备 int Close(); int CloseDevice(); RET_STATUS DeviceAction(const char* ActionName, ResDataObject& req, ResDataObject& res, DWORD timeout); const char* GetDeviceURI() { return m_strDeviceRoot.c_str(); } int GetAllDevice(ResDataObject& rdoAll); int GetDeviceUnitCount() { return m_nDeviceNum; } LogicClient* GetDeviceClient(int idx); LogicClient* GetDriverClient() { return m_pRootDriver; } protected: string m_strDeviceRoot; LogicClient *m_pRootDriver; ResDataObject m_DriverResource; ResDataObject m_DeviceList; int m_nDeviceNum; LogicClient* *m_pDevices; }; /* * ROOT路径即设备的驱动URI,打开之后的设备URI是相对路径 ServiceDefault DIOS/DEVICE/DETECTOR/iRay/3543W/A876453 DIOS/DEVICE/GENERATOR/Simens/Exs/B87632 DRSystem ServiceDefault DIOS/DEVICE/DETECTOR/ECOM/DEMO/DEMOFPD DIOS/DEVICE/GENERATOR/ECOM/DEMO/DEMOGEN DRSystem DIOS/DEVICE/SERVICE/ImageSave/ECOM/1234 DIOS/DEVICE/SERVICE/ImageView/ECOM/1234 DIOS/DEVICE/SYSTEM/DRSystem/ECOM/1234 DIOS/DEVICE/SYSTEM/DRSystem/ECOM/1234 */ class SYSTEMDEVICE_API WorkStationDevice : public LogicDevice { protected: //ResDataObject* m_pResErrorList; //错误列表 string m_strConfigFileName; //配置文件路径 ResDataObject m_resAllConfig; //配置内容 string m_strSetWS; //当前WorkStation名称 BaseJsonDataObject m_WorkSatition; //当前WorkStation对象 int m_nAllOemDeviceNum; DeviceObject* m_pAllOemDevice; //工作位专用对象,如探测器+发生器 int m_nServiceDeviceNum; DeviceObject* m_pServiceDevice; //服务设备 int m_nSystemDeviceNum; DeviceObject* m_pSystemDevice; //系统设备 vector m_pWSDriverClient; int m_nAllDeviceUnitNum;// 所有设备数量,包括服务设备和系统设备 vector m_pWSDeviceClient; //所有的设备client事件句柄 HANDLE* m_pHandleArray; // DeviceUnit通知事件数组,这里有漏洞,如果发生连续两个事件,会漏,使用者要两个都用:事件和轮询 vector< string > m_vecWorksationDeviceUnitPath; //与Handle保持一致的事件对应的设备Path protected: bool RefreshUnitClientAttribute(); RET_STATUS ResetFunc(); void CloseUnit(const string& strPath); public: //对象对外接口 //根据URI查找设备 DeviceObject* FindDevice(string strDeviceURI); int GetAllDevice(ResDataObject& rdoAll); int OpenAll(); int CloseAll(); RET_STATUS RESET(); RET_STATUS SetAction(const char* ActionName, ResDataObject& Req, ResDataObject& Resp, DWORD timeout = INFINITE); vector GetAllDeviceDrivers(const char* ws = nullptr); void GetDriversNotifyHandle(HANDLE* pHandles, int nNum); vector GetAllDeviceUnit(); public: WorkStationDevice(); virtual ~WorkStationDevice(); //继承的接口实现 virtual bool SYSTEM_CALL GetDeviceType(GUID& DevType) override; virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN* pCmd) override; RET_STATUS Request(ResDataObject PARAM_IN* pRequest, ResDataObject PARAM_OUT* pResponse) override; virtual RET_STATUS GetDeviceResource(ResDataObject PARAM_OUT* pDeviceResource) override; public: //模块对外接口 //设置配置文件路径 bool SetConfigFile(const char* pszFileName); bool SetConfigRes(ResDataObject &resConfig); //切换工作位 RET_STATUS SetWorkStation(const char* pParam, int setWs = 1); //查询工作位 RET_STATUS GetWorkStion(const char* pParam, ResDataObject &resWorkStation); RET_STATUS GetWorkStationList(ResDataObject& resWSList); //添加工作位 RET_STATUS AddWorkStation(const char* pParam, ResDataObject &resWorkStation); //删除工作位 RET_STATUS DelWorkStation(const char* pParam); //编辑工作位 RET_STATUS EditWorkStation(const char* pParam, ResDataObject &resWorkStation); //检查工作位 RET_STATUS CheckWorkStation(const char* pParam); //EBus版本WorkStation的Driver列表 RET_STATUS GetDeviceDriver(); RET_STATUS AddDriverList(const ResDataObject& pParam); RET_STATUS DelDriverList(const ResDataObject& pParam); RET_STATUS AddDeviceDriver(const ResDataObject& pParam); RET_STATUS DelDeviceDriver(const ResDataObject& pParam); RET_STATUS SetDeviceStatusAttr(const ResDataObject& pParam); bool CheckDriverDevice(); RET_STATUS SetAS(const string& pParam); bool CheckASState(const char* ws = nullptr); // m_mapDeviceList有关的函数和定义,设备在线状态相关 enum GetDevListOutType { otSaveXml, otGetDevDriver, }; bool GetDeviceState() { return true; } vector GetAllDevicesDemo(); int GetAllDriversList(GetDevListOutType ot, ResDataObject& rdoOut); void ClearUnitClientList(); void SetUnitClientToList(const char* pPath); bool UpdateUnitClientState(const char* pPath, int cmdtype); bool FindDeviceClient(const string& strDrv, LogicClient** ppClient); int InitDriverList(); void IntUnitClientList(const string& strPath); bool CheckDevUnitErrorList(); public: void CloseAllDeviceClient(); //关闭设备连接 void CloseAllDriverClient(); //关闭驱动连接 };