2 * Copyright 2004-2008, François Revol, <revol@free.fr>.
3 * Distributed under the terms of the MIT License.
5 #ifndef _NW80X_CAM_DEVICE_H
6 #define _NW80X_CAM_DEVICE_H
10 #define STV_REG_COUNT 0x0c
11 // Control registers of the STV0600 ASIC
12 #define STV_I2C_WRITE 0x400
13 #define STV_I2C_WRITE1 0x400
14 #define STV_I2C_READ 0x1410
15 #define STV_ISO_ENABLE 0x1440
16 #define STV_SCAN_RATE 0x1443
17 #define STV_ISO_SIZE 0x15c1
18 #define STV_Y_CTRL 0x15c3
19 #define STV_X_CTRL 0x1680
20 #define STV_REG00 0x1500
21 #define STV_REG01 0x1501
22 #define STV_REG02 0x1502
23 #define STV_REG03 0x1503
24 #define STV_REG04 0x1504
25 #define STV_REG23 0x0423
28 // This class represents each webcam
29 class NW80xCamDevice
: public CamDevice
{
31 NW80xCamDevice(CamDeviceAddon
&_addon
, BUSBDevice
* _device
);
33 virtual bool SupportsBulk();
34 virtual bool SupportsIsochronous();
35 virtual status_t
StartTransfer();
36 virtual status_t
StopTransfer();
38 // generic register-like access
39 virtual ssize_t
WriteReg(uint16 address
, uint8
*data
, size_t count
=1);
40 virtual ssize_t
ReadReg(uint16 address
, uint8
*data
, size_t count
=1, bool cached
=false);
43 virtual status_t
GetStatusIIC();
44 virtual status_t
WaitReadyIIC();
45 virtual ssize_t
WriteIIC(uint8 address
, uint8
*data
, size_t count
=1);
46 virtual ssize_t
ReadIIC(uint8 address
, uint8
*data
);
47 virtual ssize_t
ReadIIC8(uint8 address
, uint8
*data
);
48 virtual ssize_t
ReadIIC16(uint8 address
, uint16
*data
);
49 virtual status_t
SetIICBitsMode(size_t bits
=8);
52 virtual status_t
SendCommand(uint8 dir
, uint8 request
, uint16 value
,
53 uint16 index
, uint16 length
, void* data
);
56 // the addon itself, that instanciate
58 class NW80xCamDeviceAddon
: public CamDeviceAddon
61 NW80xCamDeviceAddon(WebCamMediaAddOn
* webcam
);
62 virtual ~NW80xCamDeviceAddon();
64 virtual const char *BrandName();
65 virtual NW80xCamDevice
*Instantiate(CamRoster
&roster
, BUSBDevice
*from
);
69 #endif /* _NW80X_CAM_CAM_DEVICE_H */