#pragma once //#include "GeneratorDriver.h" #include "LogicDriver.h" #define TIMEOUTVALUE 500 #define TIMEOUTVALUE_NOMAL 100 #define VALUELENGTH_NORMAL 50 #define VALUELENGTH_MAX 100 class CMACHINE_DPC : public LogicDriver { std::string *m_pWorkpath; public: CMACHINE_DPC(); virtual ~CMACHINE_DPC(); /////////////////////////////////////////////////////// virtual bool DriverEntry(ResDataObject &Configuration); virtual bool Driver_Probe(ResDataObject &HardwareInfo); virtual bool SYSTEM_CALL SetDriverWorkPath(const char * PARAM_IN pWorkPath); virtual PVOID SYSTEM_CALL LoadDriver();//无根节点 virtual void SYSTEM_CALL UnloadDriver(); RET_STATUS SYSTEM_CALL GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo); RET_STATUS SYSTEM_CALL GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource); //virtual bool OnNotify(HANDLE ExitNotify); virtual DWORD SYSTEM_CALL OnNotify(HANDLE evtList[], DWORD count); virtual bool Connect(); virtual void DisConnect(); //给硬件驱动设置Unique工作路径 //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的. //连接后,单一硬件相关的数据要保存在此. virtual bool SYSTEM_CALL SetDeviceWorkPath(const char * PARAM_IN pWorkPath); //逻辑设备树的加载和卸载 virtual PVOID SYSTEM_CALL LoadLogicDevices(); virtual void SYSTEM_CALL UnloadLogicDevices(); virtual bool SYSTEM_CALL OnHeartBeat(); virtual bool Device_Probe(ResDataObject &HardwareInfo); bool SetupStitching(int nImageCount, int nDirection, int nInitialHeight, int nStitchLength, int nStepLength, int nSID, int nStitchType); ///////////////////////////////// static PACKET_RET PackageProcess(const char * RecData, DWORD nLength, DWORD& PacketLength); int SendCommandWithoutAck(char* strCommand, int nTimeOut = TIMEOUTVALUE); size_t OnCallback(const char * strPackage, size_t nLength); public: int m_nImageCount{ 0 }; // total number of stitching images int m_nCurrentImage{ 0 }; //Current stitching procedure image bool m_bStitchingInProgress{ false }; private: string m_strWorkPath; ResDataObject m_DeviceConfig; //设备属性 HMODULE m_hDPCDll; bool m_bStatusFlag{false}; HMODULE m_SCFDllFileHandle; SCF* m_pSCFServer; typedef SCF* (*GetSCF)(); GetSCF m_fpGetSCF; typedef void(*ReleaseSCF)(SCF *p); ReleaseSCF m_fpReleaseSCF; SCFPacket *m_pSendPacket; SCFPacket *m_pReceivePacket; string m_strCurrentCommand{ "" }; CRITICAL_SECTION m_stCSProcessMsg; class CMACHINE_Logical * m_pGenLogical; ResDataObject m_DetectorToTableDistance; ResDataObject m_DistanceSourcetoDetector; ResDataObject m_DistanceSourcetoEntrance; ResDataObject m_ProjectionNum; ResDataObject m_ProjectionMaxAngle; ResDataObject m_ProjectionDirection; ResDataObject m_MechAngle; ResDataObject m_MechHeight; };