mrDarker
2025-08-13 5cc675212e96d87ebbf00f4fd7a8106b06a490ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#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; }
    virtual BOOL    DumpBufferAsOneImage(int iScan, LPCTSTR pszPath) { 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
 
};