📄 pac7311.h
字号:
pac7311_reg_write(spca50x->dev, 0x15, 0x00); pac7311_reg_write(spca50x->dev, 0x16, 0x00); pac7311_reg_write(spca50x->dev, 0x17, 0x00); pac7311_reg_write(spca50x->dev, 0x18, 0x00); pac7311_reg_write(spca50x->dev, 0x19, 0x00); pac7311_reg_write(spca50x->dev, 0x1a, 0x00); pac7311_reg_write(spca50x->dev, 0x1b, 0x03); pac7311_reg_write(spca50x->dev, 0x1c, 0xa0); pac7311_reg_write(spca50x->dev, 0x1d, 0x01); pac7311_reg_write(spca50x->dev, 0x1e, 0xf4); pac7311_reg_write(spca50x->dev, 0x21, 0x00); pac7311_reg_write(spca50x->dev, 0x22, 0x08); pac7311_reg_write(spca50x->dev, 0x24, 0x03); pac7311_reg_write(spca50x->dev, 0x26, 0x00); pac7311_reg_write(spca50x->dev, 0x27, 0x01); pac7311_reg_write(spca50x->dev, 0x28, 0xca); pac7311_reg_write(spca50x->dev, 0x29, 0x10); pac7311_reg_write(spca50x->dev, 0x2a, 0x06); pac7311_reg_write(spca50x->dev, 0x2b, 0x78); pac7311_reg_write(spca50x->dev, 0x2c, 0x00); pac7311_reg_write(spca50x->dev, 0x2d, 0x00); pac7311_reg_write(spca50x->dev, 0x2e, 0x00); pac7311_reg_write(spca50x->dev, 0x2f, 0x00); pac7311_reg_write(spca50x->dev, 0x30, 0x23); pac7311_reg_write(spca50x->dev, 0x31, 0x28); pac7311_reg_write(spca50x->dev, 0x32, 0x04); pac7311_reg_write(spca50x->dev, 0x33, 0x11); pac7311_reg_write(spca50x->dev, 0x34, 0x00); pac7311_reg_write(spca50x->dev, 0x35, 0x00); pac7311_reg_write(spca50x->dev, 0x11, 0x01); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x80, 0x10); pac7311_reg_write(spca50x->dev, 0x11, 0x01); //load registers to sensor (Bit 0, auto clear) pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x0f, 0x10); pac7311_reg_write(spca50x->dev, 0x11, 0x01); //load registers to sensor (Bit 0, auto clear) pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x10, 0x10); pac7311_reg_write(spca50x->dev, 0x11, 0x01); //load registers to sensor (Bit 0, auto clear) //set correct resolution switch (mode) { case QCIF: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x09); pac7311_reg_write(spca50x->dev, 0x17, 0x20); pac7311_reg_write(spca50x->dev, 0x1b, 0x00); //pac7311_reg_write(spca50x->dev, 0x80, 0x69); pac7311_reg_write(spca50x->dev, 0x87, 0x10); break; case QSIF: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x09); pac7311_reg_write(spca50x->dev, 0x17, 0x30); //pac7311_reg_write(spca50x->dev, 0x80, 0x69); pac7311_reg_write(spca50x->dev, 0x87, 0x10); break; case QPAL: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x09); pac7311_reg_write(spca50x->dev, 0x17, 0x30); //pac7311_reg_write(spca50x->dev, 0x80, 0x69); pac7311_reg_write(spca50x->dev, 0x87, 0x10); break; case CIF: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x09); pac7311_reg_write(spca50x->dev, 0x17, 0x30); //pac7311_reg_write(spca50x->dev, 0x80, 0x3f); pac7311_reg_write(spca50x->dev, 0x87, 0x11); break; case SIF: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x08); pac7311_reg_write(spca50x->dev, 0x17, 0x00); //pac7311_reg_write(spca50x->dev, 0x80, 0x3f); pac7311_reg_write(spca50x->dev, 0x87, 0x11); break; case PAL: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x08); pac7311_reg_write(spca50x->dev, 0x17, 0x00); //pac7311_reg_write(spca50x->dev, 0x80, 0x3f); pac7311_reg_write(spca50x->dev, 0x87, 0x11); break; case VGA: pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x02, 0x03); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x08, 0x08); pac7311_reg_write(spca50x->dev, 0x17, 0x00); //pac7311_reg_write(spca50x->dev, 0x80, 0x1c); pac7311_reg_write(spca50x->dev, 0x87, 0x12); break; } //start stream pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x78, 0x04); pac7311_reg_write(spca50x->dev, 0x78, 0x05); return;}static void pac7311_stopN(struct usb_spca50x *spca50x){ pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x27, 0x80); pac7311_reg_write(spca50x->dev, 0x28, 0xca); pac7311_reg_write(spca50x->dev, 0x29, 0x53); pac7311_reg_write(spca50x->dev, 0x2a, 0x0e); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x3e, 0x20); pac7311_reg_write(spca50x->dev, 0x78, 0x04); //Bit_0=start stream, Bit_7=LED pac7311_reg_write(spca50x->dev, 0x78, 0x44); //Bit_0=start stream, Bit_7=LED pac7311_reg_write(spca50x->dev, 0x78, 0x44); //Bit_0=start stream, Bit_7=LED return;}static void pac7311_shutdown(struct usb_spca50x *spca50x){ pac7311_reg_write(spca50x->dev, 0xff, 0x04); pac7311_reg_write(spca50x->dev, 0x27, 0x80); pac7311_reg_write(spca50x->dev, 0x28, 0xca); pac7311_reg_write(spca50x->dev, 0x29, 0x53); pac7311_reg_write(spca50x->dev, 0x2a, 0x0e); pac7311_reg_write(spca50x->dev, 0xff, 0x01); pac7311_reg_write(spca50x->dev, 0x3e, 0x20); pac7311_reg_write(spca50x->dev, 0x78, 0x04); //Bit_0=start stream, Bit_7=LED pac7311_reg_write(spca50x->dev, 0x78, 0x44); //Bit_0=start stream, Bit_7=LED pac7311_reg_write(spca50x->dev, 0x78, 0x44); //Bit_0=start stream, Bit_7=LED return;}#ifdef GSPCA_ENABLE_REGISTERPLAYstatic void pac7311_RegRead(struct usb_spca50x *spca50x){ __u8 buffer; RegAddress = RegAddress & 0xff; pac7311_reg_read(spca50x->dev, RegAddress, &buffer); RegValue = buffer; PDEBUG(0, "pac7311_ReadReg, Reg 0x%02X value = %x", RegAddress, RegValue); return;}static void pac7311_RegWrite(struct usb_spca50x *spca50x){ __u8 buffer; RegAddress = RegAddress & 0xff; buffer = RegValue & 0xff; pac7311_reg_write(spca50x->dev, RegAddress, buffer); PDEBUG(0, "pac7311_WriteReg,Reg 0x%02X value = %x", RegAddress, buffer); return;}#endif /* GSPCA_ENABLE_REGISTERPLAY */ #define BLIMIT(bright) (__u8)((bright>0x1a)?0x1a:((bright < 4)? 4:bright))static void pac7311_setAutobright(struct usb_spca50x *spca50x){ unsigned long flags; __u8 luma = 0; __u8 luma_mean = 128; __u8 luma_delta = 20; __u8 spring = 5; __u8 Pxclk; int Gbright = 0; pac7311_reg_read(spca50x->dev, 0x02, &Pxclk); Gbright = Pxclk; spin_lock_irqsave(&spca50x->v4l_lock, flags); luma = spca50x->avg_lum; spin_unlock_irqrestore(&spca50x->v4l_lock, flags); PDEBUG(2, "Pac7311 lumamean %d", luma); if ((luma < (luma_mean - luma_delta)) || (luma > (luma_mean + luma_delta))) { Gbright += ((luma_mean - luma) >> spring); Gbright = BLIMIT(Gbright); PDEBUG(2, "Pac7311 Gbright %d", Gbright); pac7311_reg_write(spca50x->dev, 0x0f,(__u8) Gbright); pac7311_reg_write(spca50x->dev, 0x11, 0x01); //load registers to sensor (Bit 0, auto clear) } //PDEBUG(0, "Called pac7311_setAutobright: Not implemented yet");}#undef BLIMITstatic int pac7311_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ int sof = 0; int p = 0; if (*datalength < 6) //if (*datalength < 5) return -1; else { for (p = 0; p < *datalength - 6; p++) { //for (p = 0; p < *datalength - 5; p++) { if ((cdata[0 + p] == 0xFF) && (cdata[1 + p] == 0xFF) && (cdata[2 + p] == 0x00) && (cdata[3 + p] == 0xFF) && (cdata[4 + p] == 0x96) ) { sof = 1; //if (p > 28) { // PDEBUG(0, "0x%2X 0x%2X 0x%2X 0x%2X 0x%2X 0x%2X 0x%2X 0x%2X", cdata[p-28], cdata[p-27], cdata[p-26], cdata[p-25], cdata[p-24], cdata[p-23], cdata[p-22], cdata[p-21]); //} break; } } if (sof) {#if 1 spin_lock(&spca50x->v4l_lock); if (p > 28) { spca50x->avg_lum = cdata[p-23]; } spin_unlock(&spca50x->v4l_lock); PDEBUG(5, "mean luma %d", spca50x->avg_lum);#endif // copy the end of data to the current frame memcpy(frame->highwater, cdata, p); frame->highwater += p; //totlen += p; *iPix = p; //copy to the nextframe start at p *datalength -= *iPix; PDEBUG(5, "Pixartcam header packet found, %d datalength %d !!", p, *datalength ); return 0; } else { *iPix = 0; return (seqnum+1); } }}#endif // pac7311USB_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -