xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/FlashLight.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *  Copyright (c) 2019 Rockchip Corporation
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun  * You may obtain a copy of the License at
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun  * limitations under the License.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifndef _FLASH_LIGHT_H_
19*4882a593Smuzhiyun #define _FLASH_LIGHT_H_
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #include "v4l2_device.h"
22*4882a593Smuzhiyun #include "rk_aiq_types.h"
23*4882a593Smuzhiyun #include <string>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun using namespace XCam;
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun namespace RkCam {
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define FLASH_MAX_NUM 2
30*4882a593Smuzhiyun #define FL_SUBM (0x8)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun class FlashLightHw {
33*4882a593Smuzhiyun public:
34*4882a593Smuzhiyun     explicit FlashLightHw(std::string name[], int num);
35*4882a593Smuzhiyun     virtual ~FlashLightHw();
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun     XCamReturn init(int active_num);
38*4882a593Smuzhiyun     XCamReturn deinit();
39*4882a593Smuzhiyun     XCamReturn start();
keep_status(bool ks)40*4882a593Smuzhiyun     void keep_status(bool ks) {
41*4882a593Smuzhiyun         _keep_status = ks;
42*4882a593Smuzhiyun     };
43*4882a593Smuzhiyun     XCamReturn stop();
isStrengthAdj()44*4882a593Smuzhiyun     bool isStrengthAdj() {
45*4882a593Smuzhiyun         return  _v4l_flash_info[0].fl_strth_adj_enable || _v4l_flash_info[0].tc_strth_adj_enable;}
46*4882a593Smuzhiyun     XCamReturn set_params(rk_aiq_flash_setting_t& flash_settings);
47*4882a593Smuzhiyun     XCamReturn get_status (rk_aiq_flash_setting_t& flash_settings, uint32_t frame_id = -1);
48*4882a593Smuzhiyun private:
49*4882a593Smuzhiyun     int get_flash_info ();
50*4882a593Smuzhiyun     XCamReturn v4l_set_params(int fl_mode, float fl_intensity[], int fl_timeout, int fl_on);
51*4882a593Smuzhiyun private:
52*4882a593Smuzhiyun     XCAM_DEAD_COPY (FlashLightHw);
53*4882a593Smuzhiyun     int _dev_num;
54*4882a593Smuzhiyun     int _active_fl_num;
55*4882a593Smuzhiyun     SmartPtr<V4l2SubDevice> _fl_device[FLASH_MAX_NUM];
56*4882a593Smuzhiyun     rk_aiq_flash_setting_t _flash_settings;
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun     enum RK_AIQ_V4L_FLASH_QUERY_TYPE_E {
59*4882a593Smuzhiyun        RK_AIQ_V4L_FLASH_QUERY_TYPE_E_MIN,
60*4882a593Smuzhiyun        RK_AIQ_V4L_FLASH_QUERY_TYPE_E_MAX,
61*4882a593Smuzhiyun        RK_AIQ_V4L_FLASH_QUERY_TYPE_E_DEFAULT,
62*4882a593Smuzhiyun        RK_AIQ_V4L_FLASH_QUERY_TYPE_E_STEP,
63*4882a593Smuzhiyun        RK_AIQ_V4L_FLASH_QUERY_TYPE_E_LAST,
64*4882a593Smuzhiyun     };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun     struct rk_aiq_v4l_flash_info_s {
67*4882a593Smuzhiyun       // [min, max, default, step]
68*4882a593Smuzhiyun       int torch_power_info[RK_AIQ_V4L_FLASH_QUERY_TYPE_E_LAST];
69*4882a593Smuzhiyun       int flash_power_info[RK_AIQ_V4L_FLASH_QUERY_TYPE_E_LAST];
70*4882a593Smuzhiyun       bool fl_strth_adj_enable;
71*4882a593Smuzhiyun       bool tc_strth_adj_enable;
72*4882a593Smuzhiyun     };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun     struct rk_aiq_v4l_flash_info_s _v4l_flash_info[FLASH_MAX_NUM];
75*4882a593Smuzhiyun     bool _keep_status;
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun } //namespace RkCam
79*4882a593Smuzhiyun #endif // _FLASH_LIGHT_H_
80