#pragma once #include "Global_Define.h" #include "GrabberControl.h" #include "corapi.h" #define MAX_BUFFER_SIZE 20 #define MAX_BUFFER_COUNT 200 enum BUFFER_COUNT{MAX_FRAME_COUNT= MAX_BUFFER_SIZE*MAX_BUFFER_COUNT}; class CFrameBufferController; class CSapControl : public CGrabberControl { public: CSapControl(void); virtual ~CSapControl(void); public: virtual BOOL Initialize(void *pParam, int *pErrorCode,int iBoard=0); // Grabber 檬扁拳 virtual BOOL InitializeBuffer(void *pParam); virtual BOOL Deinitialize(); virtual BOOL GrabScanStart(int iScan, BOOL bFreeRun, int nPeriod, int nExposure=10, BOOL bAuto=TRUE); virtual BOOL GrabLiveStart(int nExposure=15); virtual BOOL GrabScanStop(); virtual BOOL IsGrabbing(){return m_isGrabbing;} virtual int IsAcqFrame(int nFrameNo, int nThreadIdx = -1); virtual LPBYTE GetFrameHeader(int iScan,int nFrameNo, BOOL* bSuccess = NULL); virtual LPBYTE GetFrameHeaderLine(int iScan,int nLine, BOOL* bSuccess = NULL); virtual BOOL GetSmallImage(int iScan,LPBYTE lpIn, int nXStart, int nYStart, int nXSize, int nYSize, BOOL bMustMapping = TRUE); virtual int GetStartFrameIdx() { return m_nStartFrameIdx; } virtual int GetEndFrameIdx() { return m_nEndFrameIdx; } virtual void SetSimulFrame(int nFrame){;} virtual int GetGrabFrameCount(); virtual void ClearGrabIdx(); virtual stFrameIndex GetGrabFrame(); virtual stFrameIndex GetGrabFrameNoRemove(); virtual CFrameBufferController *GetFrameBuffer(){return m_pFrameBuffer;} virtual BOOL SetTriggerMode( BOOL bExTrigger ){return TRUE;} BOOL FindGrabIdx(int iScan,int iFrame); protected: BOOL GetServer(); CORSTATUS DisplayStatus( char *functionName, CORSTATUS status); BOOL CreateAcq(); BOOL CreateCamAndVic(); BOOL CreateBuffer(UINT32 uiType); BOOL CreateXfer(); BOOL ClearBuffer(); BOOL CreateGrabBuffer(int nScanCount,int nBufSize, int nBufSizeX, int nBufSizeY); BOOL DestroyBuffer(); BOOL DestroyXfer(); BOOL DestroyCamAndVic(); void SimulationGrab(int iScan); BOOL SetInsertFrame(int iScan,int iFrame); BOOL IsHasGrabFrame(); LPBYTE GetGrabFrameHeader(int nFrameNo); static CORSTATUS CCONV XferCallback (void *context, UINT32 eventType, UINT32 eventCount); protected: _GRABBER_INIT_PARAM_ m_Param; int m_nEndFrameIdx; // 泅犁 Grab 茄 荐 int m_nStartFrameIdx; // 啊厘 坷贰傈俊 Grab茄 Frame狼 牢郸胶. int m_nSetBufferIdx; int m_nScanIndex; int m_nAllocatedGrabBufSize; int m_nBoardID; BOOL m_isGrabbing; BOOL m_isLiveGrab; CFrameBufferController *m_pFrameBuffer; dqGrabIdx m_dqCallbackFrame; CCriticalSection m_csIdxLock; BYTE* m_pOneLargeBuffer; void* m_pX64Buffer[MAX_BUFFER_COUNT]; // 角力 且寸瞪 滚欺. CORBUFFER m_hBuffer[MAX_BUFFER_COUNT]; // Handle to Buffer module where acquisition will take place CORBUFFER m_hFrame[MAX_FRAME_COUNT]; BOOL m_bIsGrabbing; // Grabbing 吝牢瘤 酒囱瘤 魄窜. CORSERVER m_hPC; // Handle to a PC Sapera server CORSERVER m_hBoard; // Handle to Sapera server that will be acquiring CORCAM m_hCam; // Handle to Camera module CORVIC m_hVic; // Handle to VIC module CORXFER m_hXfer; // Handle to Transfer module CORACQ m_hAcq; // Handle to Acquisition module };