📄 lvgvpdef.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 + -