📄 usbcam.h
字号:
#define ACCEPT_IO( p ) \
( VALID_CONTEXT( p ) && \
p->Flags.Open && \
!p->Flags.UnloadPending )
//
// USB_DRIVER_SETTINGS
//
#define DRIVER_SETTINGS \
sizeof(USB_DRIVER_SETTINGS), \
USB_NO_INFO, \
USB_NO_INFO, \
USB_NO_INFO, \
USB_NO_INFO, \
USB_NO_INFO, \
USB_NO_INFO, \
USB_CAM_INTERFACE_CLASS, \
USB_NO_INFO, \
USB_NO_INFO
// show Camera
// dwLenIn = 1 : Normal overlay
// dwLenIn = 4 : Alphablending
// dwLenIn = 5 : Colorkey overlay
#define IOCTL_CAM_SHOW CTL_CODE( FILE_DEVICE_VIDEO, 1, METHOD_NEITHER,FILE_ANY_ACCESS)
// hide Camera
#define IOCTL_CAM_HIDE CTL_CODE( FILE_DEVICE_VIDEO, 2, METHOD_NEITHER,FILE_ANY_ACCESS)
// Set Diplay position
// dwLenIn = MAKELONG(left, top)
// dwLenOut = MAKELONG(width, height)
#define IOCTL_CAM_SETPOS CTL_CODE( FILE_DEVICE_VIDEO, 3, METHOD_NEITHER,FILE_ANY_ACCESS)
// play
#define IOCTL_CAM_CONT CTL_CODE( FILE_DEVICE_VIDEO, 4, METHOD_NEITHER,FILE_ANY_ACCESS)
// stop
#define IOCTL_CAM_STOP CTL_CODE( FILE_DEVICE_VIDEO, 5, METHOD_NEITHER,FILE_ANY_ACCESS)
// copy camera image to pBufOut (RGB565 format)
// dwLenIn = 0 : top-down image
// dwLenIn = 1 : bottom-up image
#define IOCTL_CAM_COPY CTL_CODE( FILE_DEVICE_VIDEO, 6, METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
// set colorkey
// dwLenIn = RGB(R-value, G-value, B-value)
#define IOCTL_CAM_SETCOLKEY CTL_CODE( FILE_DEVICE_VIDEO, 7, METHOD_NEITHER,FILE_ANY_ACCESS)
// set alpha value
// dwLenIn = alpha value[0-8]
#define IOCTL_CAM_SETALPHA CTL_CODE( FILE_DEVICE_VIDEO, 8, METHOD_NEITHER,FILE_ANY_ACCESS)
// get camera information
// pBufOut = LPCAMINFO;
#define IOCTL_CAM_GETINFO CTL_CODE( FILE_DEVICE_VIDEO, 9, METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
// set scale for image_scaler
// dwLenIn = scalemode (0:FINE, 3:COARSE)
// pBufIn = (float*)&scale;
#define IOCTL_CAM_SETSCALE CTL_CODE( FILE_DEVICE_VIDEO, 10, METHOD_IN_DIRECT,FILE_ANY_ACCESS)
// set hue value
// dwLenIn = MAKELONG(hue_value[0-90], coord.[0-4]) ; if coord==0 then all coord. set
#define IOCTL_CAM_SETHUE CTL_CODE( FILE_DEVICE_VIDEO, 11, METHOD_NEITHER,FILE_ANY_ACCESS)
// set gamma
// gamma_off : dwLenIn = 0
// gamma_on : pBufIn = gamma_table; dwLenIn = sizeof(gamma_table=2048);
#define IOCTL_CAM_SETGAMMA CTL_CODE( FILE_DEVICE_VIDEO, 12, METHOD_IN_DIRECT,FILE_ANY_ACCESS)
// set White balance coordinate
// pBufIn = WBtable;
#define IOCTL_CAM_SETWBCOORD CTL_CODE( FILE_DEVICE_VIDEO, 13, METHOD_IN_DIRECT,FILE_ANY_ACCESS)
// set Auto Exposure accumulation limit
// dwLenIn = MAKELONG(LowerLimit[0-255], UpperLimit[0-255]);
#define IOCTL_CAM_SETAELIMIT CTL_CODE( FILE_DEVICE_VIDEO, 14, METHOD_NEITHER,FILE_ANY_ACCESS)
// set ADC offset value
// dwLenIn = RGB((BYTE)R-offset[-127 - 128], (BYTE)G-offset[-127 - 128], (BYTE)B-offset[-127 - 128]);
#define IOCTL_CAM_SETADCOFS CTL_CODE( FILE_DEVICE_VIDEO, 15, METHOD_NEITHER,FILE_ANY_ACCESS)
// set ADC offset value
// Decimal_X_gain[5.4] = (unsigned char)(fGain[0.0-8.0]*0x20);
// dwLenIn = RGB(Decimal_R_gain, Decimal_G_gain, Decimal_B_gain);
#define IOCTL_CAM_SETWBGAIN CTL_CODE( FILE_DEVICE_VIDEO, 16, METHOD_NEITHER,FILE_ANY_ACCESS)
// set CbGain & CrGain
// Decimal_Cx_gain[7.6] = (unsigned char)(fGain[0.0-2.0]*0x80);
// dwLenIn = MAKELONG(Decimal_Cr_gain, Decimal_Cb_gain);
#define IOCTL_CAM_SETCBCRGAIN CTL_CODE( FILE_DEVICE_VIDEO, 17, METHOD_NEITHER,FILE_ANY_ACCESS)
// set Luminance Enhancement Gain
// Decimal_H_gain[4.3] = (unsigned char)(fHGain[0.0-8.0]*0x10);
// Decimal_V_gain[4.3] = (unsigned char)(fVGain[0.0-8.0]*0x10);
// Decimal_Main_gain[6.5] = (unsigned char)(fMainGain[0.0-4.0]*0x40);
// dwLenIn = MAKELONG(Decimal_H_gain, Decimal_V_gain);
// dwLenOut = Decimal_Main_Gain;
#define IOCTL_CAM_SETLEGAIN CTL_CODE( FILE_DEVICE_VIDEO, 18, METHOD_NEITHER,FILE_ANY_ACCESS)
// set brightness
// dwLenIn = (BYTE)brightness[-127 - 128];
#define IOCTL_CAM_SETBRIGHTNESS CTL_CODE( FILE_DEVICE_VIDEO, 19, METHOD_NEITHER,FILE_ANY_ACCESS)
// set Clip point & color supress
// dwLenIn = CSlantEn[0-1] << 31 | CSlant_val[0-1,[7.6]decimal] << 16 | Clip2[0-255] << 8 | Clip1[0-255];
#define IOCTL_CAM_SETCLIP CTL_CODE( FILE_DEVICE_VIDEO, 20, METHOD_NEITHER,FILE_ANY_ACCESS)
// set Slice limit
// dwLenIn = slice_limit[0-255];
#define IOCTL_CAM_SETSLICELMT CTL_CODE( FILE_DEVICE_VIDEO, 21, METHOD_NEITHER,FILE_ANY_ACCESS)
// set White balance accumulation Limit
// dwLenIn = MAKELONG(LowerLimit[0-255], UpperLimit[0-255]);
#define IOCTL_CAM_WBACCLMT CTL_CODE( FILE_DEVICE_VIDEO, 22, METHOD_NEITHER,FILE_ANY_ACCESS)
// set Color supress Luma Edge limit
// dwLenIn = MAKELONG(LowerLimit[0-255], UpperLimit[0-255]);
#define IOCTL_CAM_CSEDGELMT CTL_CODE( FILE_DEVICE_VIDEO, 23, METHOD_NEITHER,FILE_ANY_ACCESS)
// Camera V-Sync Interrupt Handler Enable
#define IOCTL_CAM_ENVINT CTL_CODE( FILE_DEVICE_VIDEO, 24, METHOD_NEITHER,FILE_ANY_ACCESS)
// Camera V-Sync Interrupt Handler Disable
#define IOCTL_CAM_DISVINT CTL_CODE( FILE_DEVICE_VIDEO, 25, METHOD_NEITHER,FILE_ANY_ACCESS)
// set Camera
// pBufIn = (LPTSTR)szCameraName;
#define IOCTL_CAM_SETCAMERA CTL_CODE( FILE_DEVICE_VIDEO, 26, METHOD_IN_DIRECT,FILE_ANY_ACCESS)
#define CAM_IOCTL_GETJPEG 0x500
#define CAM_IOCTL_PRV_SETSIZE 0x501
#define CAM_IOCTL_PREVIEW_ON 0x502
#define CAM_IOCTL_PREVIEW_OFF 0x503
#define CAM_IOCTL_PRV_POSITION 0x504
#define CAM_IOCTL_ZOOM_ON 0x505
#define CAM_IOCTL_ZOOM_OFF 0x506
#define CAM_IOCTL_Y_FLIP 0x507
#define CAM_IOCTL_X_FLIP 0x508
#define CAM_IOCTL_MOVIE_START 0x509
#define CAM_IOCTL_MOVIE_STOP 0x50A
#define CAM_IOCTL_GET_LATEST_FRAME 0x50B
#define CAM_IOCTL_POWER_RESUME 0x50C
#define CAM_IOCTL_SET_RESOLUTION 0x50D
#define CAM_IOCTL_GET_RESOLUTION 0x50E
#define CAM_IOCTL_SET_BRIGHTNESS 0x50F
#define CAM_IOCTL_SET_SENSOR 0x510
#define CAM_IOCTL_GET_SENSOR 0x511
#define CAM_IOCTL_SET_ASIC 0x512
#define CAM_IOCTL_GET_ASIC 0x513
#define CAM_IOCTL_LM_PREVIEW 0x514
#define CAM_IOCTL_GET_QFACTOR 0x515
#define CAM_IOCTL_SET_WHITEBAL 0x516
#define CAM_IOCTL_SAMSUNG_CAM 0x520
#define CAM_IOCTL_IMAGE_SIZE 0x521
#define CAM_IOCTL_SAMSUNG_CAM_PR 0x522
#define CAM_IOCTL_SAMSUNG_PREVIEW_START 0x523
#define CAM_IOCTL_SAMSUNG_PREVIEW_STOP 0x524
#define VIRTUAL_OFFSET 0x7C000000
#define VIRTUAL_ADDR_OFFSET VIRTUAL_OFFSET // for MPEG4
#define DMA_BUFFER_BASE 0xAC000000
#define DMA_PHYSICAL_BASE 0x30000000 // S3C2440X01
#define FRAMEBUF_BASE (DMA_BUFFER_BASE + 0x00100000)
#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00100000)
#define MSG_EN_1 1
//Image Size
#define XGA_XSIZE (1024)
#define XGA_YSIZE (768)
#define SVGA_XSIZE (800)
#define SVGA_YSIZE (600)
#define VGA_XSIZE (640)
#define VGA_YSIZE (480)
#define PQVGA_XSIZE (240)
#define PQVGA_YSIZE (320)
#define CIF_XSIZE (352)
#define CIF_YSIZE (288)
#define QCIF_XSIZE (176)
#define QCIF_YSIZE (144)
#define XGA (1)
#define SVGA (2)
#define VGA (3)
#define CIF (4)
#define PQVGA (5)
#define QCIF (6)
//
// DEBUG
//
#if DEBUG
#define ZONE_ERR DEBUGZONE(0)
#define ZONE_WARN DEBUGZONE(1)
#define ZONE_INIT DEBUGZONE(2)
#define ZONE_TRACE DEBUGZONE(3)
#define ZONE_LPT_INIT DEBUGZONE(4)
#define ZONE_LPT_READ DEBUGZONE(5)
#define ZONE_LPT_WRITE DEBUGZONE(6)
#define ZONE_LPT_IOCTL DEBUGZONE(7)
#define ZONE_USB_PARSE DEBUGZONE(8)
#define ZONE_USB_INIT DEBUGZONE(9)
#define ZONE_USB_CONTROL DEBUGZONE(10)
#define ZONE_USB_BULK DEBUGZONE(11)
#define ZONE_USBCLIENT DEBUGZONE(15)
//
// these should be removed in the code if you can 'g' past these successfully
//
#define TEST_TRAP() { \
NKDbgPrintfW( TEXT("%s: Code Coverage Trap in: %s, Line: %d\n"), DRIVER_NAME, TEXT(__FILE__), __LINE__); \
DebugBreak(); \
}
#define DUMP_USB_DEVICE_DESCRIPTOR( d ) { \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_DEVICE_DESCRIPTOR:\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("----------------------\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), d.bLength )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), d.bDescriptorType )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdUSB: 0x%x\n"), d.bcdUSB )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceClass: 0x%x\n"), d.bDeviceClass )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceSubClass: 0x%x\n"), d.bDeviceSubClass )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceProtocol: 0x%x\n"), d.bDeviceProtocol )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bMaxPacketSize0: 0x%x\n"), d.bMaxPacketSize0 )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("idVendor: 0x%x\n"), d.idVendor )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("idProduct: 0x%x\n"), d.idProduct )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdDevice: 0x%x\n"), d.bcdDevice )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("iManufacturer: 0x%x\n"), d.iManufacturer )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("iProduct: 0x%x\n"), d.iProduct )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("iSerialNumber: 0x%x\n"), d.iSerialNumber )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumConfigurations: 0x%x\n"), d.bNumConfigurations )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}
#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c ) { \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_CONFIGURATION_DESCRIPTOR:\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), c.bLength )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), c.bDescriptorType )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("wTotalLength: 0x%x\n"), c.wTotalLength )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumInterfaces: 0x%x\n"), c.bNumInterfaces )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bConfigurationValue: 0x%x\n"), c.bConfigurationValue )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("iConfiguration: 0x%x\n"), c.iConfiguration )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), c.bmAttributes )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("MaxPower: 0x%x\n"), c.MaxPower )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}
#define DUMP_USB_INTERFACE_DESCRIPTOR( i, _index ) { \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_INTERFACE_DESCRIPTOR[%d]:\n"), _index )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("-------------------------\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), i.bLength )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), i.bDescriptorType )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceNumber: 0x%x\n"), i.bInterfaceNumber )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bAlternateSetting: 0x%x\n"), i.bAlternateSetting )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumEndpoints: 0x%x\n"), i.bNumEndpoints )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceClass: 0x%x\n"), i.bInterfaceClass )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceSubClass: 0x%x\n"), i.bInterfaceSubClass )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceProtocol: 0x%x\n"), i.bInterfaceProtocol )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("iInterface: 0x%x\n"), i.iInterface )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}
#define DUMP_USB_ENDPOINT_DESCRIPTOR( e ) { \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_ENDPOINT_DESCRIPTOR:\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), e.bLength )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), e.bDescriptorType )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bEndpointAddress: 0x%x\n"), e.bEndpointAddress )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), e.bmAttributes )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("wMaxPacketSize: 0x%x\n"), e.wMaxPacketSize )); \
DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterval: 0x%x\n"), e.bInterval ));\
DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}
#else
#define TEST_TRAP()
#define DUMP_USB_DEVICE_DESCRIPTOR( p )
#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c )
#define DUMP_USB_INTERFACE_DESCRIPTOR( i, _index )
#define DUMP_USB_ENDPOINT_DESCRIPTOR( e )
#endif // DEBUG
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -