Most of the important features and registers are now documented, however there are still some mysterious registers...
The software support is far from complete, there exists a simple kernel module that sends the isochronous data to user level. All processing and controlling is done in an user level application. There's no Video4Linux-support nor great adjustment options, as this was just a weekend project...
The quick-hack software allows the resolutions 176*144 and 352*288 (the camera's maximum) and works only on 24Bit Displays.
There are apparently two versions, my camera has the Hewlett-Packard/Agilent sensor HDCS1000, there's no datasheet available on their webpage, but I got one from Agilent, Germany. The I2C-address is 0xAA.
The other sensor seems to be the Photobit PB-0100, the datasheet is on Photobit's webpage, the I2C-address is 0xBA. The chip is packaged in a lead-less PLCC case, whereas the HDCS1000 has "gull-wing" pins.
The sensors are controlled via an I2C-bus from the STV0600, which gets the data from the PC.
Both sensors are NOT compatible (hardware and software), so the I2C control stuff in my "driver" works for the HDCS1000-sensor only!
The HDCS1000-sensor is so low-cost, that it even has no exposure control, this has to be done in software. The Photobit sensor has this capability.
SETUP:
40 04 LL HH 00 00 SS SS (DATA)
Writes SSSS bytes of data to register HHLL. SSSS is usually 1 or 2
SETUP:
C0 04 LL HH 00 00 SS SS ->(DATA)
Reads SSSS bytes of data of register HHLL.
The (guessed) meanings of the registers:
| Address | Function |
| 0x0423 | ? |
| 0x1410 | I2C read value |
| 0x1440 | Enable ISO-streaming (1) |
| 0x1443 | Sort of scan rate... |
| 0x1500 | |
| 0x1501 | Value seems to be ignored, but set by Windows |
| 0x1502 | Value seems to be ignored, but set by Windows |
| 0x1503 | ? |
| 0x1504 | ? |
| 0x15c1/0x15c2 | Max. ISO packet size L/H |
| 0x15c3 | Y-Control, 1: 288 lines, 2: 144 lines |
| 0x1680 | X-Control, 0xa: 352 columns, 6: 176 columns |
SETUP:
40 04 00 04 00 00 23 00 (35 Bytes of Data)
DATA:
16 Bytes of I2C-Registers
16 Bytes of Values
(I2C-Address) (Number of values-1) (CMD)
CMD: 01 for I2C-write, 03 for I2C Read
For I2C-Read the lowest bit of the I2C-address has to be set and the read value seems to be located in STV0600-register 0x1410.
The write command allows multiple registers to be written with on control transfer. For accessing the gain and shutter controls this feature is necessary, otherwise the stream gets out of sync...
The (guessed) meanings of the HDCS1000-registers:
| Address | Function |
| 01 | |
| 06 | ? !!!!!!!! |
| 08 | ? -------- |
| 0a | ? m-1-R--- |
| 0c | ? ------x- |
| 10 | ? -------- |
| 12 | ADC precision mask(1-10Bit) ----bbbb |
| 14 | Starty *4, sensor window to be read out |
| 16 | Startx *4 |
| 18 | Height *4 |
| 1a | Width *4 |
| 1c | frame rate/integration time? |
| 1e | Gain Green1 |
| 20 | Gain Red |
| 22 | Gain Blue |
| 24 | Gain Green2 |
| 26 | Shutter L (larger->longer) |
| 28 | Shutter H |
| 2a | Exposure L? |
| 2c | Exposure H? increasing causes "stripes" |
| 2e | ? --mmx-we |
| 30 | ? Enable (4) -----x!! |
| 32 | contrast/colour? !!!!!!!! |
| 34 | ? 0------- |
| 36 | ? ---mm!!! |
| 38 | ? -----!!! |
quickcamex.o: The kernel driver, it depends on USB support (>2.2.14 with USB-Backport or >2.3.99). After insmoding, install the device with "mknod /dev/quick c 180 80". The driver just outputs the data stream to /dev/quick and allows control messages to be sent to the device. Control messages that read are not implemented at the moment. They would be needed to discern the both sensors (I2C-address BA vs. AA).
quickcam: The viewer. Without any option, the resolution is 352*288, with option "1" it displays 176*144. Only 24Bit displays are supported (you guessed it: quick hack ;-)

LINKS:
USB project at the TU München
Main page for Linux-USB
| © Georg Acher, acher@in.tum.de |
Last Update: 2000-09-30
|