#pragma once /*======================================================================================== 单元逻辑设备的功能: 1、实现各参数的设置(仅提供功能接口); 2、实现在各种应用(DR、RF、超声)下的dose管理; 3、实现在各种检查(双能、拼接、软件AEC、AED等)下的状态管理; ==========================================================================================*/ #ifndef GENUNITLOGIC_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "GenUnitLogicX64D.lib") #else #pragma comment(lib, "GenUnitLogicX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "GenUnitLogicD.lib") #else #pragma comment(lib, "GenUnitLogic.lib") #endif #endif #endif #define PARAM_IN_TYPE #define ABSTRACT2UNIT 0 #define UNIT2ABSTRACT 1 #ifdef GENUNITLOGIC_EXPORTS #define GENUNITLOGIC_API __declspec(dllexport) #else #define GENUNITLOGIC_API __declspec(dllimport) #endif #include "LogicDevice.h" #include "DIOSLogicDeviceStructure.h" typedef enum GenWorkStation_Type { GENUNIT_WS_TABLE, GENUNIT_WS_WALL, GENUNIT_WS_CONVENTIONAL, GENUNIT_WS_FREE, GENUNIT_WS_TOMO, GENUNIT_WS_TABLE_WALL, GENUNIT_WS_FREE2, }GENWORKSTATION_TYPE; class GENUNITLOGIC_API GenUnitLogic : public LogicDevice { //1.setexaminfo,把后补检查集传下来. //2.SelectExamMode,指定检查类型.(这里传递的是DX or RF,内部要读取对应的具体检查,并设置) //3.因为之前的定义没有考虑RF场景,所以旧版ExamMode和新版ExamMode基本上不匹配. /*这件事情要等到RF实际投入的时候重新考虑,目前只考虑DX情况*/ ResDataObject *m_ExamInfo; // {{DX:Stitch} with {RF:ContinueSerial} or only one} ResDataObject *m_CurrentExamMode;//DX or RF BaseJsonDataObject *m_SysSequence;//SysSequence BaseJsonDataObject *m_AppMode;//application mode:RF/dr BaseJsonDataObject *m_ExamMode;//Exam mode:dual energy\stitching //BaseJsonDataObject *m_WorkStation;//WorkStation BaseJsonDataObject *m_WorkStation;//WorkStation BaseJsonDataObject *m_Techmode;//Techmode BaseJsonDataObject *m_Focus;//Focus BaseJsonDataObject *m_KV;//KV BaseJsonDataObject *m_MA;//mA BaseJsonDataObject *m_MS;//MS BaseJsonDataObject *m_MAS;//MAS BaseJsonDataObject *m_AECDensity;//AECDensity BaseJsonDataObject *m_AECField;// AECField BaseJsonDataObject *m_AECFilm;// AECFilm BaseJsonDataObject *m_PostKV;//PostKV BaseJsonDataObject *m_PostMA;//PostMA BaseJsonDataObject *m_PostMS;//PostMS BaseJsonDataObject *m_PostMAS;//PostMAS BaseJsonDataObject *m_ExposureStatus;// Exposure Status BaseJsonDataObject *m_TotalExposureStep;// Total Exposure Step:Dual,Stitch,used multiple exposure. BaseJsonDataObject *m_CurExposureStep;// Exposure Step:Dual,Stitch,used multiple exposure. //mech etc BaseJsonDataObject *m_MechTotalSize;//total size BaseJsonDataObject *m_MechCurrentPos;//current pos BaseJsonDataObject *m_MechStepSize;//next step size BaseJsonDataObject *m_ExposedDose;// BaseJsonDataObject *m_Reset;//Reset 0: fail; 1: successful, BaseJsonDataObject *m_Error;// Exposure Status BaseJsonDataObject *m_Warning;//Reset 0: fail; 1: successful, BaseJsonDataObject *m_PosReplyKV;//ReplyKV BaseJsonDataObject *m_PosReplyMA;//ReplyMA BaseJsonDataObject *m_PosReplyMS;//ReplyMS BaseJsonDataObject *m_NosReplyKV;//ReplyKV BaseJsonDataObject *m_NosReplyMA;//ReplyMA BaseJsonDataObject *m_NosReplyMS;//ReplyMS BaseJsonDataObject *m_FKV;//FLKV BaseJsonDataObject *m_FMA;//FLmA BaseJsonDataObject *m_ABS; BaseJsonDataObject *m_EXO; BaseJsonDataObject *m_TubeHeat;//HE BaseJsonDataObject *m_DAP;//DAP(mGycm^2) BaseJsonDataObject *m_PositionCode;// ResDataObject *m_KVList; ResDataObject *m_MAList; ResDataObject *m_MSList; ResDataObject *m_MASList; public: GenUnitLogic(void); virtual ~GenUnitLogic(void); //get device type virtual bool SYSTEM_CALL GetDeviceType(GUID &DevType); //get device resource virtual RET_STATUS SYSTEM_CALL GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource); //register system status virtual RET_STATUS SYSTEM_CALL GetSEQResource(ResDataObject PARAM_OUT *pDeviceStatus); //register system status virtual RET_STATUS SYSTEM_CALL GetDoseResource(ResDataObject PARAM_OUT *pDeviceStatus); //ResourceCommand Request In and Response Out virtual RET_STATUS SYSTEM_CALL Request(ResDataObject PARAM_IN *pRequest,ResDataObject PARAM_OUT *pResponse); //notify to lower layer virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); //errors,warnings void SetErrorInfo(int errCode ,char *pErrInfo); void SetWarningInfo(int warningCode,char *pWarningInfo); //Data Access virtual int DATA_ACTION GetValue(float PARAM_OUT &Value, int PARAM_IN_TYPE ParamType); virtual int DATA_ACTION SetValue(float PARAM_IN Value, int PARAM_IN_TYPE ParamType); virtual int DATA_ACTION GetValue(int PARAM_OUT &Value, int PARAM_IN_TYPE ParamType); virtual int DATA_ACTION SetValue(int PARAM_IN Value, int PARAM_IN_TYPE ParamType); virtual int DATA_ACTION SetAPR(APRStruct APRParam); virtual RET_STATUS DATA_ACTION EnterExp(); virtual int DATA_ACTION AcceptExp(ResDataObject& Workstation); virtual int DATA_ACTION ImageReady(ResDataObject& ImageStatus); virtual int DATA_ACTION ExitExp(); virtual int DATA_ACTION ReadRealExploseStatus(ResDataObject& WorkStation); //留给子系统的接口,没有用就不要管. //跟SetExamMode不同,它设置的是ExamInfo中的ExamMode,然后把ExamMode转为SetExamMode. const char *GetCurrentExamMode(); ResDataObject& GetCurrentExamInfo(); virtual RET_STATUS DATA_ACTION SetExamInfo(ResDataObject PARAM_IN& pParam); virtual RET_STATUS DATA_ACTION SelectExamMode(const char *pAppKey); virtual RET_STATUS SetStudyInfo(ResDataObject PARAM_IN& pParam); virtual RET_STATUS SetTechParamsInfo(ResDataObject PARAM_IN& pParam); //Actions virtual int DEVICE_ACTION IncParam(int nAdjustStep, int PARAM_IN_TYPE ParamType); virtual int DEVICE_ACTION DecParam(int nAdjustStep, int PARAM_IN_TYPE ParamType); virtual int DEVICE_ACTION IncParamL(int nAdjustStepL, int PARAM_IN_TYPE ParamType); virtual int DEVICE_ACTION DecParamL(int nAdjustStepL, int PARAM_IN_TYPE ParamType); virtual int DEVICE_ACTION RefreshParameterList(const char* ParamType, float* List, int ListCount, float maxvalue, float minvalue); //Support function virtual bool DEVICE_SUPPORT Support_IncParam(int PARAM_IN_TYPE ParamType); virtual bool DEVICE_SUPPORT Support_DecParam(int PARAM_IN_TYPE ParamType); virtual bool DEVICE_SUPPORT Support_IncParamL(int PARAM_IN_TYPE ParamType); virtual bool DEVICE_SUPPORT Support_DecParamL(int PARAM_IN_TYPE ParamType); virtual bool DEVICE_SUPPORT Support_SetValue(int PARAM_IN_TYPE ParamType); virtual bool DEVICE_SUPPORT Support_GetValue(int PARAM_IN_TYPE ParamType); bool DEVICE_SUPPORT Support_SeqPrepState(void); bool DEVICE_SUPPORT Support_SeqReadyState(void); bool DEVICE_SUPPORT Support_FramePrepState(void); bool DEVICE_SUPPORT Support_FrameReadyState(void); bool DEVICE_SUPPORT Support_FrameStartState(void); bool DEVICE_SUPPORT Support_FrameInState(void); bool DEVICE_SUPPORT Support_FramePostState(void); bool DEVICE_SUPPORT Support_FrameEndState(void); bool DEVICE_SUPPORT Support_SeqPostState(void); RET_STATUS WaitforWS(DWORD nWaitTime = 3000); //Wait For Workstation //virtual int SetExploreStatus(const char* szKey, USHORT Value); HANDLE m_hGenWSEvent; private: string Type2Char(int nMessageType); string SwitchWorkStation(int& nWorkStationType, string strWS, int nSwitchType); //0: from char* to int; 1: from int to char* bool CheckExamSame(ResDataObject* OriExam, ResDataObject* CurExam); };