Lines Matching defs:cam

49 #define FRAME_SIZE_PER_DESC   frame_sizes[cam->cur_alt]
51 static void process_frame(struct camera_data *cam);
57 static void free_sbufs(struct camera_data *cam);
58 static void add_APPn(struct camera_data *cam);
59 static void add_COM(struct camera_data *cam);
60 static int submit_urbs(struct camera_data *cam);
61 static int set_alternate(struct camera_data *cam, unsigned int alt);
62 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt);
85 static void process_frame(struct camera_data *cam)
89 unsigned char *inbuff = cam->workbuff->data;
92 cam->workbuff->num, cam->curbuff->num);
94 if(cam->workbuff->length > cam->workbuff->max_length)
95 cam->workbuff->max_length = cam->workbuff->length;
100 cam->workbuff->status = FRAME_ERROR;
108 if(!cam->first_image_seen) {
111 cam->first_image_seen = 1;
112 cam->workbuff->status = FRAME_EMPTY;
115 if (cam->workbuff->length > 3) {
116 if(cam->mmapped &&
117 cam->workbuff->length < cam->workbuff->max_length) {
119 memset(cam->workbuff->data+cam->workbuff->length,
120 0, cam->workbuff->max_length-
121 cam->workbuff->length);
123 cam->workbuff->max_length = cam->workbuff->length;
124 cam->workbuff->status = FRAME_READY;
126 if(!cam->mmapped && cam->num_frames > 2) {
140 * cam->num_frames-2 frames before problems
143 cam->curbuff->status = FRAME_EMPTY;
145 cam->curbuff = cam->workbuff;
146 cam->workbuff = cam->workbuff->next;
148 cam->workbuff->num, cam->curbuff->num);
154 cam->workbuff->status = FRAME_ERROR;
164 static void add_APPn(struct camera_data *cam)
166 if(cam->APP_len > 0) {
167 cam->workbuff->data[cam->workbuff->length++] = 0xFF;
168 cam->workbuff->data[cam->workbuff->length++] = 0xE0+cam->APPn;
169 cam->workbuff->data[cam->workbuff->length++] = 0;
170 cam->workbuff->data[cam->workbuff->length++] = cam->APP_len+2;
171 memcpy(cam->workbuff->data+cam->workbuff->length,
172 cam->APP_data, cam->APP_len);
173 cam->workbuff->length += cam->APP_len;
183 static void add_COM(struct camera_data *cam)
185 if(cam->COM_len > 0) {
186 cam->workbuff->data[cam->workbuff->length++] = 0xFF;
187 cam->workbuff->data[cam->workbuff->length++] = 0xFE;
188 cam->workbuff->data[cam->workbuff->length++] = 0;
189 cam->workbuff->data[cam->workbuff->length++] = cam->COM_len+2;
190 memcpy(cam->workbuff->data+cam->workbuff->length,
191 cam->COM_data, cam->COM_len);
192 cam->workbuff->length += cam->COM_len;
207 struct camera_data *cam = (struct camera_data *) urb->context;
220 if (!cam->streaming || !cam->present || cam->open_count == 0) {
223 cam->streaming, cam->present, cam->open_count);
237 if(cam->workbuff->status == FRAME_READY) {
241 for (ptr = cam->workbuff->next;
242 ptr != cam->workbuff;
251 if (ptr == cam->workbuff)
254 cam->workbuff = ptr;
257 if (cam->workbuff->status == FRAME_EMPTY ||
258 cam->workbuff->status == FRAME_ERROR) {
259 cam->workbuff->status = FRAME_READING;
260 cam->workbuff->length = 0;
270 cam->workbuff->status = FRAME_ERROR;
285 cam->workbuff->status = FRAME_ERROR;
291 if(cam->workbuff->status != FRAME_READING) {
297 cam->frame_count++;
300 cam->workbuff->status);
304 if (cam->frame_size < cam->workbuff->length + n) {
306 cam->workbuff->length, n);
307 cam->workbuff->status = FRAME_ERROR;
308 if(cam->workbuff->length > cam->workbuff->max_length)
309 cam->workbuff->max_length =
310 cam->workbuff->length;
314 if (cam->workbuff->length == 0) {
326 do_gettimeofday(&cam->workbuff->timestamp);
327 cam->workbuff->seq = cam->frame_count++;
328 cam->workbuff->data[0] = 0xFF;
329 cam->workbuff->data[1] = 0xD8;
330 cam->workbuff->length = 2;
331 add_APPn(cam);
332 add_COM(cam);
333 memcpy(cam->workbuff->data+cam->workbuff->length,
335 cam->workbuff->length += n-data_offset;
336 } else if (cam->workbuff->length > 0) {
337 memcpy(cam->workbuff->data + cam->workbuff->length,
339 cam->workbuff->length += n;
342 if ((cam->workbuff->length >= 3) &&
343 (cam->workbuff->data[cam->workbuff->length - 3] == 0xFF) &&
344 (cam->workbuff->data[cam->workbuff->length - 2] == 0xD9) &&
345 (cam->workbuff->data[cam->workbuff->length - 1] == 0xFF)) {
347 cam->workbuff->data[cam->workbuff->length - 1] = 0;
348 cam->workbuff->length -= 1;
349 } else if ((cam->workbuff->length >= 2) &&
350 (cam->workbuff->data[cam->workbuff->length - 2] == 0xFF) &&
351 (cam->workbuff->data[cam->workbuff->length - 1] == 0xD9)) {
356 DBG("Workbuff image size = %d\n",cam->workbuff->length);
357 process_frame(cam);
361 if (waitqueue_active(&cam->wq_stream))
362 wake_up_interruptible(&cam->wq_stream);
366 if(cam->streaming) {
368 urb->dev = cam->dev;
379 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt)
394 if(!cam->present)
408 cpia2_send_command(cam, &cmd);
418 cpia2_send_command(cam, &cmd);
429 cam->xfer_mode = XFER_BULK;
433 cam->xfer_mode = XFER_ISOC;
441 cpia2_send_command(cam, &cmd);
451 int cpia2_usb_change_streaming_alternate(struct camera_data *cam,
459 if(alt == cam->params.camera_state.stream_mode)
462 cpia2_usb_stream_pause(cam);
464 configure_transfer_mode(cam, alt);
466 cam->params.camera_state.stream_mode = alt;
469 cpia2_reset_camera(cam);
471 cpia2_usb_stream_resume(cam);
481 int set_alternate(struct camera_data *cam, unsigned int alt)
485 if(alt == cam->cur_alt)
488 if (cam->cur_alt != USBIF_CMDONLY) {
489 DBG("Changing from alt %d to %d\n", cam->cur_alt, USBIF_CMDONLY);
490 ret = usb_set_interface(cam->dev, cam->iface, USBIF_CMDONLY);
496 ret = usb_set_interface(cam->dev, cam->iface, alt);
501 cam->old_alt = cam->cur_alt;
502 cam->cur_alt = alt;
511 * Free all cam->sbuf[]. All non-NULL .data and .urb members that are non-NULL
515 static void free_sbufs(struct camera_data *cam)
520 if(cam->sbuf[i].urb) {
521 usb_kill_urb(cam->sbuf[i].urb);
522 usb_free_urb(cam->sbuf[i].urb);
523 cam->sbuf[i].urb = NULL;
525 if(cam->sbuf[i].data) {
526 kfree(cam->sbuf[i].data);
527 cam->sbuf[i].data = NULL;
584 int cpia2_usb_transfer_cmd(struct camera_data *cam,
589 struct usb_device *udev = cam->dev;
632 static int submit_urbs(struct camera_data *cam)
638 if (cam->sbuf[i].data)
640 cam->sbuf[i].data =
642 if (!cam->sbuf[i].data) {
644 kfree(cam->sbuf[i].data);
645 cam->sbuf[i].data = NULL;
655 if(cam->sbuf[i].urb) {
663 cam->sbuf[i].urb = urb;
664 urb->dev = cam->dev;
665 urb->context = cam;
666 urb->pipe = usb_rcvisocpipe(cam->dev, 1 /*ISOC endpoint*/);
668 urb->transfer_buffer = cam->sbuf[i].data;
685 err = usb_submit_urb(cam->sbuf[i].urb, GFP_KERNEL);
700 int cpia2_usb_stream_start(struct camera_data *cam, unsigned int alternate)
705 if(cam->streaming)
708 if (cam->flush) {
711 for(i=0; i<cam->num_frames; ++i) {
712 cam->buffers[i].status = FRAME_EMPTY;
713 cam->buffers[i].length = 0;
715 cam->curbuff = &cam->buffers[0];
716 cam->workbuff = cam->curbuff->next;
717 cam->flush = false;
720 old_alt = cam->params.camera_state.stream_mode;
721 cam->params.camera_state.stream_mode = 0;
722 ret = cpia2_usb_change_streaming_alternate(cam, alternate);
726 cam->params.camera_state.stream_mode = old_alt;
727 ret2 = set_alternate(cam, USBIF_CMDONLY);
735 cam->frame_count = 0;
736 cam->streaming = 1;
737 ret = cpia2_usb_stream_resume(cam);
747 int cpia2_usb_stream_pause(struct camera_data *cam)
750 if(cam->streaming) {
751 ret = set_alternate(cam, USBIF_CMDONLY);
752 free_sbufs(cam);
762 int cpia2_usb_stream_resume(struct camera_data *cam)
765 if(cam->streaming) {
766 cam->first_image_seen = 0;
767 ret = set_alternate(cam, cam->params.camera_state.stream_mode);
769 ret = submit_urbs(cam);
780 int cpia2_usb_stream_stop(struct camera_data *cam)
783 ret = cpia2_usb_stream_pause(cam);
784 cam->streaming = 0;
785 configure_transfer_mode(cam, 0);
800 struct camera_data *cam;
811 if((cam = cpia2_init_camera_struct()) == NULL)
814 cam->dev = udev;
815 cam->iface = interface->bInterfaceNumber;
817 ret = set_alternate(cam, USBIF_CMDONLY);
820 kfree(cam);
824 if ((ret = cpia2_register_camera(cam)) < 0) {
826 kfree(cam);
831 if((ret = cpia2_init_camera(cam)) < 0) {
833 cpia2_unregister_camera(cam);
834 kfree(cam);
838 cam->params.version.firmware_revision_hi,
839 cam->params.version.firmware_revision_lo,
840 cam->params.version.asic_id,
841 cam->params.version.asic_rev);
843 cam->params.pnp_id.vendor,
844 cam->params.pnp_id.product,
845 cam->params.pnp_id.device_revision);
847 cam->params.version.sensor_flags,
848 cam->params.version.sensor_rev);
850 usb_set_intfdata(intf, cam);
862 struct camera_data *cam = usb_get_intfdata(intf);
864 cam->present = 0;
867 cpia2_usb_stream_stop(cam);
870 cpia2_unregister_camera(cam);
872 if(cam->buffers) {
874 cam->curbuff->status = FRAME_READY;
875 cam->curbuff->length = 0;
876 if (waitqueue_active(&cam->wq_stream))
877 wake_up_interruptible(&cam->wq_stream);
883 if (cam->open_count == 0) {
885 kfree(cam);