diff --git a/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.cpp b/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.cpp index dc753eb1f9..51965b9a15 100644 --- a/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.cpp +++ b/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.cpp @@ -305,6 +305,13 @@ CamDevice::Lock() } +status_t +CamDevice::PowerOnSensor(bool on) +{ + return B_OK; +} + + ssize_t CamDevice::WriteReg(uint16 address, uint8 *data, size_t count) { @@ -337,6 +344,29 @@ CamDevice::ReadReg(uint16 address, uint8 *data, size_t count, bool cached) } +ssize_t +CamDevice::OrReg8(uint16 address, uint8 data, uint8 mask) +{ + uint8 value; + if (ReadReg(address, &value, 1, true) < 1) + return EIO; + value &= mask; + value |= data; + return WriteReg8(address, value); +} + + +ssize_t +CamDevice::AndReg8(uint16 address, uint8 data) +{ + uint8 value; + if (ReadReg(address, &value, 1, true) < 1) + return EIO; + value &= data; + return WriteReg8(address, value); +} + + /* status_t CamDevice::GetStatusIIC() diff --git a/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.h b/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.h index 483a981362..03da5968e1 100644 --- a/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.h +++ b/src/add-ons/media/media-add-ons/usb_webcam/CamDevice.h @@ -91,11 +91,16 @@ class CamDevice { // sensor chip handling CamSensor* Sensor() const { return fSensor; }; + virtual status_t PowerOnSensor(bool on); + // generic register-like access virtual ssize_t WriteReg(uint16 address, uint8 *data, size_t count=1); virtual ssize_t WriteReg8(uint16 address, uint8 data); virtual ssize_t WriteReg16(uint16 address, uint16 data); virtual ssize_t ReadReg(uint16 address, uint8 *data, size_t count=1, bool cached=false); + + ssize_t OrReg8(uint16 address, uint8 data, uint8 mask=0xff); + ssize_t AndReg8(uint16 address, uint8 data); // I2C-like access //virtual status_t GetStatusIIC();