// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SUBSYSTEM_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SUBSYSTEM_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #pragma once #ifdef SUBSYSTEM_EXPORTS #define SUBSYSTEM_API __declspec(dllexport) #else #define SUBSYSTEM_API __declspec(dllimport) #endif #ifndef SUBSYSTEM_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "SubSystemX64D.lib") #else #pragma comment(lib, "SubSystemX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "SubSystemD.lib") #else #pragma comment(lib, "SubSystem.lib") #endif #endif #endif //#include "logicdevice.h" //#include "CommonLogicClient.h" //#include "DIOSLogicDeviceStructure.h" #include "HWMSM_API.h" //#include //using namespace std; #include "commonDataStruct.h" // 此类是从 SubSystem.dll 导出的 class SUBSYSTEM_API CSubSystem : public LogicDevice { public: CSubSystem(void); virtual ~CSubSystem(void); // TODO: 在此添加您的方法。 public: void *m_pData; void *m_pThread; void *m_pNotify; //ResourceCommand Request In and Response Out virtual RET_STATUS OpenLogicDevice(); virtual RET_STATUS CloseLogicDevice(); RET_STATUS AddDeviceDriver(const char* path); RET_STATUS DelcDeviceDriver(const char* path); RET_STATUS AddUnitDevice(ResDataObject & pConfig); RET_STATUS DelUnitDevice(ResDataObject & pConfig); virtual RET_STATUS ResetLogicDevcie(); virtual bool SetSubSystemObj(CSubSystem *p, int Simulator, const char* path); virtual bool GetConfigRes(ResDataObject & pConfig); virtual bool GetDeviceConfigRes(ResDataObject & pConfig); virtual bool SetDeviceConfigRes(); //get device type,returns device type GUID virtual bool SYSTEM_CALL GetDeviceType(GUID &DevType); //notify to lower layer virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); //get device resource virtual RET_STATUS GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource); virtual RET_STATUS Request(ResDataObject PARAM_IN *pRequest, ResDataObject PARAM_OUT *pResponse); //向子系统设备设参数,如检查信息,APR参数 virtual RET_STATUS SetAPR(APRStruct PARAM_IN &pParam); virtual RET_STATUS SetAS(ResDataObject PARAM_IN& pParam); virtual RET_STATUS SetWorkStation(ResDataObject PARAM_IN& pParam); virtual RET_STATUS EnableEXP(); virtual RET_STATUS DisableEXP(); virtual RET_STATUS SetExamInfo(ResDataObject PARAM_IN& pParam); virtual RET_STATUS StartExam(); virtual RET_STATUS SetApplicationMode(ResDataObject & nApplicationMode); virtual RET_STATUS GetApplicationType(const char PARAM_OUT *applicationtype); virtual RET_STATUS SetSEQResource(ResDataObject PARAM_IN& pDeviceResource); virtual RET_STATUS GetSEQResource(ResDataObject PARAM_OUT *pDeviceResource); //UI通过该接口获取数据容器中的参数 virtual RET_STATUS GetECMData(const char PARAM_OUT *pParam); //UIt退出当前Seq virtual RET_STATUS ExitSeq(); virtual RET_STATUS EnterExam(); virtual RET_STATUS ExitExam(); //UI触发时序状态机变迁接口 virtual RET_STATUS TransformSMsate(const char * state); virtual RET_STATUS Standby(); virtual RET_STATUS SeqPrep(); virtual RET_STATUS SeqReady(); virtual RET_STATUS FramePrep(); virtual RET_STATUS ExpEnable(); virtual RET_STATUS FrameReady(); virtual RET_STATUS FrameStart(); virtual RET_STATUS XWindowOn(); virtual RET_STATUS FrameIn(); virtual RET_STATUS FrameInComplete(); virtual RET_STATUS FramePost(); virtual RET_STATUS FramePostResult(); virtual RET_STATUS FrameEnd(); virtual RET_STATUS FrameEndResult(); virtual RET_STATUS SeqPost(); virtual RET_STATUS SeqPostResult(); virtual RET_STATUS FrameErr(); //////////////校正相关接口///////////////// virtual RET_STATUS StartCalibration(); //seqprep之后 virtual RET_STATUS AcceptCurrImgage(); virtual RET_STATUS RejectCurrImgage(void); virtual RET_STATUS AbortCalibration(void); virtual RET_STATUS FinishCalibration(void); /////////////////////////////////////////// bool StateAction(char* strState); bool StateGuard(char* strState ); bool ExitSMManger(); int WaitforNotify(HANDLE exit); //模拟手闸信号,用于demo virtual RET_STATUS PR2Simulator(int simulatorstatus); //获取抽象设备路径 提供给驱动调用的接口 //virtual RET_STATUS SetAbstrctlogicPath(const char* PARAM_IN AbstractName, const char*PARAM_IN Abstractpath) = 0; int StayInSatate(HANDLE exitFlag, int strState); int UISkipSatate(HANDLE exitFlag, int strFromState, int &strToSatate); void SetStateEvent(int state); //void Pausetime(DWORD dwSpan); protected: bool ProcessNotify(const char* strKey, ResDataObject& ResNotify); private: void loginfo(const char* pstr); bool SendExpEnableNotify(bool expenable); bool SendXrayOnNotify(bool xrayenable); bool CheckASState(const char *ws); virtual bool CheckDriverState(); virtual bool CheckDriverState(const char* strWorkPath,int cmdtype); void InitUnitState(); bool SetUnitState(const char *path, bool state); bool GetUnitState(); int WaitforStateNotify(const char* strState, int State, HANDLE exit); int Find(const char *name, ResDataObject& Res); }; SUBSYSTEM_API bool LogicDevice_StateAction(char *strState); SUBSYSTEM_API bool LogicDevice_StateGuard(char *strState);