📄 tv8532.h
字号:
spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_POINTB_H, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_BUDGET_L, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_BUDGET_H, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_VID_L, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_VID_H, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_PID_L, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_PID_H, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_DeviceID, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_COLBEGIN_L, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_COLBEGIN_H, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_ROWBEGIN_L, &data, 1); spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_ROWBEGIN_H, &data, 1);}static void tv_8532_setReg(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; __u8 data = 0; __u8 value[2] = { 0, 0 }; data = ADCBEGINL; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_COLBEGIN_L, &data, 1); //0x10 data = ADCBEGINH; // also digital gain spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_COLBEGIN_H, &data, 1); data = TV8532_CMD_UPDATE; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL, &data, 1); //0x00<-0x84 data = 0x0a; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1); /*******************************************************************/ data = ADHEIGHL; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADHEIGHT_L, &data, 1); //0e data = ADHEIGHH; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADHEIGHT_H, &data, 1); //0f value[0] = EXPOL; value[1] = EXPOH; // 350d 0x014c; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EXPOSURE, value, 2); //1c data = ADCBEGINL; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_COLBEGIN_L, &data, 1); //0x10 data = ADCBEGINH; // also digital gain spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_COLBEGIN_H, &data, 1); data = ADRBEGINL; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_ROWBEGIN_L, &data, 1); //0x14 data = 0x00; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_SLOPE, &data, 1); //0x91 data = 0x02; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_BITCTRL, &data, 1); //0x94 data = TV8532_CMD_EEprom_Close; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_CTRL, &data, 1); //0x01 data = 0x00; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_SLOPE, &data, 1); //0x91 data = TV8532_CMD_UPDATE; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL, &data, 1); //0x00<-0x84}static void tv_8532_PollReg(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; __u8 data = 0; int i; /* strange polling from tgc */ for (i = 0; i < 10; i++) { data = TESTCLK; //0x48; //0x08; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_SETCLK, &data, 1); //0x2c data = TV8532_CMD_UPDATE; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL, &data, 1); data = 0x01; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31 }}static int tv8532_init(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; __u8 data = 0; __u8 dataStart = 0; __u8 value[2] = { 0, 0 }; data = 0x32; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_SLOPE, &data, 1); data = 0; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_BITCTRL, &data, 1); tv_8532ReadRegisters(spca50x); data = 0x0b; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1); value[0] = ADHEIGHL; value[1] = ADHEIGHH; // 401d 0x0169; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADHEIGHT_L, value, 2); //0e value[0] = EXPOL; value[1] = EXPOH; // 350d 0x014c; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EXPOSURE, value, 2); //1c data = ADWIDTHL; // 0x20; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADWIDTH_L, &data, 1); //0x0c data = ADWIDTHH; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADWIDTH_H, &data, 1); // 0x0d /*******************************************************************/ data = TESTCOMP; //0x72 compressed mode spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_QUANT_COMP, &data, 1); //0x28 data = TESTLINE; //0x84; // CIF | 4 packet spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_MODE_PACKET, &data, 1); //0x29 /*******************************************************************/ data = TESTCLK; //0x48; //0x08; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_SETCLK, &data, 1); //0x2c data = TESTPTL; // 0x38; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINT_L, &data, 1); //0x2d data = TESTPTH; // 0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINT_H, &data, 1); // 0x2e dataStart = TESTPTBL; //0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINTB_L, &dataStart, 1); //0x2f data = TESTPTBH; //0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINTB_H, &data, 1); //0x30 data = TV8532_CMD_UPDATE; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL, &data, 1); //0x00<-0x84 /********************************************************************/ data = 0x01; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31 wait_ms(200); data = 0x00; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31 /********************************************************************/ tv_8532_setReg(spca50x); /*******************************************************************/ data = 0x0b; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1); /*******************************************************************/ tv_8532_setReg(spca50x); /********************************************************************/ tv_8532_PollReg(spca50x); return 0;}static void tv8532_start(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; __u8 data = 0; __u8 dataStart = 0; __u8 value[2] = { 0, 0 }; data = 0x32; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_SLOPE, &data, 1); data = 0; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_AD_BITCTRL, &data, 1); tv_8532ReadRegisters(spca50x); data = 0x0b; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1); value[0] = ADHEIGHL; value[1] = ADHEIGHH; // 401d 0x0169; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADHEIGHT_L, value, 2); //0e tv8532_initPictSetting(spca50x); //value[0] = EXPOL; value[1] =EXPOH; // 350d 0x014c; //spca5xxRegWrite(dev,TV8532_REQ_RegWrite,0,TV8532_EXPOSURE,value,2); //1c tv8532_setbrightness(spca50x); data = ADWIDTHL; // 0x20; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADWIDTH_L, &data, 1); //0x0c data = ADWIDTHH; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_ADWIDTH_H, &data, 1); // 0x0d /*******************************************************************/ data = TESTCOMP; //0x72 compressed mode spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_QUANT_COMP, &data, 1); //0x28 if (spca50x->mode) { data = QCIFLINE; //0x84; // CIF | 4 packet spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_MODE_PACKET, &data, 1); //0x29 } else { data = TESTLINE; //0x84; // CIF | 4 packet spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_MODE_PACKET, &data, 1); //0x29 } /*******************************************************************/ data = TESTCLK; //0x48; //0x08; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_SETCLK, &data, 1); //0x2c data = TESTPTL; // 0x38; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINT_L, &data, 1); //0x2d data = TESTPTH; // 0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINT_H, &data, 1); // 0x2e dataStart = TESTPTBL; //0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINTB_L, &dataStart, 1); //0x2f data = TESTPTBH; //0x04; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_POINTB_H, &data, 1); //0x30 data = TV8532_CMD_UPDATE; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL, &data, 1); //0x00<-0x84 /********************************************************************/ data = 0x01; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31 wait_ms(200); data = 0x00; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31 /********************************************************************/ tv_8532_setReg(spca50x); /*******************************************************************/ data = 0x0b; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1); /*******************************************************************/ tv_8532_setReg(spca50x); /********************************************************************/ tv_8532_PollReg(spca50x); data = 0x00; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_UDP_UPDATE, &data, 1); //0x31}static void tv8532_stopN(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; __u8 data = 0; data = 0x0b; spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO_OE, &data, 1);}static int tv8532_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ *iPix = 0; PDEBUG(1, "icm532, sequenceNumber: 0x%02x packet %d ", seqnum, spca50x->packet); /* here we detect 0x80 */ if (cdata[0] == 0x80) { /* counter is limited so we need few header for a frame :) */ /* header 0x80 0x80 0x80 0x80 0x80 */ /* packet 00 63 127 145 00 */ /* sof 0 1 1 0 0 */ /* update sequence */ if ((spca50x->packet == 63) || (spca50x->packet == 127)) spca50x->synchro = 1; /* is there a frame start ? */ if (spca50x->packet >= ((spca50x->hdrheight >> 1) - 1)) { PDEBUG(1, "SOF > %d seqnumber %d packet %d", spca50x->synchro, seqnum, spca50x->packet); if (!spca50x->synchro) { spca50x->packet = 0; return 0; //frame start } } else { if (!spca50x->synchro) { // Drop packet frame corrupt PDEBUG(1, "DROP SOF %d seqnumber %d packet %d", spca50x->synchro, seqnum, spca50x->packet); frame->last_packet = 0; seqnum = 0 ; spca50x->packet = 0; return -1; } spca50x->synchro = 1; spca50x->packet++; return (seqnum+1); } } else { spca50x->packet++; return (seqnum+1); } PDEBUG(0, "Warning wrong TV8532 frame detection %d", spca50x->packet); return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -