📄 vc032x.h
字号:
P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[VGA].pipe = 3072; spca50x->mode_cam[VGA].method = 0; spca50x->mode_cam[VGA].mode = 0; spca50x->mode_cam[PAL].width = 384; spca50x->mode_cam[PAL].height = 288; spca50x->mode_cam[PAL].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[PAL].pipe = 3072; spca50x->mode_cam[PAL].method = 1; spca50x->mode_cam[PAL].mode = 0; spca50x->mode_cam[SIF].width = 352; spca50x->mode_cam[SIF].height = 288; spca50x->mode_cam[SIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[SIF].pipe = 3072; spca50x->mode_cam[SIF].method = 1; spca50x->mode_cam[SIF].mode = 0; spca50x->mode_cam[CIF].width = 320; spca50x->mode_cam[CIF].height = 240; spca50x->mode_cam[CIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[CIF].pipe = 3072; spca50x->mode_cam[CIF].method = 0; spca50x->mode_cam[CIF].mode = 1; spca50x->mode_cam[QPAL].width = 192; spca50x->mode_cam[QPAL].height = 144; spca50x->mode_cam[QPAL].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QPAL].pipe = 3072; spca50x->mode_cam[QPAL].method = 1; spca50x->mode_cam[QPAL].mode = 1; spca50x->mode_cam[QSIF].width = 176; spca50x->mode_cam[QSIF].height = 144; spca50x->mode_cam[QSIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QSIF].pipe = 3072; spca50x->mode_cam[QSIF].method = 1; spca50x->mode_cam[QSIF].mode = 1; }static int vc0321_reset(struct usb_spca50x *spca50x){ spca5xxRegWrite(spca50x->dev, 0xa0, 0x00, 0xb04d, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb301, NULL, 0); msleep(100); spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb003, NULL, 0); msleep(100);return 0;}static int vc0321_config(struct usb_spca50x *spca50x){ __u8 tmp2[3]; int sensor = 0; spca50x->qindex = 1; vc0321_reset(spca50x); sensor = vc032x_probe_sensor(spca50x); switch (sensor) { case -1: PDEBUG(0,"Unknown sensor..."); return -EINVAL; break; case SENSOR_OV7660: PDEBUG(0, "Find Sensor OV7660"); spca50x->sensor = SENSOR_OV7660; set_vc0321VGA(spca50x); break; case SENSOR_PO3130NC: PDEBUG(0, "Find Sensor PO3130NC"); spca50x->sensor = SENSOR_PO3130NC; set_vc0321VGA(spca50x); break; case SENSOR_HV7131R: PDEBUG(0, "Find Sensor HV7131R"); spca50x->sensor = SENSOR_HV7131R; set_vc0321VGA(spca50x); break; };spca5xxRegRead (spca50x->dev, 0x8a, 0x01, 0 , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x87, 0x00, 0x0f0f, NULL, 0); udelay(10);spca5xxRegRead (spca50x->dev, 0x8b, 0x01, 0 , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x88, 0x00, 0x0202, NULL, 0); udelay(10); return 0;}static void vc0321_setquality(struct usb_spca50x *spca50x){ __u8 quality = 0; quality = (spca50x->qindex) & 0xff;// spca5xxRegWrite(spca50x->dev, 0xa0, quality, 0x0008, NULL, 0);}static void vc0321_setAutobright(struct usb_spca50x *spca50x){ __u8 autoval = 0; if (spca50x->autoexpo) autoval = 0x42; else autoval = 0x02;// spca5xxRegWrite(spca50x->dev, 0xa0, autoval, 0x0180, NULL, 0);}static void vc0321_start(struct usb_spca50x *spca50x){ // __u8 tmp2; int err = 0; __u8 *GammaT = NULL; __u8 *MatrixT = NULL; /* Assume start use the good resolution from spca50x->mode */ spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfec, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfed, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfee, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfef, NULL, 0); switch (spca50x->sensor) { case SENSOR_OV7660: GammaT = ov7660_gamma; MatrixT = ov7660_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, ov7660_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, ov7660_initVGA_data); } break; case SENSOR_PO3130NC: GammaT = po3130_gamma; MatrixT = po3130_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, po3130_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, po3130_initVGA_data); } err = vc0321WriteVector(spca50x, po3130_rundata); break; case SENSOR_HV7131R: GammaT = hv7131r_gamma; MatrixT = hv7131r_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, hv7131r_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, hv7131r_initVGA_data); } break; default: PDEBUG(0, "Damned !! no sensor found Bye"); return; break; } if (GammaT && MatrixT){ put_tab_to_reg(spca50x, GammaT, 17, 0xb84a); put_tab_to_reg(spca50x, GammaT, 17, 0xb85b); put_tab_to_reg(spca50x, GammaT, 17, 0xb86c); put_tab_to_reg(spca50x, MatrixT, 9, 0xb82c); // Seem SHARPNESS /* spca5xxRegWrite(spca50x->dev, 0xa0, 0x80, 0xb80a, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80b, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80e, NULL, 0); */ /* all 0x40 ??? do nothing spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb822, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb823, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb824, NULL, 0); */ /* Only works for HV7131R ?? spca5xxRegRead (spca50x->dev, 0xa1, 0x01, 0xb881, &tmp2, 1); udelay(10); spca5xxRegWrite(spca50x->dev, 0xa0, 0xfe01, 0xb881, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x79, 0xb801, NULL, 0); */ /* only hv7131r et ov7660 spca5xxRegWrite(spca50x->dev, 0xa0, 0x20, 0xb827, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb826, NULL, 0); //ISP_GAIN 80 spca5xxRegWrite(spca50x->dev, 0xa0, 0x23, 0xb800, NULL, 0); // ISP CTRL_BAS */ // set the led on 0x0892 0x0896 spca5xxRegWrite(spca50x->dev, 0x89, 0xffff, 0xfdff, NULL, 0); msleep(100); vc0321_setbrightness(spca50x); vc0321_setquality(spca50x); vc0321_setAutobright(spca50x); }}static void vc0321_stopN(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x09, 0xb003, NULL, 0);}static void vc0321_stop0(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);}static void vc0321_shutdown(struct usb_spca50x *spca50x){/* struct usb_device *dev = spca50x->dev; __u8 buffread; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x09, 0xb303, NULL, 0); spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);*/}static __u16 vc0321_getcolors(struct usb_spca50x *spca50x){//Nothingreturn spca50x->colour;}static void vc0321_setcolors(struct usb_spca50x *spca50x){//Nothing spca50x->colour = 0;}static void vc0321_set50HZ(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_50HZ); break; default: break; } } static void vc0321_set60HZ(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_60HZ); break; default: break; } }static void vc0321_setNoFliker(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_NoFliker); break; default: break; } } static int vc0321_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ if (cdata[0] == 0xFF && cdata[1] == 0xD8) { *iPix = 46 ; PDEBUG(5, "vc0321 header packet found datalength %d !!", *datalength ); *datalength -= *iPix; return 0; } *iPix = 0; PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength); return (seqnum +1);}#endif // VC032XUSB_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -