diff --git a/sys/i386/include/qcam.h b/sys/i386/include/qcam.h index 62781e0e62ee..e02eeefdb080 100644 --- a/sys/i386/include/qcam.h +++ b/sys/i386/include/qcam.h @@ -41,7 +41,7 @@ #define QC_GET _IOR('S', 1, struct qcam) /* get parameter structure */ #define QC_SET _IOW('S', 2, struct qcam) /* set parameter structure */ -#define QC_IOCTL_VERSION 2 /* version of the structure */ +#define QC_IOCTL_VERSION 3 /* version of the structure */ struct qcam { int qc_version; /* version of qcam structure */ @@ -51,6 +51,7 @@ struct qcam { int qc_yorigin; /* y origin */ int qc_bpp; /* bits per pixel (4 or 6) */ int qc_zoom; /* zoom mode */ + int qc_exposure; /* length of exposure */ u_char qc_brightness; /* 0..255 */ u_char qc_whitebalance; /* 0..255 */ u_char qc_contrast; /* 0..255 */ diff --git a/usr.sbin/qcamcontrol/qcamcontrol.c b/usr.sbin/qcamcontrol/qcamcontrol.c index 9dc5cc67e282..16b784174f34 100644 --- a/usr.sbin/qcamcontrol/qcamcontrol.c +++ b/usr.sbin/qcamcontrol/qcamcontrol.c @@ -6,13 +6,14 @@ void print_data(struct qcam *data) { - fprintf(stderr, "version=%d, (%d,%d) at (%d,%d) @%dbpp," - "zoom=%d, b/w/c=%d/%d/%d\n", + fprintf(stderr, "version=%d, (%d,%d) at (%d,%d) @%dbpp " + "zoom=%d, exp=%d, b/w/c=%d/%d/%d\n", data->qc_version, data->qc_xsize, data->qc_ysize, data->qc_xorigin, data->qc_yorigin, data->qc_bpp, data->qc_zoom, + data->qc_exposure, data->qc_brightness, data->qc_whitebalance, data->qc_contrast); @@ -23,7 +24,7 @@ usage(void) fprintf(stderr, "usage: qcamcontrol [-p port] [-x xsize] [-y ysize] " "[-z zoom] [-d depth]\n" " [-b brightness] [-w whitebal] " - "[-c contrast]\n"); + "[-c contrast] [-e exposure]\n"); exit(2); } @@ -37,15 +38,16 @@ main(int argc, char **argv) static char buffer[QC_MAX_XSIZE*QC_MAX_YSIZE]; char *port = "/dev/qcam0"; - int x_size, y_size, zoom, depth, brightness, whitebalance, contrast; + int x_size, y_size, zoom, depth, brightness, whitebalance, contrast, + exposure; /* * Default everything to unset. */ x_size = y_size = zoom = depth = brightness = whitebalance = - contrast = -1; + contrast = exposure = -1; - while ((opt = getopt(argc, argv, "p:x:y:z:d:b;w:c:")) != EOF) { + while ((opt = getopt(argc, argv, "p:x:y:z:d:b;w:c:e:")) != EOF) { switch (opt) { case 'p': port = optarg; @@ -109,6 +111,14 @@ main(int argc, char **argv) } break; + case 'e': + exposure = atoi(optarg); + if (exposure < 100) { + fprintf(stderr, "bad exposure (min 100)\n"); + exit(2); + } + break; + default: usage(); } @@ -143,6 +153,8 @@ main(int argc, char **argv) info.qc_whitebalance = whitebalance; if (contrast > -1) info.qc_contrast = contrast; + if (exposure > -1) + info.qc_exposure = exposure; /* * make sure we're in sync with the kernel version of the driver