mrDarker
2025-07-16 1dbe46cd9d0f181d08d5a69f72d8548628a13b9d
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 "StdAfx.h"
#include "sapclassbasic.h"
#include "Global_Define.h"
#include "GrabberControl.h"
 
#define ACQ_NO_IMAGE -10000
 
#define        UM_IMAGE_GRAB        (WM_USER + 1000)
 
class CFrameBufferController;
class CSapLineGrab : public CGrabberControl
{
public:
    CSapLineGrab(void);
    virtual ~CSapLineGrab(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();
    virtual int        IsAcqFrame(int nFrameNo, int nThreadIdx = -1);    // Return 0 - 酒流 救嘛澜, Return -1 - 瘤况, Return 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            CreateGrabBuffer(int nScanCount,int nBufSize, int nBufSizeX, int nBufSizeY);
    void            SimulationGrab(int iScan);
    BOOL            SetInsertFrame(int iScan,int iFrame);
    BOOL            IsHasGrabFrame();
    BOOL            FindGrabIdx(int iScan,int iFrame);
 
    // Main Function.        
    BOOL    CreateAcq(char *file);
    BOOL    CreateObjects();
    BOOL    ActivateObjects();    // Each sap object calls it'w own create() function.
    void    DestroyObjects();
    void    DeleteObjects();
        
    // Acquisition Related.        
    void    WiatXfer(int tMS);    
    BOOL    SetScanDirection(unsigned int nDirection);
    void    My_XferCallback(SapXferCallbackInfo *pInfo);
    
    // Buffer Handing.
    BOOL    CreateBuffer(UINT32 uiType);
    BOOL    ClearBuffer();    
 
    LPBYTE    GetGrabFrameHeader(int nFrameNo, BOOL* bSuccess = NULL);
    BOOL    SetFrameImage(int nFrameNo, int nStartX, int nStartY, int nWidth, int nHeight, LPBYTE lpBuffer);    
 
    CORSTATUS DisplayStatus( char *functionName, CORSTATUS status);
 
public:
    CFrameBufferController    *m_pFrameBuffer;
 
protected:
    SapAcquisition    *m_pSapAcq;
    SapBuffer        *m_pSapBuffers;
    SapTransfer        *m_pXfer;
    SapView            *View;
    int                m_nGrabFrameNo;        // 矫累急苞 八荤且 橇饭烙 荐俊辑 拌魂等 角力 嘛绰 橇饭烙 荐.
    _GRABBER_INIT_PARAM_    m_Param;
    int                m_nBoardID;
    int                m_nAllocatedGrabBufSize;
    int                m_cxferCall;        // Xfercallback捞 龋免等 墨款飘.
    int                m_nScanIndex;
    dqGrabIdx            m_dqCallbackFrame;
    CCriticalSection    m_csIdxLock;
    BOOL            m_bGrabLive;
    // Buffer Accessing.
    int        m_nStartFrameIdx, m_nEndFrameIdx;
    int        m_nSetBufferIdx;
    BOOL    m_bXferCall;
    BOOL    m_bSnapStart;
};