blob: 9fc420d893fe591d6e8d68448c5c51d8108c0d65 [file] [log] [blame]
/*
* Copyright (C) 2017-2018 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef CAMERA3_HAL_SENSORHWOP_H_
#define CAMERA3_HAL_SENSORHWOP_H_
#include <memory>
#include <map>
#include "cros-camera/v4l2_device.h"
#include "UtilityMacros.h"
#include "utils/Errors.h"
namespace cros {
namespace intel {
// Base class for operation which might be different based on kernel driver
class SensorHwOp {
public:
SensorHwOp(std::shared_ptr<cros::V4L2Subdevice> pixelArraySubdev);
virtual ~SensorHwOp();
virtual int updateMembers();
virtual int getSensorOutputSize(int &width, int &height, int &code);
virtual int getPixelRate(int &pixel_rate);
virtual int getLinkFreq(int &bus_freq);
virtual int getPixelClock(int64_t &pixel_clock);
virtual int setExposure(int coarse_exposure, int fine_exposure);
virtual int getExposure(int &coarse_exposure, int &fine_exposure);
virtual int getExposureRange(int &exposure_min, int &exposure_max,
int &exposure_step);
virtual int setGains(int analog_gain, int digital_gain);
virtual int getGains(int &analog_gain, int &digital_gain);
virtual status_t setFrameDuration(unsigned int Xsetting,
unsigned int Ysetting);
virtual status_t getMinimumFrameDuration(unsigned int &Xsetting,
unsigned int &Ysetting);
virtual int getVBlank(unsigned int &vblank);
virtual int getHBlank(unsigned int &vhlank);
virtual int getAperture(int &aperture);
virtual int updateFrameTimings();
virtual int setSensorFT(int width, int height);
virtual int getTestPattern(int *mode);
virtual int setTestPattern(int mode);
virtual int createDiscreteDgMap(bool *use_discrete_digital_gain);
virtual void getDiscreteDg(unsigned short *digital_gain,
unsigned short *digital_gain_idx);
protected:
virtual status_t getActivePixelArraySize(int &width, int &height,
int &code);
protected:
std::shared_ptr<cros::V4L2Subdevice> pPixelArraySubdev;
int pPixelRate;
int pHorzBlank;
int pVertBlank;
int pCropWidth;
int pCropHeight;
int pSensorFTWidth;
int pSensorFTHeight;
bool pHBlankReadOnly;
bool pVBlankReadOnly;
bool pUseDiscreteDG;
std::map<int64_t, uint32_t> pDgMap;
}; //class SensorHwOpBase
} // namespace intel
} // namespace cros
#endif