/* 
 | 
 *  Copyright (c) 2019 Rockchip 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 _CAM_HW_BASE_H_ 
 | 
#define _CAM_HW_BASE_H_ 
 | 
  
 | 
//#include <map> 
 | 
#include <string> 
 | 
#include "xcam_thread.h" 
 | 
#include "ICamHw.h" 
 | 
#include "v4l2_device.h" 
 | 
#include "fake_v4l2_device.h" 
 | 
#include "poll_thread.h" 
 | 
#ifndef RK_SIMULATOR_HW 
 | 
#include "FlashLight.h" 
 | 
#endif 
 | 
  
 | 
using namespace XCam; 
 | 
  
 | 
namespace RkCam { 
 | 
  
 | 
class CamHwBase 
 | 
    : public ICamHw 
 | 
    , public PollCallback { 
 | 
public: 
 | 
    explicit CamHwBase(); 
 | 
    virtual ~CamHwBase(); 
 | 
    // from ICamHw 
 | 
    virtual XCamReturn init(const char* sns_ent_name); 
 | 
    virtual XCamReturn deInit(); 
 | 
    virtual void setCalib(const CamCalibDbContext_t* calib) { 
 | 
        mCalibDb = calib; 
 | 
    } 
 | 
    virtual void setCalib(const CamCalibDbV2Context_t* calibv2) { 
 | 
        mCalibDbV2 = calibv2; 
 | 
    } 
 | 
    virtual XCamReturn prepare(uint32_t width, uint32_t height, int mode, int t_dealy, int g_delay); 
 | 
    virtual XCamReturn start(); 
 | 
    virtual XCamReturn stop(); 
 | 
    virtual XCamReturn pause(); 
 | 
    virtual XCamReturn resume(); 
 | 
    virtual XCamReturn swWorkingModeDyn(int mode) { 
 | 
        return XCAM_RETURN_NO_ERROR; 
 | 
    }; 
 | 
    virtual void keepHwStAtStop(bool ks) { 
 | 
        mKpHwSt = ks; 
 | 
    }; 
 | 
    virtual XCamReturn getSensorModeData(const char* sns_ent_name, 
 | 
                                         rk_aiq_exposure_sensor_descriptor& sns_des); 
 | 
    virtual XCamReturn setHwResListener(HwResListener* resListener); 
 | 
    virtual XCamReturn setHdrProcessCount(rk_aiq_luma_params_t luma_params) { 
 | 
        return XCAM_RETURN_ERROR_FAILED; 
 | 
    }; 
 | 
    virtual XCamReturn applyAnalyzerResult(SmartPtr<SharedItemBase> base, bool sync) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    }; 
 | 
    virtual XCamReturn applyAnalyzerResult(cam3aResultList& list) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    // from PollCallback 
 | 
    virtual XCamReturn poll_buffer_ready (SmartPtr<VideoBuffer> &buf, int type); 
 | 
    virtual XCamReturn poll_buffer_failed (int64_t timestamp, const char *msg); 
 | 
    virtual XCamReturn poll_event_ready (uint32_t sequence, int type); 
 | 
    virtual XCamReturn poll_event_failed (int64_t timestamp, const char *msg); 
 | 
    virtual XCamReturn poll_buffer_ready (SmartPtr<VideoBuffer> &buf); 
 | 
    virtual XCamReturn poll_buffer_ready (SmartPtr<V4l2BufferProxy> &buf, int dev_index) { return XCAM_RETURN_ERROR_FAILED; }; 
 | 
  
 | 
    virtual XCamReturn notify_capture_raw() { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn capture_raw_ctl(capture_raw_t type, int count = 0, 
 | 
                                       const char* capture_dir = nullptr, \ 
 | 
                                       char* output_dir = nullptr) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn enqueueRawBuffer(void *vbuf, bool sync) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn enqueueRawFile(const char *path) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn registRawdataCb(void (*callback)(void *)) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn rawdataPrepare(rk_aiq_raw_prop_t prop) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn setSensorFlip(bool mirror, bool flip, int skip_frm_cnt) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn getSensorFlip(bool& mirror, bool& flip) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn getZoomPosition(int& position) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn setLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn getLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn FocusCorrection() { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual XCamReturn ZoomCorrection() { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual void getShareMemOps(isp_drv_share_mem_ops_t** mem_ops) {}; 
 | 
    virtual XCamReturn getEffectiveIspParams(rkisp_effect_params_v20& ispParams, int frame_id) { 
 | 
        return  XCAM_RETURN_ERROR_FAILED; 
 | 
    }; 
 | 
    uint64_t getIspModuleEnState() { 
 | 
        return true; 
 | 
    }; 
 | 
    virtual XCamReturn setIspStreamMode(rk_isp_stream_mode_t mode) { 
 | 
        return XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
    virtual rk_isp_stream_mode_t getIspStreamMode() { 
 | 
        return RK_ISP_STREAM_MODE_INVALID; 
 | 
    } 
 | 
    HwResListener* mHwResLintener; 
 | 
protected: 
 | 
    SmartPtr<V4l2Device> mIsppFecParamsDev; 
 | 
    SmartPtr<V4l2Device> mIspLumaDev; 
 | 
    SmartPtr<V4l2Device> mIspStatsDev; 
 | 
    SmartPtr<V4l2Device> mIspParamsDev; 
 | 
    SmartPtr<V4l2SubDevice> mIspCoreDev; 
 | 
    SmartPtr<V4l2SubDevice> mSensorDev; 
 | 
    SmartPtr<V4l2SubDevice> mLensDev; 
 | 
    SmartPtr<V4l2SubDevice> mIrcutDev; 
 | 
    SmartPtr<V4l2Device> mIspSpDev; 
 | 
#ifndef RK_SIMULATOR_HW 
 | 
    SmartPtr<FlashLightHw> mFlashLight; 
 | 
    SmartPtr<FlashLightHw> mFlashLightIr; 
 | 
#endif 
 | 
    int mWorkingMode; 
 | 
    const CamCalibDbContext_t* mCalibDb; 
 | 
    const CamCalibDbV2Context_t* mCalibDbV2; 
 | 
    bool mKpHwSt; 
 | 
private: 
 | 
    XCAM_DEAD_COPY (CamHwBase); 
 | 
}; 
 | 
  
 | 
}; //namespace RkCam 
 | 
  
 | 
#endif 
 |