/* 
 | 
 *  Copyright (c) 2021 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 __AEC_UAPI_HEAD_H__ 
 | 
#define __AEC_UAPI_HEAD_H__ 
 | 
  
 | 
#include "aec_head.h" 
 | 
#include "ae/rk_aiq_types_ae_hw.h" 
 | 
#include "rk_aiq_comm.h" 
 | 
  
 | 
#define MAX_HDR_FRAMENUM (3) 
 | 
#define RAWAEBIG_SUBWIN_NUM 4 
 | 
#define RAWAEBIG_WIN_NUM 225 
 | 
  
 | 
#define ISP2_RAWAE_WINNUM_MAX  ((RAWAELITE_WIN_NUM > RAWAEBIG_WIN_NUM) ? RAWAELITE_WIN_NUM : RAWAEBIG_WIN_NUM) 
 | 
#define ISP2_HIST_BINNUM_MAX  ((RAWHIST_BIN_N_MAX > SIHIST_BIN_N_MAX) ? RAWHIST_BIN_N_MAX : SIHIST_BIN_N_MAX) 
 | 
  
 | 
typedef struct Aec_AeRange_uapi_s { 
 | 
    float Min; 
 | 
    float Max; 
 | 
} Aec_AeRange_uapi_t; 
 | 
  
 | 
typedef struct Aec_LinAeRange_uapi_s { 
 | 
    Aec_AeRange_uapi_t stExpTimeRange; 
 | 
    Aec_AeRange_uapi_t stGainRange; 
 | 
    Aec_AeRange_uapi_t stIspDGainRange; 
 | 
    Aec_AeRange_uapi_t stPIrisRange; 
 | 
} Aec_LinAeRange_uapi_t; 
 | 
  
 | 
typedef struct Aec_HdrAeRange_uapi_s { 
 | 
    Aec_AeRange_uapi_t stExpTimeRange[3]; 
 | 
    Aec_AeRange_uapi_t stGainRange[3]; 
 | 
    Aec_AeRange_uapi_t stIspDGainRange[3]; 
 | 
    Aec_AeRange_uapi_t stPIrisRange; 
 | 
} Aec_HdrAeRange_uapi_t; 
 | 
  
 | 
typedef struct Uapi_AeAttrV2_uapi_s { 
 | 
    CalibDb_AeSpeedV2_t stAeSpeed; 
 | 
    // DelayFrmNum 
 | 
    uint8_t BlackDelayFrame; 
 | 
    uint8_t WhiteDelayFrame; 
 | 
    // Auto/Fixed fps 
 | 
    CalibDb_AeFrmRateAttrV2_t stFrmRate; 
 | 
    CalibDb_AntiFlickerAttrV2_t stAntiFlicker; 
 | 
    // auto range 
 | 
    Aec_LinAeRange_uapi_t LinAeRange; // result LinAerange 
 | 
    Aec_HdrAeRange_uapi_t HdrAeRange; // result HdrAerange 
 | 
} Uapi_AeAttrV2_uapi_t; 
 | 
  
 | 
// manual exposure 
 | 
typedef struct Uapi_LinMeAttrV2_uapi_s { 
 | 
    // M4_BOOL_DESC("ManualTimeEn", "1") 
 | 
    bool ManualTimeEn; 
 | 
    // M4_BOOL_DESC("ManualGainEn", "1") 
 | 
    bool ManualGainEn; 
 | 
    // M4_BOOL_DESC("ManualIspDgainEn", "1") 
 | 
    bool ManualIspDgainEn; 
 | 
    // M4_NUMBER_DESC("TimeValue", "f32", M4_RANGE(0,1), "0.003", M4_DIGIT(6),M4_HIDE(0)) 
 | 
    float TimeValue; // unit: s = 10^6 us 
 | 
    // M4_NUMBER_DESC("GainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) 
 | 
    float GainValue; 
 | 
    // M4_NUMBER_DESC("IspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) 
 | 
    float IspDGainValue; 
 | 
} Uapi_LinMeAttrV2_uapi_t; 
 | 
  
 | 
typedef struct Uapi_HdrMeAttrV2_uapi_s { 
 | 
    // M4_BOOL_DESC("ManualTimeEn", "1") 
 | 
    bool ManualTimeEn; 
 | 
    // M4_BOOL_DESC("ManualGainEn", "1") 
 | 
    bool ManualGainEn; 
 | 
    // M4_BOOL_DESC("ManualIspDgainEn", "1") 
 | 
    bool ManualIspDgainEn; 
 | 
    // M4_ARRAY_DESC("TimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.003", M4_DIGIT(6), M4_DYNAMIC(0)) 
 | 
    float TimeValue[MAX_HDR_FRAMENUM]; 
 | 
    // M4_ARRAY_DESC("GainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 
 | 
    float GainValue[MAX_HDR_FRAMENUM]; 
 | 
    // M4_ARRAY_DESC("IspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 
 | 
    float IspDGainValue[MAX_HDR_FRAMENUM]; 
 | 
} Uapi_HdrMeAttrV2_uapi_t; 
 | 
  
 | 
typedef struct Uapi_MeAttrV2_uapi_s { 
 | 
    // M4_STRUCT_DESC("LinearAE", "normal_ui_style") 
 | 
    Uapi_LinMeAttrV2_uapi_t LinearAE; 
 | 
  
 | 
    // M4_STRUCT_DESC("HdrAE", "normal_ui_style") 
 | 
    Uapi_HdrMeAttrV2_uapi_t HdrAE; 
 | 
} Uapi_MeAttrV2_uapi_t; 
 | 
  
 | 
typedef struct Aec_uapi_advanced_attr_uapi_s { 
 | 
    bool enable; 
 | 
    uint8_t GridWeights[15 * 15]; 
 | 
    uint8_t DayGridWeights[RAWAEBIG_WIN_NUM]; 
 | 
    uint8_t NightGridWeights[RAWAEBIG_WIN_NUM]; 
 | 
    bool SetAeRangeEn; 
 | 
    Aec_LinAeRange_uapi_t SetLinAeRange; 
 | 
    Aec_HdrAeRange_uapi_t SetHdrAeRange; 
 | 
} Aec_uapi_advanced_attr_uapi_t; 
 | 
  
 | 
typedef struct __uapi_expsw_attr_uapi_s { 
 | 
    uint8_t Enable; 
 | 
    CalibDb_CamRawStatsModeV2_t RawStatsMode; 
 | 
    CalibDb_CamHistStatsModeV2_t HistStatsMode; 
 | 
    CalibDb_CamYRangeModeV2_t YRangeMode; 
 | 
    uint8_t AecRunInterval; 
 | 
  
 | 
    // M4_ENUM_DESC("OPMode", "RKAiqOPMode_uapi_t","RK_AIQ_OP_MODE_AUTO") 
 | 
    RKAiqOPMode_t AecOpType; 
 | 
    Cam15x15UCharMatrix_t GridWeights; 
 | 
    Uapi_AeAttrV2_uapi_t stAuto; 
 | 
  
 | 
    // M4_STRUCT_DESC("ManualCtrl", "normal_ui_style") 
 | 
    Uapi_MeAttrV2_uapi_t stManual; 
 | 
  
 | 
    Aec_uapi_advanced_attr_uapi_t stAdvanced; 
 | 
} uapi_expsw_attr_t; 
 | 
  
 | 
typedef struct uapi_expinfo { 
 | 
    // M4_BOOL_DESC("IsConverged", "0",M4_HIDE(1)) 
 | 
    bool              IsConverged; 
 | 
    // M4_BOOL_DESC("IsExpMax", "0",M4_HIDE(1)) 
 | 
    bool              IsExpMax; 
 | 
    // M4_NUMBER_DESC("LumaDeviation", "f32", M4_RANGE(-256,256), "0.0", M4_DIGIT(3),M4_HIDE(1)) 
 | 
    float             LumaDeviation; 
 | 
    // M4_ARRAY_DESC("HdrLumaDeviation", "f32", M4_SIZE(1,3), M4_RANGE(-256,256), "0.0", M4_DIGIT(3), M4_DYNAMIC(0), M4_HIDE(1)) 
 | 
    float             HdrLumaDeviation[3]; 
 | 
    // M4_NUMBER_DESC("MeanLuma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) 
 | 
    float             MeanLuma; 
 | 
    // M4_ARRAY_DESC("HdrMeanLuma", "f32", M4_SIZE(1,3), M4_RANGE(0,256), "0.0", M4_DIGIT(2), M4_DYNAMIC(0)) 
 | 
    float             HdrMeanLuma[3]; 
 | 
    // M4_NUMBER_DESC("GlobalEnvLux", "f32", M4_RANGE(0,65535), "0.0", M4_DIGIT(2),M4_HIDE(1)) 
 | 
    float             GlobalEnvLux; 
 | 
    // M4_ARRAY_DESC("BlockEnvLux", "f32", M4_SIZE(15,15), M4_RANGE(0,65535), "0.0", M4_DIGIT(2), M4_DYNAMIC(0), M4_HIDE(1)) 
 | 
    float             BlockEnvLux[ISP2_RAWAE_WINNUM_MAX]; 
 | 
    // M4_STRUCT_DESC("CurExpInfo", "normal_ui_style"); 
 | 
    RKAiqAecExpInfo_t CurExpInfo; 
 | 
  
 | 
    // M4_NUMBER_DESC("Piris", "u16", M4_RANGE(0,1024), "0", M4_DIGIT(0),M4_HIDE(1)) 
 | 
    unsigned short    Piris; 
 | 
  
 | 
    // M4_NUMBER_DESC("LinePeriodsPerField", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) 
 | 
    float             LinePeriodsPerField; 
 | 
  
 | 
    // M4_NUMBER_DESC("PixelPeriodsPerLine", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) 
 | 
    float             PixelPeriodsPerLine; 
 | 
  
 | 
    // M4_NUMBER_DESC("PixelClockFreqMHZ", "f32", M4_RANGE(0,4096), "0", M4_DIGIT(2),M4_HIDE(1)) 
 | 
    float             PixelClockFreqMHZ; 
 | 
} uapi_expinfo_t; 
 | 
  
 | 
#endif /*__AEC_UAPI_HEAD_H__*/ 
 |