⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lvgvpdef.h

📁 相机传输图像程序源代码 拜耳模式(RAW格式文件)与RGB图像数据互相转换函数库
💻 H
字号:

#ifndef _LV_GVP_DEF_H_
#define _LV_GVP_DEF_H_			//!< used to avoid multiple inclusion

#include "lvdef.h"
#ifdef __WIN32__
#include "winsock.h"
#endif
#include "lvgvpwin32.h"
#include "lvgvpdll_api.h"
#include "lvgvpglobal.h"

#ifdef __cplusplus
extern "C" {
#endif

#define	GVCP_MAX_DATAGRAM_SIZE		576	//!< maximum datagram size to avoid IP fragmentation
#define GVSP_MIN_DATAGRAM_SIZE      500
#define GVSP_MAX_DATAGRAM_SIZE      16120 // 16128bytes - 8 bytes gvsp header  

#define GVP_CFG_SECTION_NAME "LvGvp"

#define CFG_ITEM_GvspPktSize "DefGvspPktSize"
#define CFG_ITEM_GvcpHeartbeatTimeoutMs "GvcpHeartbeatTimeoutMs" 
#define CFG_ITEM_EnableLog "EnableLog" 
#define CFG_ITEM_GvcpSocketSizeKb "SocketSizeKb"
#define CFG_ITEM_GvspInterPktDelay "InterPktDelay"
#define CFG_ITEM_GvsdHBRate "HBRate"
#define CFG_ITEM_GvspLogRateSec "LogRateSec"
#define CFG_ITEM_GvspUseFiltDriver "UseFiltDrv"



//===================================================
// GVCP Header
//===================================================
#define GVCP_SUPPORTED_VERSION 1		//!< Version of GVCP implemented by this reference design


// Flags for GVCP
#define FLAG_ANSWER		0x01		//!< Indicates the originator want an acknowledge
#define FLAG_RETRY		0x02		//!< Indicates this is a retry (same message was sent, but no ACK received)




//===================================================
// PIXEL TYPES
//===================================================
// Indicate if pixel is monochrome or RGB
#define GVSP_PIX_MONO						0x01000000	//!< Indicates a monochrome pixel type
#define GVSP_PIX_RGB							0x02000000	//!< Indicates a RGB pixel type
#define GVSP_PIX_CUSTOM						0x80000000	//!< Indicates a vendor-specific pixel type
#define GVSP_PIX_COLOR_MASK				0xFF000000	//!< Mask to extract color type

// Indicate effective number of bits occupied by the pixel (including padding)
#define GVSP_PIX_OCCUPY8BIT				    0x00080000	//!< Indicates one pixel occupies 8 bits
#define GVSP_PIX_OCCUPY12BIT				0x000C0000	//!< Indicates one pixel occupies 12 bits
#define GVSP_PIX_OCCUPY16BIT				0x00100000	//!< Indicates one pixel occupies 16 bits
#define GVSP_PIX_OCCUPY24BIT				0x00180000	//!< Indicates one pixel occupies 24 bits
#define GVSP_PIX_OCCUPY32BIT				0x00200000	//!< Indicates one pixel occupies 32 bits
#define GVSP_PIX_EFFECTIVE_PIXEL_SIZE_MASK	0x00FF0000	//!< Mask to extract effective pixel size in bits
#define GVSP_PIX_EFFECTIVE_PIXEL_SIZE_SHIFT	16				//!< Shift to apply to effective pixel size

#define GVSP_PIX_MONO8						(GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0001)		//!< 8 Bit Monochrome Unsigned
#define GVSP_PIX_MONO8SIGNED				(GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0002)		//!< 8 Bit Monochrome Signed
#define GVSP_PIX_MONO10						(GVSP_PIX_MONO	| GVSP_PIX_OCCUPY16BIT | 0x0003)		//!< 10 Bit Monochrome
#define GVSP_PIX_MONO10MSBALIGNED		(GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0004)		//!< 10 Bit Monochrome Signed
#define GVSP_PIX_MONO10PACKED				(GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0005)		//!< 10 Bit Packed Monochrome Unsigned
#define GVSP_PIX_MONO12						(GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0006)		//!< 12 Bit Monochrome Unsigned
#define GVSP_PIX_MONO12MSBALIGNED		(GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0007)		//!< 12 Bit MSB Aligned Monochrome Unsigned
#define GVSP_PIX_MONO12PACKED				(GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0008)		//!< 12 Bit Packed Monochrome Unsigned
#define GVSP_PIX_MONO16						(GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0009)		//!< 16 Bit Monochrome Unsigned
#define GVSP_PIX_RGB8						(GVSP_PIX_RGB | GVSP_PIX_OCCUPY32BIT | 0x000A)		//!< 8 Bit RGB Unsigned
#define GVSP_PIX_RGB10PACKED_V1			(GVSP_PIX_RGB | GVSP_PIX_OCCUPY32BIT | 0x000B)		//!< 10 Bit RGB Packed Unsigned Version 1
#define GVSP_PIX_RGB10PACKED_V2			(GVSP_PIX_RGB | GVSP_PIX_OCCUPY32BIT | 0x000C)		//!< 10 Bit RGB Packet Unsigned Version 2
#define GVSP_PIX_ID_MASK					0x0000FFFF		//!< Mask to extract pixel ID

//===================================================
// Bootstrap registers
//===================================================
// <EC> to revise
#define BOOTSTRAP_SIZE					0x1000
#define VERSION_OFFSET					0x0000
#define HOST_MAC_HIGH_OFFSET			0x0004
#define HOST_MAC_LOW_OFFSET			0x0008
#define DEVICE_MAC_HIGH_OFFSET		0x000C
#define DEVICE_MAC_LOW_OFFSET			0x0010
#define IP_VERSION_OFFSET				0x0014
#define SUPPORTED_IP_CONFIG_OFFSET	0x0015
#define CURRENT_IP_CONFIG_OFFSET		0x0016
#define CHARACTER_SET_OFFSET			0x0017
#define CURRENT_IP_OFFSET				0x0018
#define CURRENT_SUBNET_OFFSET			0x0028
#define DEFAULT_GATEWAY					0x0038
#define MANUFACTURER_NAME_OFFSET		0x0048
#define MODEL_NAME_OFFSET				0x0068
#define DEVICE_VERSION_OFFSET			0x0088
#define MANUFACTURER_INFO_OFFSET		0x00A8
#define FIRST_URL_OFFSET				0x0200
#define SECOND_URL_OFFSET				0x0400
#define RESET_OFFSET						0x0800
#define PERSISTENT_IP_ADDR_OFFSET	0x0804		//!< persistent IP address
#define PERSISTENT_IP_MASK_OFFSET	0x0808		//!< persistent IP mask
#define CCP_OFFSET						0x0810
#define MCP_OFFSET						0x0820
#define MCMA_OFFSET						0x0824
#define SCP1_OFFSET						0x0830
#define SCPS1_OFFSET						0x0834
#define SCDA1_OFFSET						0x0838
#define SCP2_OFFSET						0x0840		//!< not supported in this implementation
#define SCPS2_OFFSET						0x0844		//!< not supported in this implementation
#define SCDA2_OFFSET						0x0848		//!< not supported in this implementation
#define HB_TIMEOUT_OFFSET                   0x0938 



//===================================================
// TCP/IP stuff
//===================================================

#define GVCP_NET_ABORT_COUNT 0xFF /* number of times to try to get answer ...*/
#define GVCP_NR_HEARTBEAT_TRY 0x01 /* number of times to try to get answer ...*/

#define GVP_END_THREAD_TIMEOUT 2000
#define GVP_HEARTBEAT_TIMEOUT 3000
#define GVP_MIN_HEARTBEAT_TIMEOUT 100

#define GVP_DEFAULT_MTU 1450
#define GVP_DEFAULT_LOGRATE 10


//#define GVSP_SO_RCVBUF 0x5FFFFFD
#define GVSP_SO_RCVBUF 0x01FFFFFF

#define LvNetPort_GVCP               0xF100
#define LvNetPort_GVSP               0xE100


//===================================================
// LV Definitions
//===================================================


#if 0 // mst 4.1.07, moved to lvgvpglobal.h
#define LVGVP_STATUS_INFO(a)      (a & ~(1<<15))
#define LVGVP_STATUS_ERROR(a)     (a | (1<<15))

#define LVGVP_STATUS_STD(a)       (a & ~(1<<14))  
#define LVGVP_STATUS_VEND(a)      (a | (1<<15))
#endif

typedef enum _tagLvGvpCmdField {
    LvGvp_DISCOVERY_CMD     = 0x02,
    LvGvp_DISCOVERY_ACK     = 0x03,
    LvGvp_FORCEIP_CMD       = 0x04,
    LvGvp_FORCEIP_ACK       = 0x05,
    LvGvp_PACKETRESEND_CMD  = 0x40,
    LvGvp_PACKETRESEND_ACK  = 0x41,
    LvGvp_READREG_CMD       = 0x80,
    LvGvp_READREG_ACK       = 0x81,
    LvGvp_WRITEREG_CMD      = 0x82,
    LvGvp_WRITEREG_ACK      = 0x83,
    LvGvp_READMEM_CMD       = 0x84,
    LvGvp_READMEM_ACK       = 0x85,
    LvGvp_WRITEMEM_CMD      = 0x86,
    LvGvp_WRITEMEM_ACK      = 0x87,
    LvGvp_EVENT_CMD         = 0xC0,
    LvGvp_EVENT_ACK         = 0xC1,
    LvGvp_EVENTDATA_CMD     = 0xC2,
    LvGvp_EVENTDATA_ACK     = 0xC3
} LvGvpCmdField;

#if 0 // mst 4.1.07, moved to lvgvpglobal.h

typedef enum _tagLvGvspFormatField {
    LvGvsp_DATA_LEADER      = 0x0,
    LvGvsp_DATA_TRAILER     = 0x1,
    LvGvsp_DATA_PAYLOAD     = 0x2,
} LvGvspFormatField;

#endif

// ------------------------------------------------------------
// Channel handle
// Identifies an active communication channel with a specific
// camera. The handle value is library implementation dependent
// and no assumption can be made outside the lib.

enum LvBufferStatus {
    LvGvsp_0_Error,
    LvGvsp_1_LeaderReceived,
    LvGvsp_2_AllPacketsReceived,
    LvGvsp_3_ReceiveSuccess,
    LvGvsp_SeqStart,
    LvGvsp_SeqStop
};

typedef struct _tagLvBufferInfo {
    U32BIT Status;
    U16BIT CurrBlockId;
    U32BIT CurrBufferIndex;
    U32BIT LastPktId;
    U32BIT LastFrameId;
    LvBusImageInfo ImgInfo;
} LvGvspBufferInfo;

typedef struct _tagLvGvpNetSocket {
    LVRAWPTR Socket;
    U32BIT DstIP;
    U16BIT DstPort;
    U32BIT SrcIP;
    U16BIT SrcPort;
} LvGvpNetSocket;

typedef struct _tagLvGvspStatistics {
   U32BIT TotNrImgReceived;    // Number of successfully received images
   U32BIT TotNrImgDropped;     // Number of dropped images
   U32BIT TotNrFrameIdMiss;
   U32BIT TotNrTrigOvflw;
   U32BIT TotNrTrigDelay;
   U32BIT TotNrBufOvflw;
   U32BIT CurrNrImgReceived;
   U32BIT CurrNrImgDropped;
   U32BIT CurrNrPktDropped;
   U32BIT CurrNrFrameIdMiss;
   U32BIT CurrNrTrigOvflw;
   U32BIT CurrNrTrigDelay;
   U32BIT CurrNrBufOvflw;
   U32BIT CurrAvFps;
   U32BIT StatStartTickCount;
   // .... tbd: add more information
} LvGvspStatistics;


typedef struct _tagLvGvpDrvMemLock {
    U32BIT IsLocked;
    LvGvpOverlapped Ovlp;
} LvGvpDrvMemLock;

typedef struct _tagLvGvspDrvIO {
    LvGvpHDrv hFilterDriver;
    LvGvpDrvMemLock DataBuf;
    LvGvpDrvMemLock LockTable;
    LvGvpDrvMemLock CurrFrameIdx;
} LvGvspDrvIO;

typedef struct _tagLvGvspChannel {
    LVGVPHANDLE hGvcpChannel;
    LvGvpNetSocket Socket;
    LvGvspDrvIO Drv;
    U32BIT GvspPktSize;
    U32BIT GvspInterPktDelay;
    U32BIT GvspChunkDelay;
    U32BIT GvspFrameDelay;
    U32BIT GvspLogRateSec;
    U8BIT* GvspRecvBuffer;
    LvGvpThread hStreamingThread;
    LvGvpCriticalSection hCriticalSection;
    LvGvpEvent ExitStreamingThread;
    LvBusAcquisition* acqConfig; 
    LvGvspBufferInfo BufferInfo;    
    LvGvspStatistics Statistic;
} LvGvspChannel;



typedef struct _tagLvGvcpChannel {
    LVGVPHANDLE             hChannel;
    LvGvpNetSocket          Socket;
    U16BIT                  privileges;	
    U16BIT                  req_id;
    LvGvpThread             hHeartbeatThread;
    BOOL                    ExitHeartbeatThread;
    S16BIT                  HeartbeatCheck;
    U32BIT                  HeartbeatTimeout;
    U32BIT                  LastRegAccess;
    LvGvpCriticalSection    hCriticalSection;
    LvGvspChannel*          GvspChannel;
} LvGvcpChannel;



struct _tagLvGvcpChannelList {
    LvGvcpChannel item;
    struct _tagLvGvcpChannelList* next;
};

typedef struct _tagLvGvcpChannelList LvGvcpChannelList;

#ifdef __cplusplus
}
#endif


#endif //_GEV_DEFINES_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -