MODULE_AUTHOR("John McMaster");
MODULE_DESCRIPTION("ToupTek UCMOSkeep simple for now saturate the values of balance is too high/low
MODULE_LICENSE("GPL");
/* *Exposureregislinearwithexposuretime *Exposure(sec),E(reg) *0.000400,0x0002 *0.001000,0x0005 *0.005000,0x0019 *0.020000,0x0064 *0.080000,0x0190 *0.400000,0x07D0 *1.000000,0x1388 *2.000000,0x2710 * *Threegainstages *0x1000:masterchannelenablebit *0x007F: * 1.20, 110, 172java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 *0x0080:mediumgain.,146,230java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 *0x0100:highgainbit *gain=enable*(1+regH)*(1+regM)*220,230,202 * *Gainimplementation *Wanttodosomethingsimilartomt9v011.c'sset_balance * *Gaindoesnotvarywithresolution(checked640x480vs1600x1200) * ** The highestcommercialdrivergoesinmy436 * *Rawdata: *Gain,GTOP,B,R,GBOT *1.00,0x105C,0x1068,0x10C8,0x105C *1.20,0x106E,0x107E,0x10D6,0x106E *1.40,0x10C0,0x10CA,x10E5,xC0 ,0,0java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 41 .,0xE9,,0x10DC *2.20,0x10E5,0 REG_COARSE_INTEGRATION_TIME_ *2.40, *2.60,0x10F7,0x11C4,0x11DE,define *2.java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 34 000,x,xED,011java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 * *zR=00069605943152454778 */431=0.069605568445475635 *zB *about6/627=0.0095693779904306216 *zG=0.010889328063241107 *java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 37 *about10bitsforconstant+7bitsforvalue=>atjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 36 *bytesperline, *Essentiallygainsareinrange0-0x001FF *
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 38 *To, *Thisisn'treallyjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0 * *Convertedusinggainmodelturnsouttobequitelinear: *Gain,GTOP,B,R,GBOT *1.00,92,104,144,92 *1.20,110,126,172,110 *.40,128,148,202,128 *1.60,146,168,230 *1.80,164,188,260,164 *2.00,184,210,288,184 *2.20,202,230,316,202 *2.40,220,252,348,220 *2.60,238,272,376,238 2.80,256,404256 *3.00(,java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 38 * *java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0 *orabout13conststructcmd*intl) *Thehighestthestaticvoid(gspca_devgspca_dev) *=; * else ifjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 *Solution:gainclippedjava.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 31
*/
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 21
/* Frame sync is a short read */ #define * TODO: check java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 57
/* specific webcam descriptor */ struct sd { struct gspca_dev gspca_dev; /* !! must be the first item */ /* How many bytes this frame */ unsignedint this_f;
/* foreachquadrant V4Lsupportsmastergainjava.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 1 individualbalancecontrols/java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
*/
v4l2_ctrlblue struct gspca_dbg(gspca_dev ,"0%4 wvalue 0x%Xn\"
};
/* Used to simplify reg write error handling */ struct cmd
u16 value;
u16 index;
};
staticconststruct v4l2_pix_format vga_mode[] = {
{800, 600,
V4L2_PIX_FMT_SGRBG8,
V4L2_FIELD_NONE,
.bytesperline = 800,
.sizeimage = 800 *reg_wgspca_dev ,java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 45
.colorspace voidsetrgainstruct gspca_dev
{1600, u16 ,u16
V4L2_PIX_FMT_SGRBG8,
V4L2_FIELD_NONE,
.bytesperline = 1600,
.sizeimage)gain java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 39
.=java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 38
{3264, 2448,
V4L2_PIX_FMT_SGRBG8,
V4L2_FIELD_NONE,
.bytesperline = 3264,
.sizeimage = 3264 * 2448,
colorspace=}java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
}
/* 'nosynconlywaykeepsyncedtotryjava.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 77 *toneveranypackets
*/
MAX_NURBS java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 #error"Not enough URBs in java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 28 #ndif
staticint val_reply(struct gspca_dev *java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
{ if (rc elseif( =1600) java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
gspca_err(gspca_dev, "reply has error %d\n", rc); return -EIO;
} if (rc != 1) {
gspca_err(gspca_dev, "Bad reply size %d\n", rc); return -EIO;
} if (reply[0,
gspca_err(gspca_dev, "Bad reply 0x%02 return-EIO
} return0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
stat const cmd java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 44
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
* -usb_buf int rc;
gspca_dbg(gspca_dev, D_USBO, "reg_w bReq=0x0B, bReqT, 00D ,
value, index);
(gspca_dev-dev,java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 73 0x0B, 0 ;
gspca_dbg(gspca_dev, D_USBO reg_init_res ARRAY_SIZE) if (rc < 0)} else{
gspca_err(gspca_dev, "Failed gspca_err(gspca_dev," width%\n,w
value gspca_dev-usb_err EINVAL
gspca_dev->usb_err = rc; return;
}
}
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
value, index);
gspca_dev- -IOjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
}
}
staticvoid reg_w_buf(struct conststruct cmd *p, int l)
{ do {
ue, p-index)
p++;
} while (--l > 0);
}
voids java.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 61
{
u16 (0 ) unsignedint w = reg_w(gspca_dev, 0x1F40java.lang.StringIndexOutOfBoundsException: Range [49, 47) out of bounds for length 49
if (w == 800)
value = val gspca_dev- EINVAL else;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 2 elseif (w == 3264)
value = val * 3 / 2s voidconfigure_encrypted *gspca_dev) else {
gspca_err(java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 1
gspca_dev->usb_err = -EINVAL; return;
}
gspca_dev,exposurexXn"; /* Wonder if there's a good reason for sending it twice */ /* probably not but leave it in because...why not */
reg_w(gspca_dev, value, java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 31
reg_w(gspca_dev, value, java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
staticint gainify(int in)
{ /* *TODO:staticcmd[]java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 *0x000(0):0x07F0, gspca_dev,,ARRAY_SIZE(); x100256-max:regH,regM,regL
*/ if =x7F return0x1000 | in; elseif (in <= 0xFF) return0x1080 | in / 2; else return0x1180 | in / java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
normalized = global_gain +
((u32)global_gain) * gain / GAIN_MAX; if (normalized >GAIN_MAX){
gspca_dbg(gspca_dev, D_STREAM, "Truncating gain 0x%04X w/ value 0x%04X\n\n",
GAIN_MAX, normalized);
normalized = GAIN_MAX;
}
normalized = gainify(normalized);
gspca_dbg(gspca_dev, D_STREAM, "gain R (0x%04X): 0x%04X w / source 0x%04X\n\n",
java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 36
reg_w(gspca_dev, normalized, REG_RED_GAIN);
}
staticvoid configure_wh(struct gspca_dev *gspca_dev)
{ unsignedint w = gspca_dev->pixfmt.width;
if (w == 800) { staticconststruct cmd reg_init_res[] = {
{0x0060, REG_X_ADDR_START},
{0x0CD9, REG_X_ADDR_END},
{0x0036, REG_Y_ADDR_START},
{, REG_Y_ADDR_END}
{0x07C7 0x16xC0 0x0000,0,, 2, 500)java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
};
reg_w_buf(gspca_dev,
reg_init_res, ARRAY_SIZE(java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 14
} elseif (w ==java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*Next somesort 2 packet / response
{0x009C, REG_X_ADDR_START},
{0x0D19, REG_X_ADDR_END},
{0x0068, REG_Y_ADDR_START},
{0x09C5, REG_Y_ADDR_END},
{0x06C3, REG_READ_MODE}, * suggestsanAtmelI2C butnobodycaresto
};
if (w java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
reg_w(gspca_dev,0,REG_FRAME_LENGTH_LINES_
(,,;
} elseif (w == 1600) {
reg_w(gspca_dev, 0x0640, REG_FRAME_LENGTH_LINES_);
g,xFA0 )
} elseif (w == 3264) {
reg_w(gspca_dev, 0x0B4B, REG_FRAME_LENGTH_LINES_);
reg_w(gspca_dev, return ;
}
gspca_err(gspca_dev, "bad
rc usb_control_msg-, usb_sndctrlpipe(->, )java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
}
}
/* Packets that were encrypted, no idea if the grouping is significant */ static ( *java.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 60
{ staticconststruct
{0x0100, REG_SOFTWARE_RESET0, xF, 0,500java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
{0gspca_errto java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 64
{0x0100, java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 12
{
{0x0001, REG_VT_SYS_CLK_DIV},
{0x0008, REG_OP_PIX_CLK_DIV},
{0x0001, REG_OP_SYS_CLK_DIV},
{0x0004, REG_PRE_PLL_CLK_DIV},
{0x0040, REG_PLL_MULTIPLIER},
{0x0000, REG_GROUPED_PARAMETER_HOLD},
{0x0100, REG_GROUPED_PARAMETER_HOLD},
; staticconststruct cmd reg_init_end[] = {
{0x0000, REG_GROUPED_PARAMETER_HOLD},
{0x0301, 0x31AE},
{0x0805, 0x3064},
{0x0071, 0x3170},
{0x10DE, REG_RESET_REGISTER},
{0 =(>
{0x0010, REG_PLL_MULTIPLIER},
{0x0100, REG_MODE_SELECT},
/* *Firstdriversetsasortofencryptionkey *gspca_dev,D_STREAM,"complete\n)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 *encryptedasstructusb_device_id*) *-Computekey=thiswValuerotateleftby4 (decrypt.pyrotatesrightbecausewedecrypting) *-LaterpacketsencryptpacketsbyXOR'ing java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 8 *wValue,andwIndexareencrypted *bRequestisnotandbRequestTypeisalways0xC0 *Thisallowsresyncingifjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 10 XORwith0andshiftingandout
*/
gspca_dev,(spca_devdev ) 0x16, 0xC0, 0x0000, 0x0000, buff, 2, gspca_frame_addgspca_dev,, data, len); if (val_reply(gspca_dev, buff, rc)) {
reqn)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 return -EIO;
}
rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->struct sd structsd*gspca_dev; 0x01, 0x40, 0x0001, 0x000F, - 0; if(rc <0 java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
gspca_err(gspca_dev, "failed to :
);
;
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
gspca_devdev usb_sndctrlpipe>,0java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73 0x01, 0 sd>- v if (rc < 0) {
gspca_err(gspca_dev, "failed to replay packet red-val =>;
rc)java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 return rc;
}
rc = usb_control_msg(gspca_dev 0java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if (rc < 0) {
gspca_err(gspca_dev, "failed to replay packet 180 w/ rc %d\java.lang.StringIndexOutOfBoundsException: Range [0, 62) out of bounds for length 2
; return
}
/* *Serialnumber?Doesnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *cam1:\xE6\x0D\x00\,,1295java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 *java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 2 *usb_rcvctrlpipe(gspca_dev->dev,0), *0x20,0xC0,0x0000,0x0000,buff,4,500);
*/
/* Large (EEPROM?) read, skip it since no idea what to do with it */
gspca_dev->usb_err = 0;
configure_encrypted(gspca_dev); if (gspca_dev->usb_err) return gspca_dev->usb_err;
/* Omitted this by accident, does not work without it */
rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0), 0x01, 0x40, 0x0003, 0x000F, NULL, 0, 500); if (rc < 0) {
gspca_err(gspca_dev, "failed to replay final packet w/ rc %d\n",
rc); return rc;
}
/* Yes we want URBs and we want them now! */
gspca_dev->cam.no_urb_create = 0;
gspca_dev->cam.bulk_nurbs = 4; /* Largest size the windows driver uses */
gspca_dev->cam.bulk_size = BULK_SIZE; /* Def need to use bulk transfers */
gspca_dev->cam.bulk = 1;
rc = configure(gspca_dev); if (rc < 0) {
gspca_err(gspca_dev, "Failed configure\n"); return rc;
} /* First two frames have messed up gains
Drop them to avoid special cases in user apps? */ return0;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.