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