📄 v2u_ioctl.h
字号:
/**************************************************************************** * * $Id: v2u_ioctl.h,v 1.63 2008/08/18 06:40:51 monich Exp $ * * Copyright (C) 2003-2008 Epiphan Systems, Inc. All rights reserved. * * Defines IOCTL interface to the VGA2USB driver. Included by the driver * and by the user level code. * ****************************************************************************/#ifndef _VGA2USB_IOCTL_H_#define _VGA2USB_IOCTL_H_ 1#include "v2u_defs.h"/* Structure packing */#ifdef _WIN32# include <pshpack1.h>#endif#ifndef V2U_PACKED# ifdef _WIN32# define V2U_PACKED# else# define V2U_PACKED __attribute__((packed))# endif#endif/* Platform specific magic */#ifdef _WIN32# define FILE_DEVICE_VGA2USB FILE_DEVICE_UNKNOWN# define IOCTL_VGA2USB(x,a) CTL_CODE(FILE_DEVICE_VGA2USB,x,METHOD_NEITHER,a)# define IOCTL_VGA2USB_R(x,type) IOCTL_VGA2USB(x,FILE_READ_ACCESS)# define IOCTL_VGA2USB_W(x,type) IOCTL_VGA2USB(x,FILE_WRITE_ACCESS)# define IOCTL_VGA2USB_WR(x,type) IOCTL_VGA2USB(x,FILE_ANY_ACCESS)#else /* Unix */# define IOCTL_VGA2USB(x) _IO('V',x)# define IOCTL_VGA2USB_R(x,type) _IOR('V',x,type)# define IOCTL_VGA2USB_W(x,type) _IOW('V',x,type)# define IOCTL_VGA2USB_WR(x,type) _IOWR('V',x,type)#endif /* Unix *//* IOCTL definitions *//* * IOCTL_VGA2USB_VIDEOMODE * * Detects video mode. If cable is disconnected, width and height are zero. * Note that the vertical refresh rate is measured in milliHertz. * That is, the number 59900 represents 59.9 Hz. * * Support: Linux, Windows, MacOS X */#define IOCTL_VGA2USB_VIDEOMODE IOCTL_VGA2USB_R(9,V2U_VideoMode)/* * IOCTL_VGA2USB_DEFAULTPARAMS * IOCTL_VGA2USB_GETPARAMS * IOCTL_VGA2USB_SETPARAMS * * IOCTL_VGA2USB_DEFAULTPARAMS fills V2U_GrabParameters structure with * default capture parameters automatically selected by the driver. flags * field is returned as zero. The defaults may change over time, especially * after parameters of the input VGA signal have changed. * * Support: MacOS X * Windows, Linux (IOCTL_VGA2USB_GET/SETPARAMS only) */typedef struct ioctl_setparams { V2U_UINT32 flags; /* Validity flags for fields below */ /* When any of the fields below is used, */ /* corresponding V2U_FLAG_VALID_* flag is set */ /* otherwise the field is ignored */ V2U_INT32 hshift; /* Shifts image left (<0) or right(>0). */ /* Valid range depends on the video mode. */ /* Invalid values are rounded to the nearest */ /* valid value */ V2U_UINT8 phase; /* Pixel sampling phase, [0,31] */ V2U_UINT8 gain_r; /* Gain for the red channel, [0,255] */ V2U_UINT8 gain_g; /* Gain for the green channel, [0,255] */ V2U_UINT8 gain_b; /* Gain for the blue channel, [0,255] */ V2U_UINT8 offset_r; /* Offset for the red channel, [0,63] */ V2U_UINT8 offset_g; /* Offset for the green channel, [0,63] */ V2U_UINT8 offset_b; /* Offset for the blue channel, [0,63] */ V2U_UINT8 reserved; /* added for alignment, don't use */ V2U_INT32 vshift; /* Shifts image up or down */ /* Valid range depends on the video mode. */ /* Invalid values are rounded to the nearest */ /* valid value */ V2U_INT32 pllshift; /* Adjusts the PLL value */ V2U_INT32 grab_flags; /* Sets grab_flags */ V2U_INT32 grab_flags_mask; /* Marks which bits from grab_flags are used */} V2U_GrabParameters;/* Indicates that hshift field is used */#define V2U_FLAG_VALID_HSHIFT 0x0001/* Indicates that phase field is used */#define V2U_FLAG_VALID_PHASE 0x0002/* Indicates that all gain_{rgb} and offset_{rgb} fields are used */#define V2U_FLAG_VALID_OFFSETGAIN 0x0004/* Indicates that vshift field is used */#define V2U_FLAG_VALID_VSHIFT 0x0008/* Indicates that pllshift field is used */#define V2U_FLAG_VALID_PLLSHIFT 0x0010/* Indicates that grab_flags and grab_flags_mask are used */#define V2U_FLAG_VALID_GRABFLAGS 0x0020/* Legacy names */#define GRAB_BMP_BOTTOM_UP V2U_GRAB_BMP_BOTTOM_UP#define GRAB_PREFER_WIDE_MODE V2U_GRAB_PREFER_WIDE_MODE/* Flags allowed in grab_flags and grab_flags_mask fields *//* Grab image upside-down */#define V2U_GRAB_BMP_BOTTOM_UP 0x10000/* Sometimes 4:3 and wide modes with the same height are indistinguishable, * so this flag can force choosing wide mode */#define V2U_GRAB_PREFER_WIDE_MODE 0x20000/* * The rangles below are obsolete. They depend on the frame grabber model * as well as the video mode. Use V2UKey_AdjustmentsRange property to get * the ranges that are valid for the parcular frame grabber and current * video mode. */#define V2U_MIN_PHASE 0#define V2U_MAX_PHASE 31#define V2U_MIN_GAIN 0#define V2U_MAX_GAIN 255#define V2U_MIN_OFFSET 0#define V2U_MAX_OFFSET 63#define IOCTL_VGA2USB_DEFAULTPARAMS IOCTL_VGA2USB_R(5,V2U_GrabParameters)#define IOCTL_VGA2USB_GETPARAMS IOCTL_VGA2USB_R(6,V2U_GrabParameters)#define IOCTL_VGA2USB_SETPARAMS IOCTL_VGA2USB_W(8,V2U_GrabParameters)/* * IOCTL_VGA2USB_GRABFRAME * * For pixel format check V2U_GRABFRAME_FORMAT_XXX constants in v2u_defs.h * * Support: Linux, Windows, MacOS X */typedef struct ioctl_grabframe { void * pixbuf; /* IN should be filled by user process */ V2U_INT32 pixbuflen; /* IN should be filled by user process */ V2U_INT32 width; /* OUT width in pixels */ V2U_INT32 height; /* OUT height in pixels */ V2U_INT32 bpp; /* IN pixel format */} V2U_GrabFrame;typedef struct ioctl_grabframe2 { void * pixbuf; /* IN should be filled by user process */ V2U_INT32 pixbuflen; /* IN should be filled by user process */ V2U_INT32 palette; /* IN pixel format */ V2URect crop; /* IN/OUT cropping area; all zeros = full frame */ V2U_VideoMode mode; /* OUT VGA mode */ V2U_INT32 imagelen; /* OUT size of the image stored in pixbuf */ V2U_INT32 retcode; /* OUT return/error code */} V2U_GrabFrame2;#define IOCTL_VGA2USB_GRABFRAME IOCTL_VGA2USB_WR(10,V2U_GrabFrame)#define IOCTL_VGA2USB_GRABFRAME2 IOCTL_VGA2USB_WR(20,V2U_GrabFrame2)/* * Error codes */#define V2UERROR_OK 0#define V2UERROR_FAULT 1#define V2UERROR_INVALARG 2#define V2UERROR_SMALLBUF 3#define V2UERROR_OUTOFMEMORY 4/* * IOCTL_VGA2USB_GETSN * * Support: Windows, Linux, MacOS X */#define V2U_SN_BUFSIZ 32typedef struct ioctl_getsn { char sn[V2U_SN_BUFSIZ]; /* OUT serial number string */} V2U_GetSN;#define IOCTL_VGA2USB_GETSN IOCTL_VGA2USB_R(7,V2U_GetSN)/* * IOCTL_VGA2USB_SENDPS2 (KVM2USB capable products only) * * Support: Windows, Linux, MacOS X */typedef struct ioctl_sendps2 { short addr; short len; unsigned char buf[64];} V2U_SendPS2;#define V2U_PS2ADDR_KEYBOARD 0x01#define V2U_PS2ADDR_MOUSE 0x02#define IOCTL_VGA2USB_SENDPS2 IOCTL_VGA2USB_W(16,V2U_SendPS2)/* * IOCTL_VGA2USB_GET_PROPERTY * IOCTL_VGA2USB_SET_PROPERTY * * Get or set the value of the specified property. * * Support: Windows, Linux, MacOS X * Required driver version: 3.6.22 or later. */typedef enum v2u_product_type { V2UProductOther, V2UProductVGA2USB, V2UProductKVM2USB, V2UProductDVI2USB, V2UProductVGA2USBPro, V2UProductVGA2USBLR, V2UProductDVI2USBSolo, V2UProductDVI2USBDuo, V2UProductKVM2USBPro, V2UProductKVM2USBLR} V2UProductType;typedef enum v2u_scale_mode { V2UScaleNone, /* No scaling */ V2UScaleModeNearestNeighbor, /* Nearest neighbor algorithm */ V2UScaleModeCount /* Number of valid modes */} V2UScaleMode;typedef struct v2u_adjustment_range { V2U_UINT32 flags; V2U_UINT32 valid_flags; V2U_INT16 hshift_min; V2U_INT16 hshift_max; V2U_INT16 phase_min; V2U_INT16 phase_max; V2U_INT16 offset_min; V2U_INT16 offset_max; V2U_INT16 gain_min; V2U_INT16 gain_max; V2U_INT16 vshift_min; V2U_INT16 vshift_max; V2U_INT16 pll_min; V2U_INT16 pll_max;} V2UAdjRange;/* WARNING: custom vga mode part of API is not stable yet and is subject to change */#define VIDEOMODE_TYPE_VALID 0x01#define VIDEOMODE_TYPE_ENABLED 0x02#define VIDEOMODE_TYPE_DIGITAL 0x10#define VIDEOMODE_TYPE_INTERLACED 0x20#define VIDEOMODE_TYPE_HSYNCPOSITIVE 0x40#define VIDEOMODE_TYPE_VSYNCPOSITIVE 0x80/* Maximum number of custom videomodes */#define V2U_CUSTOM_VIDEOMODE_COUNT 8typedef struct vesa_videomode { V2U_UINT32 VerFrequency; /* mHz */ V2U_UINT16 HorAddrTime; /* pixels */ V2U_UINT16 HorFrontPorch; /* pixels */ V2U_UINT16 HorSyncTime; /* pixels */ V2U_UINT16 HorBackPorch; /* pixels */ V2U_UINT16 VerAddrTime; /* lines */ V2U_UINT16 VerFrontPorch; /* lines */ V2U_UINT16 VerSyncTime; /* lines */ V2U_UINT16 VerBackPorch; /* lines */ V2U_UINT32 Type;} V2UVideoModeDescr;/* * The first 8 (V2U_CUSTOM_VIDEOMODE_COUNT) entries in the video mode table * are reserved for custom video modes. The remaining entries are standard * video modes. */typedef struct custom_videomode { V2U_INT32 idx; V2UVideoModeDescr vesa_mode;} V2UVGAMode;typedef struct v2u_version { V2U_INT32 major; V2U_INT32 minor; V2U_INT32 micro; V2U_INT32 nano;} V2UVersion;#define V2U_DSHOW_LIMIT_FPS 0x200 /* V2UKey_DirectShowFlags */typedef enum v2u_property_key { V2UKey_UsbProductID, /* GET only [uint16] */ V2UKey_ProductType, /* GET only [product_type] */ V2UKey_DirectShowFixRes, /* GET/SET [size], Windows only */ V2UKey_DirectShowFlags, /* GET/SET [uint32], Windows only */ V2UKey_DirectShowDefaultBmp, /* GET/SET [wstr], Windows only */ V2UKey_ModeMeasurmentsDump, /* GET only [blob] */ V2UKey_ResetADC, /* SET only [uint32] */ V2UKey_DirectShowScaleMode, /* GET/SET [scale], Windows only */ V2UKey_HardwareCompression, /* GET only [boolean] */ V2UKey_AdjustmentsRange, /* GET only [adj_range] */ V2UKey_Version, /* GET only [version] */ V2UKey_EDID, /* GET/SET [edid] */ V2UKey_DirectShowMaxFps, /* GET/SET [uint32], Windows only */ V2UKey_KVMCapable, /* GET only [boolean] */ V2UKey_VGAMode, /* GET/SET [vgamode] */ V2UKey_CurrentVGAModeIndex /* GET only [int32] (-1) if none */} V2UPropertyKey; typedef union v2u_property_value { V2U_INT8 int8; V2U_UINT8 uint8; V2U_INT16 int16; V2U_UINT16 uint16; V2U_INT32 int32; V2U_UINT32 uint32; V2U_BOOL boolean; V2UProductType product_type; V2USize size; V2URect rect; V2UStrUcs2 wstr; V2UScaleMode scale; V2UAdjRange adj_range; V2UVersion version; V2UVGAMode vgamode; V2U_UINT8 edid[128]; V2U_UINT8 blob[256];} V2UPropertyValue;typedef struct v2u_ioctl_property { V2UPropertyKey key; /* IN property key */ V2UPropertyValue value; /* IN/OUT property value */} V2U_Property;#define IOCTL_VGA2USB_GET_PROPERTY IOCTL_VGA2USB_WR(18,V2U_Property)#define IOCTL_VGA2USB_SET_PROPERTY IOCTL_VGA2USB_W(19,V2U_Property)/** * Restore previous packing */#ifdef _WIN32# include <poppack.h>#endif#endif /* _VGA2USB_IOCTL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -