c-qcam - Connectix Color QuickCam video4linux kernel driver

Copyright (C) 1999  Dave Forrest  <drf5n@virginia.edu>
		    released under GNU GPL.

1999-12-08 Dave Forrest, written with kernel version 2.2.12 in mind


Table of Contents

1.0 Introduction
2.0 Compilation, Installation, and Configuration
3.0 Troubleshooting
4.0 Future Work / current work arounds
9.0 Sample Program, v4lgrab
10.0 Other Information


1.0 Introduction

  The file ../../drivers/media/video/c-qcam.c is a device driver for
the Logitech (nee Connectix) parallel port interface color CCD camera.
This is a fairly inexpensive device for capturing images.  Logitech
does not currently provide information for developers, but many people
have engineered several solutions for non-Microsoft use of the Color
Quickcam.

1.1 Motivation

  I spent a number of hours trying to get my camera to work, and I
hope this document saves you some time.  My camera will not work with
the 2.2.13 kernel as distributed, but with a few patches to the
module, I was able to grab some frames. See 4.0, Future Work.



2.0 Compilation, Installation, and Configuration

  The c-qcam depends on parallel port support, video4linux, and the
Color Quickcam.  It is also nice to have the parallel port readback
support enabled. I enabled these as modules during the kernel
configuration.  The appropriate flags are:

    CONFIG_PRINTER       M    for lp.o, parport.o parport_pc.o modules
    CONFIG_PNP_PARPORT   M for autoprobe.o IEEE1284 readback module
    CONFIG_PRINTER_READBACK M for parport_probe.o IEEE1284 readback module
    CONFIG_VIDEO_DEV     M    for videodev.o video4linux module
    CONFIG_VIDEO_CQCAM   M    for c-qcam.o  Color Quickcam module

  With these flags, the kernel should compile and install the modules.
To record and monitor the compilation, I use:

 (make zlilo ; \
  make modules; \
  make modules_install ;
  depmod -a ) &>log &
 less log  # then a capital 'F' to watch the progress

But that is my personal preference.

2.2 Configuration

  The configuration requires module configuration and device
configuration.  The following sections detail these procedures.


2.1 Module Configuration

  Using modules requires a bit of work to install and pass the
parameters.  Understand that entries in /etc/modprobe.d/*.conf of:

   alias parport_lowlevel parport_pc
   options parport_pc io=0x378 irq=none
   alias char-major-81 videodev
   alias char-major-81-0 c-qcam

2.2 Device Configuration

  At this point, we need to ensure that the device files exist.
Video4linux used the /dev/video* files, and we want to attach the
Quickcam to one of these.

   ls -lad /dev/video*  # should produce a list of the video devices

If the video devices do not exist, you can create them with:

  su
  cd /dev
  for ii in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
    mknod video$ii c 81 $ii   # char-major-81-[0-16]
    chown root.root video$ii  # owned by root
    chmod 600 video$ii        # read/writable by root only
  done

  Lots of people connect video0 to video and bttv, but you might want
your c-qcam to mean something more:

   ln -s video0 c-qcam  # make /dev/c-qcam a working file
   ln -s c-qcam video   # make /dev/c-qcam your default video source

  But these are conveniences.  The important part is to make the proper
special character files with the right major and minor numbers.  All
of the special device files are listed in ../devices.txt.  If you
would like the c-qcam readable by non-root users, you will need to
change the permissions.

3.0 Troubleshooting

  If the sample program below, v4lgrab, gives you output then
everything is working.

    v4lgrab | wc # should give you a count of characters

  Otherwise, you have some problem.

  The c-qcam is IEEE1284 compatible, so if you are using the proc file
system (CONFIG_PROC_FS), the parallel printer support
(CONFIG_PRINTER), the IEEE 1284 system,(CONFIG_PRINTER_READBACK), you
should be able to read some identification from your quickcam with

	 modprobe -v parport
	 modprobe -v parport_probe
	 cat /proc/parport/PORTNUMBER/autoprobe
Returns:
  CLASS:MEDIA;
  MODEL:Color QuickCam 2.0;
  MANUFACTURER:Connectix;

  A good response to this indicates that your color quickcam is alive
and well.  A common problem is that the current driver does not
reliably detect a c-qcam, even though one is attached.  In this case,

     modprobe -v c-qcam
or
     insmod -v c-qcam

  Returns a message saying "Device or resource busy"  Development is
currently underway, but a workaround is to patch the module to skip
the detection code and attach to a defined port.  Check the
video4linux mailing list and archive for more current information.

3.1 Checklist:

  Can you get an image?
	    v4lgrab >qcam.ppm ; wc qcam.ppm ; xv qcam.ppm

  Is a working c-qcam connected to the port?
	    grep ^ /proc/parport/?/autoprobe

  Do the /dev/video* files exist?
	    ls -lad /dev/video

  Is the c-qcam module loaded?
	    modprobe -v c-qcam ; lsmod

  Does the camera work with alternate programs? cqcam, etc?




4.0 Future Work / current workarounds

  It is hoped that this section will soon become obsolete, but if it
isn't, you might try patching the c-qcam module to add a parport=xxx
option as in the bw-qcam module so you can specify the parallel port:

       insmod -v c-qcam parport=0

And bypass the detection code, see ../../drivers/char/c-qcam.c and
look for the 'qc_detect' code and call.

  Note that there is work in progress to change the video4linux API,
this work is documented at the video4linux2 site listed below.


9.0 --- A sample program using v4lgrabber,

v4lgrab is a simple image grabber that will copy a frame from the
first video device, /dev/video0 to standard output in portable pixmap
format (.ppm)  To produce .jpg output, you can use it like this:
'v4lgrab | convert - c-qcam.jpg'


10.0 --- Other Information

Use the ../../Maintainers file, particularly the  VIDEO FOR LINUX and PARALLEL
PORT SUPPORT sections

The video4linux page:
  http://linuxtv.org

The V4L2 API spec:
  http://v4l2spec.bytesex.org/

Some web pages about the quickcams:
   http://www.pingouin-land.com/howto/QuickCam-HOWTO.html

   http://www.crynwr.com/qcpc/            QuickCam Third-Party Drivers
   http://www.crynwr.com/qcpc/re.html     Some Reverse Engineering
   http://www.wirelesscouch.net/software/gqcam/   v4l client
   http://phobos.illtel.denver.co.us/pub/qcread/ doesn't use v4l
   ftp://ftp.cs.unm.edu/pub/chris/quickcam/   Has lots of drivers
   http://www.cs.duke.edu/~reynolds/quickcam/ Has lots of information


