📄 sonix.h
字号:
#ifndef SONIXUSB_H#define SONIXUSB_H/****************************************************************************# sonix sn9c102 library ## Copyright (C) 2003 2004 Michel Xhaard mxhaard@magic.fr ## Add Pas106 Stefano Mozzi (C) 2004 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## #****************************************************************************/#include "sn9cxxx.h"#define COMP2 0x8F#define COMP 0xC7 //0x87 //0x07#define COMP1 0xC9 //0x89 //0x09#define MCK_INIT 0x63#define MCK_INIT1 0x20#define SYS_CLK 0x04/******************* Camera Interface ***********************/static int sonix_init( struct usb_spca50x *spca50x );static void sonix_start(struct usb_spca50x *spca50x );static void sonix_stop(struct usb_spca50x *spca50x );static __u16 sonix_getbrightness(struct usb_spca50x *spca50x);static __u16 sonix_setbrightness(struct usb_spca50x *spca50x);static __u16 sonix_setcontrast(struct usb_spca50x *spca50x);static int sonix_config(struct usb_spca50x *spca50x);/******************************************************************/static void set_sonixVGA(struct usb_spca50x *spca50x ){ memset (spca50x->mode_cam, 0x00, TOTMODE * sizeof(struct mwebcam)); spca50x->mode_cam[VGA].width = 640; spca50x->mode_cam[VGA].height = 480; spca50x->mode_cam[VGA].t_palette = P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; if(spca50x->customid == SN9C102P || spca50x->customid == SN9C105 || spca50x->customid == SN9C120) spca50x->mode_cam[VGA].t_palette |= P_JPEG; spca50x->mode_cam[VGA].pipe = 1023; 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 = 1023; 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 = 1023; 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_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; if(spca50x->customid == SN9C102P || spca50x->customid == SN9C105 || spca50x->customid == SN9C120) spca50x->mode_cam[CIF].t_palette |= P_JPEG; spca50x->mode_cam[CIF].pipe = 1023; 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 = 1023; 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 = 1023; spca50x->mode_cam[QSIF].method = 1; spca50x->mode_cam[QSIF].mode = 1; if(spca50x->customid == SN9C101 || spca50x->customid == SN9C102 || spca50x->customid == SN9C103){ spca50x->mode_cam[QCIF].width = 160; spca50x->mode_cam[QCIF].height = 120; spca50x->mode_cam[QCIF].t_palette = P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QCIF].pipe = 1023; spca50x->mode_cam[QCIF].method = 0; spca50x->mode_cam[QCIF].mode = 2; }}static void set_sonixSIF(struct usb_spca50x *spca50x ){ memset (spca50x->mode_cam, 0x00, TOTMODE * sizeof(struct mwebcam)); spca50x->mode_cam[SIF].width = 352; spca50x->mode_cam[SIF].height = 288; spca50x->mode_cam[SIF].t_palette = P_RAW |P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[SIF].pipe = 1023; spca50x->mode_cam[SIF].method = 0; 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 = 1023; spca50x->mode_cam[CIF].method = 1; spca50x->mode_cam[CIF].mode = 0; 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 = 1023; spca50x->mode_cam[QPAL].method = 1; spca50x->mode_cam[QPAL].mode = 0; spca50x->mode_cam[QSIF].width = 176; spca50x->mode_cam[QSIF].height = 144; spca50x->mode_cam[QSIF].t_palette = P_RAW |P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QSIF].pipe = 1023; spca50x->mode_cam[QSIF].method = 0; spca50x->mode_cam[QSIF].mode = 1; spca50x->mode_cam[QCIF].width = 160; spca50x->mode_cam[QCIF].height = 120; spca50x->mode_cam[QCIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QCIF].pipe = 1023; spca50x->mode_cam[QCIF].method = 1; spca50x->mode_cam[QCIF].mode = 1;}static __u8initTas5130[]={ 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x20,0x11,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x69,0x0c,0x0a, 0x28,0x1e,0x60,COMP,MCK_INIT, 0x18,0x10,0x04,0x03,0x11,0x0c }; static __u8initPas106[]={ 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x81,0x40,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x05,0x01,0x00, 0x16,0x12,0x28,COMP1,MCK_INIT1, 0x18,0x10,0x04,0x03,0x11,0x0c }; static __u8initOv7630[]={ 0x04,0x44,0x00,0x00,0x00,0x00,0x00,0x80,0x21,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x03,0x0a,//shift one pixel 0x02 is 0x01 at start 0x28,0x1e,0x68,COMP1,MCK_INIT1, 0x1d,0x10,0x02,0x03,0x0f,0x0c }; static __u8initHv7131[]={ 0x46,0x77,0x00,0x04,0x00,0x00,0x00,0x80,0x11,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x01,0x00,// shift from 0x02 0x01 0x00 0x28,0x1e,0x60,0x8a,0x20, 0x1d,0x10,0x02,0x03,0x0f,0x0c };static __u8initTas5110[]={ 0x44,0x03,0x00,0x00,0x00,0x00,0x00,0x20,0x11,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x46,0x09,0x0a,// shift from 0x45 0x09 0x0a 0x16,0x12,0x60,0x86,0x2b, 0x14,0x0a,0x02,0x02,0x09,0x07};static __u8initPas202[]={ 0x44,0x44,0x21,0x30,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x03,0x0A,//6 0x28,0x1e,0x28,0x89,0x30, 0x00,0x00,0x02,0x03,0x0F,0x0C };//compression 0x86 mckinit1 0x2bstatic __u8 pas106_data[][2]={ { 0x02, 0x04}, /* Pixel Clock Divider 6*/ { 0x03, 0x13}, /* Frame Time MSB */ //{ 0x03, 0x12}, /* Frame Time MSB */ { 0x04, 0x06}, /* Frame Time LSB */ //{ 0x04, 0x05}, /* Frame Time LSB */ { 0x05, 0x65}, /* Shutter Time Line Offset */ //{ 0x05, 0x6d}, /* Shutter Time Line Offset */ //{ 0x06, 0xB1}, /* Shutter Time Pixel Offset */ { 0x06, 0xcd}, /* Shutter Time Pixel Offset */ { 0x07, 0xC1}, /* Black Level Subtract Sign */ //{ 0x07, 0x00}, /* Black Level Subtract Sign */ { 0x08, 0x06}, /* Black Level Subtract Level */{ 0x08, 0x06}, /* Black Level Subtract Level */ //{ 0x08, 0x01}, /* Black Level Subtract Level */ { 0x09, 0x05}, /* Color Gain B Pixel 5 a*/ { 0x0A, 0x04}, /* Color Gain G1 Pixel 1 5*/ { 0x0B, 0x04}, /* Color Gain G2 Pixel 1 0 5*/ { 0x0C, 0x05}, /* Color Gain R Pixel 3 1*/ { 0x0D, 0x00}, /* Color GainH Pixel */ { 0x0E, 0x0E}, /* Global Gain */ { 0x0F, 0x00}, /* Contrast */ { 0x10, 0x06}, /* H&V synchro polarity */ { 0x11, 0x06}, /* ?default */ { 0x12, 0x06}, /* DAC scale */ { 0x14, 0x02}, /* ?default */ { 0x13, 0x01}, /* Validate Settings */ { 0, 0 } /* The end */};static __u8 ov7630_sensor_init[][8]={{ 0xa0, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10},{ 0xb0, 0x21, 0x01, 0x77, 0x3a, 0x00, 0x00, 0x10},{ 0xd0, 0x21, 0x12, 0x78, 0x00, 0x80, 0x34, 0x10},{ 0xa0, 0x21, 0x1b, 0x04, 0x00, 0x80, 0x34, 0x10},{ 0xa0, 0x21, 0x20, 0x44, 0x00, 0x80, 0x34, 0x10},{ 0xa0, 0x21, 0x23, 0xee, 0x00, 0x80, 0x34, 0x10},{ 0xd0, 0x21, 0x26, 0xa0, 0x9a, 0xa0, 0x30, 0x10},{ 0xb0, 0x21, 0x2a, 0x80, 0x00, 0xa0, 0x30, 0x10},{ 0xb0, 0x21, 0x2f, 0x3d, 0x24, 0xa0, 0x30, 0x10},{ 0xa0, 0x21, 0x32, 0x86, 0x24, 0xa0, 0x30, 0x10},{ 0xb0, 0x21, 0x60, 0xa9, 0x42, 0xa0, 0x30, 0x10},{ 0xa0, 0x21, 0x65, 0x00, 0x42, 0xa0, 0x30, 0x10},{ 0xa0, 0x21, 0x69, 0x38, 0x42, 0xa0, 0x30, 0x10},{ 0xc0, 0x21, 0x6f, 0x88, 0x0b, 0x00, 0x30, 0x10},{ 0xc0, 0x21, 0x74, 0x21, 0x8e, 0x00, 0x30, 0x10},{ 0xa0, 0x21, 0x7d, 0xf7, 0x8e, 0x00, 0x30, 0x10},{ 0xd0, 0x21, 0x17, 0x1c, 0xbd, 0x06, 0xf6, 0x10},//{ 0xa0, 0x21, 0x10, 0x36, 0xbd, 0x06, 0xf6, 0x16},// exposure{ 0xa0, 0x21, 0x76, 0x03, 0xbd, 0x06, 0xf6, 0x16},{ 0xa0, 0x21, 0x11, 0x01, 0xbd, 0x06, 0xf6, 0x16},{ 0xa0, 0x21, 0x00, 0x10, 0xbd, 0x06, 0xf6, 0x15}, //gain//{ 0xb0, 0x21, 0x2a, 0xc0, 0x3c, 0x06, 0xf6, 0x1d},//a0 1c,a0 1f,c0 3c frame rate ?line interval from ov6630{ 0xb0, 0x21, 0x2a, 0xa0, 0x1f, 0x06, 0xf6, 0x1d},{ 0,0,0,0,0,0,0,0}};static __u8tas5110_sensor_init[][8]={ {0x30,0x11,0x00,0x00,0x0c,0x00,0x00,0x10}, {0x30,0x11,0x02,0x20,0xa9,0x00,0x00,0x10}, { 0,0,0,0,0,0,0,0}};static __u8hv7131_sensor_init[][8]={ {0xc0,0x11,0x31,0x38,0x2a,0x2e,0x00,0x10}, {0xa0,0x11,0x01,0x08,0x2a,0x2e,0x00,0x10}, {0xb0,0x11,0x20,0x00,0xd0,0x2e,0x00,0x10}, {0xc0,0x11,0x25,0x03,0x0e,0x28,0x00,0x16}, {0xa0,0x11,0x30,0x10,0x0e,0x28,0x00,0x15}, { 0,0,0,0,0,0,0,0}};static __u8 pas202_sensor_init[][8]={ { 0xA0,0x40,0x02,0x03,0x00,0x00,0x00,0x10 }, { 0xD0,0x40,0x04,0x07,0x34,0x00,0x09,0x10 }, { 0xD0,0x40,0x08,0x01,0x00,0x00,0x01,0x10 }, { 0xD0,0x40,0x0C,0x00,0x0C,0x00,0x32,0x10 }, { 0xD0,0x40,0x10,0x00,0x01,0x00,0x63,0x10 }, { 0xA0,0x40,0x15,0x70,0x01,0x00,0x63,0x10 }, { 0xA0,0x40,0x18,0x00,0x01,0x00,0x63,0x10 }, { 0xA0,0x40,0x11,0x01,0x01,0x00,0x63,0x10 }, { 0xA0,0x40,0x03,0x56,0x01,0x00,0x63,0x10 }, { 0xA0,0x40,0x11,0x01,0x01,0x00,0x63,0x10 }, { 0xB0,0x40,0x04,0x07,0x2A,0x00,0x63,0x10 }, { 0xB0,0x40,0x0E,0x00,0x3D,0x00,0x63,0x10 }, { 0xA0,0x40,0x11,0x01,0x3D,0x00,0x63,0x16 }, { 0xA0,0x40,0x10,0x08,0x3D,0x00,0x63,0x15 }, { 0xA0,0x40,0x02,0x04,0x3D,0x00,0x63,0x16 }, { 0xA0,0x40,0x11,0x01,0x3D,0x00,0x63,0x16 }, { 0xB0,0x40,0x0E,0x00,0x31,0x00,0x63,0x16 }, { 0xA0,0x40,0x11,0x01,0x31,0x00,0x63,0x16 }, { 0xA0,0x40,0x10,0x0E,0x31,0x00,0x63,0x15 }, { 0xA0,0x40,0x11,0x01,0x31,0x00,0x63,0x16 }, { 0,0,0,0,0,0,0,0}}; static int sonix_i2cwrite (struct usb_device *dev,__u8 *buffer,__u16 length){ int retry = 60; __u8 ByteReceive=0x00; /* is i2c ready */ if (length > 8 || !buffer) return -1; sonixRegWrite(dev,0x08,0x08,0x0000,buffer,length); while (retry--) { wait_ms (10); sonixRegRead(dev,0x00,0x08,0x0000,&ByteReceive,1); if(ByteReceive == 4) return 0; } return -1;}static __u16 sonix_getbrightness(struct usb_spca50x *spca50x)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -