xref: /haiku/src/add-ons/media/media-add-ons/usb_webcam/CamSensor.h (revision a486abdce0e5725976184dd2752d42caa432fbb3)
12c9bd703SFrançois Revol #ifndef _CAM_SENSOR_H
22c9bd703SFrançois Revol #define _CAM_SENSOR_H
32c9bd703SFrançois Revol 
42c9bd703SFrançois Revol #include "CamDevice.h"
52c9bd703SFrançois Revol #include <Rect.h>
62c9bd703SFrançois Revol 
72c9bd703SFrançois Revol // This class represents the camera's (cmos or whatever) sensor chip
82c9bd703SFrançois Revol class CamSensor
92c9bd703SFrançois Revol {
102c9bd703SFrançois Revol 	public:
112c9bd703SFrançois Revol 						CamSensor(CamDevice *_camera);
122c9bd703SFrançois Revol 	virtual				~CamSensor();
132c9bd703SFrançois Revol 
142c9bd703SFrançois Revol 	virtual status_t	InitCheck();
152c9bd703SFrançois Revol 
162c9bd703SFrançois Revol 	virtual status_t	Setup();
172c9bd703SFrançois Revol 
182c9bd703SFrançois Revol 	virtual const char*	Name();
192c9bd703SFrançois Revol 
202c9bd703SFrançois Revol 	virtual status_t	StartTransfer();
212c9bd703SFrançois Revol 	virtual status_t	StopTransfer();
222c9bd703SFrançois Revol 	virtual bool		TransferEnabled() const { return fTransferEnabled; };
232c9bd703SFrançois Revol 
242c9bd703SFrançois Revol 	virtual bool		Use400kHz() const { return false; };
252c9bd703SFrançois Revol 	virtual bool		UseRealIIC() const { return true; };
262c9bd703SFrançois Revol 	virtual uint8		IICReadAddress() const { return 0; };
272c9bd703SFrançois Revol 	virtual uint8		IICWriteAddress() const { return 0; };;
282c9bd703SFrançois Revol 	virtual int			MaxWidth() const { return -1; };
292c9bd703SFrançois Revol 	virtual int			MaxHeight() const { return -1; };
302c9bd703SFrançois Revol 
312c9bd703SFrançois Revol 
322c9bd703SFrançois Revol 	virtual status_t	SetVideoFrame(BRect rect);
332c9bd703SFrançois Revol 	virtual BRect		VideoFrame() const { return fVideoFrame; };
342c9bd703SFrançois Revol 	virtual status_t	SetVideoParams(float brightness, float contrast, float hue, float red, float green, float blue);
352c9bd703SFrançois Revol 
36*a486abdcSFrançois Revol 	virtual void		AddParameters(BParameterGroup *group, int32 &index);
37*a486abdcSFrançois Revol 	virtual status_t	GetParameterValue(int32 id, bigtime_t *last_change, void *value, size_t *size);
38*a486abdcSFrançois Revol 	virtual status_t	SetParameterValue(int32 id, bigtime_t when, const void *value, size_t size);
39*a486abdcSFrançois Revol 
402c9bd703SFrançois Revol 	CamDevice			*Device();
412c9bd703SFrançois Revol 
422c9bd703SFrançois Revol #if 0
432c9bd703SFrançois Revol 	// generic register-like access
442c9bd703SFrançois Revol 	virtual status_t	WriteReg(uint16 address, uint8 *data, size_t count=1);
452c9bd703SFrançois Revol 	virtual status_t	WriteReg8(uint16 address, uint8 data);
462c9bd703SFrançois Revol 	virtual status_t	WriteReg16(uint16 address, uint16 data);
472c9bd703SFrançois Revol 	virtual status_t	ReadReg(uint16 address, uint8 *data, size_t count=1, bool cached=false);
482c9bd703SFrançois Revol 
492c9bd703SFrançois Revol 	// I2C-like access
502c9bd703SFrançois Revol 	virtual status_t	WriteIIC(uint8 address, uint8 *data, size_t count=1);
512c9bd703SFrançois Revol 	virtual status_t	ReadIIC(uint8 address, uint8 *data);
522c9bd703SFrançois Revol #endif
532c9bd703SFrançois Revol 	protected:
542c9bd703SFrançois Revol 		status_t		fInitStatus;
552c9bd703SFrançois Revol 		bool			fTransferEnabled;
562c9bd703SFrançois Revol 		BRect			fVideoFrame;
57*a486abdcSFrançois Revol 		int32			fFirstParameterID;
58*a486abdcSFrançois Revol 		bigtime_t		fLastParameterChanges;
592c9bd703SFrançois Revol 	private:
602c9bd703SFrançois Revol 		CamDevice		*fCamDevice;
612c9bd703SFrançois Revol };
622c9bd703SFrançois Revol 
632c9bd703SFrançois Revol // internal modules
642c9bd703SFrançois Revol #define B_WEBCAM_DECLARE_SENSOR(sensorclass,sensorname) \
652c9bd703SFrançois Revol extern "C" CamSensor *Instantiate##sensorclass(CamDevice *cam); \
662c9bd703SFrançois Revol CamSensor *Instantiate##sensorclass(CamDevice *cam) \
672c9bd703SFrançois Revol { return new sensorclass(cam); };
682c9bd703SFrançois Revol 
692c9bd703SFrançois Revol 
702c9bd703SFrançois Revol #endif /* _CAM_SENSOR_H */
71