11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef __HI_SNS_CTRL_H__ 171bd4fe43Sopenharmony_ci#define __HI_SNS_CTRL_H__ 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include "hi_type.h" 201bd4fe43Sopenharmony_ci#include "hi_comm_3a.h" 211bd4fe43Sopenharmony_ci#include "hi_debug.h" 221bd4fe43Sopenharmony_ci 231bd4fe43Sopenharmony_ci#ifdef __cplusplus 241bd4fe43Sopenharmony_ci#if __cplusplus 251bd4fe43Sopenharmony_ciextern "C" { 261bd4fe43Sopenharmony_ci#endif 271bd4fe43Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 281bd4fe43Sopenharmony_ci 291bd4fe43Sopenharmony_ci#define ISP_SNS_SAVE_INFO_MAX 2 301bd4fe43Sopenharmony_citypedef struct hiISP_SNS_STATE_S { 311bd4fe43Sopenharmony_ci HI_BOOL bInit; /* HI_TRUE: Sensor init */ 321bd4fe43Sopenharmony_ci HI_BOOL bSyncInit; /* HI_TRUE: Sync Reg init */ 331bd4fe43Sopenharmony_ci HI_U8 u8ImgMode; 341bd4fe43Sopenharmony_ci HI_U8 u8Hdr; /* HI_TRUE: HDR enbale */ 351bd4fe43Sopenharmony_ci WDR_MODE_E enWDRMode; 361bd4fe43Sopenharmony_ci 371bd4fe43Sopenharmony_ci ISP_SNS_REGS_INFO_S astRegsInfo[ISP_SNS_SAVE_INFO_MAX]; /* [0]: Sensor reg info of cur-frame; 381bd4fe43Sopenharmony_ci [1]: Sensor reg info of pre-frame */ 391bd4fe43Sopenharmony_ci 401bd4fe43Sopenharmony_ci HI_U32 au32FL[ISP_SNS_SAVE_INFO_MAX]; /* [0]: FullLines of cur-frame; 411bd4fe43Sopenharmony_ci [1]: Pre FullLines of pre-frame */ 421bd4fe43Sopenharmony_ci HI_U32 u32FLStd; /* FullLines std */ 431bd4fe43Sopenharmony_ci HI_U32 au32WDRIntTime[WDR_MAX_FRAME_NUM]; 441bd4fe43Sopenharmony_ci HI_U32 au32SensorWBGain[ISP_BAYER_CHN_NUM]; 451bd4fe43Sopenharmony_ci} ISP_SNS_STATE_S; 461bd4fe43Sopenharmony_ci 471bd4fe43Sopenharmony_citypedef enum hiISP_SNS_MIRRORFLIP_TYPE_E { 481bd4fe43Sopenharmony_ci ISP_SNS_NORMAL = 0, 491bd4fe43Sopenharmony_ci ISP_SNS_MIRROR = 1, 501bd4fe43Sopenharmony_ci ISP_SNS_FLIP = 2, 511bd4fe43Sopenharmony_ci ISP_SNS_MIRROR_FLIP = 3, 521bd4fe43Sopenharmony_ci ISP_SNS_BUTT 531bd4fe43Sopenharmony_ci} ISP_SNS_MIRRORFLIP_TYPE_E; 541bd4fe43Sopenharmony_ci 551bd4fe43Sopenharmony_citypedef struct hiISP_SNS_BUS_EX_S { 561bd4fe43Sopenharmony_ci char bus_addr; 571bd4fe43Sopenharmony_ci} ISP_SNS_BUS_EX_S; 581bd4fe43Sopenharmony_ci 591bd4fe43Sopenharmony_citypedef struct hiISP_SNS_OBJ_S { 601bd4fe43Sopenharmony_ci HI_S32 (*pfnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *pstAeLib, ALG_LIB_S *pstAwbLib); 611bd4fe43Sopenharmony_ci HI_S32 (*pfnUnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *pstAeLib, ALG_LIB_S *pstAwbLib); 621bd4fe43Sopenharmony_ci HI_S32 (*pfnSetBusInfo)(VI_PIPE ViPipe, ISP_SNS_COMMBUS_U unSNSBusInfo); 631bd4fe43Sopenharmony_ci HI_S32 (*pfnSetBusExInfo)(VI_PIPE ViPipe, ISP_SNS_BUS_EX_S *pstSerdesInfo); 641bd4fe43Sopenharmony_ci HI_VOID (*pfnStandby)(VI_PIPE ViPipe); 651bd4fe43Sopenharmony_ci HI_VOID (*pfnRestart)(VI_PIPE ViPipe); 661bd4fe43Sopenharmony_ci HI_VOID (*pfnMirrorFlip)(VI_PIPE ViPipe, ISP_SNS_MIRRORFLIP_TYPE_E eSnsMirrorFlip); 671bd4fe43Sopenharmony_ci HI_S32 (*pfnWriteReg)(VI_PIPE ViPipe, HI_U32 s32Addr, HI_U32 s32Data); 681bd4fe43Sopenharmony_ci HI_S32 (*pfnReadReg)(VI_PIPE ViPipe, HI_U32 s32Addr); 691bd4fe43Sopenharmony_ci HI_S32 (*pfnSetInit)(VI_PIPE ViPipe, ISP_INIT_ATTR_S *pstInitAttr); 701bd4fe43Sopenharmony_ci} ISP_SNS_OBJ_S; 711bd4fe43Sopenharmony_ci 721bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsMn34220Obj; 731bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx377Obj; 741bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx299Obj; 751bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx477Obj; 761bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx299SlvsObj; 771bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx290Obj; 781bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx327Obj; 791bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx327_2l_Obj; 801bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx334Obj; 811bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOV2718Obj; 821bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOV2775Obj; 831bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsAr0237Obj; 841bd4fe43Sopenharmony_ci 851bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsCmv50000Obj; 861bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx277SlvsObj; 871bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx117Obj; 881bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx290SlaveObj; 891bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx334SlaveObj; 901bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx226Obj; 911bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx390Obj; 921bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx335Obj; 931bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx307Obj; 941bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx307_2l_Obj; 951bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_sns_imx307_2l_obj; 961bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_stSnsImx307_2l_Slave_Obj; 971bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx458Obj; 981bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSc4236Obj; 991bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSc4210Obj; 1001bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSc2231Obj; 1011bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSc2235Obj; 1021bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSc3235Obj; 1031bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOs04b10_2lObj; 1041bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSoiF37Obj; 1051bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOs05aObj; 1061bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOS08A10Obj; 1071bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOs05a_2lObj; 1081bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsGc2053Obj; 1091bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSharp8kObj; 1101bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOv12870Obj; 1111bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsGc2053ForCarObj; 1121bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsImx415Obj; 1131bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsSp2305Obj; 1141bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsOv9284Obj; 1151bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_stSnsPs5260_2l_Obj; 1161bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_sns_imx390_obj; 1171bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_sns_q03_obj; 1181bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S g_sns_sc500ai_obj; 1191bd4fe43Sopenharmony_ciextern ISP_SNS_OBJ_S stSnsK17Obj; 1201bd4fe43Sopenharmony_ci 1211bd4fe43Sopenharmony_ci#define CMOS_SLAVE_CHECK_DEV(dev) \ 1221bd4fe43Sopenharmony_ci do { \ 1231bd4fe43Sopenharmony_ci if (((dev) < 0) || ((dev) >= CAP_SLAVE_MAX_NUM)) { \ 1241bd4fe43Sopenharmony_ci HI_ERR_TRACE(HI_ID_ISP, "Err slave dev %d!\n", dev); \ 1251bd4fe43Sopenharmony_ci return HI_ERR_ISP_ILLEGAL_PARAM; \ 1261bd4fe43Sopenharmony_ci } \ 1271bd4fe43Sopenharmony_ci } while (0) 1281bd4fe43Sopenharmony_ci 1291bd4fe43Sopenharmony_ci#define CMOS_CHECK_POINTER(ptr) \ 1301bd4fe43Sopenharmony_ci do { \ 1311bd4fe43Sopenharmony_ci if ((ptr) == HI_NULL) { \ 1321bd4fe43Sopenharmony_ci HI_ERR_TRACE(HI_ID_ISP, "Null Pointer!\n"); \ 1331bd4fe43Sopenharmony_ci return HI_ERR_ISP_NULL_PTR; \ 1341bd4fe43Sopenharmony_ci } \ 1351bd4fe43Sopenharmony_ci } while (0) 1361bd4fe43Sopenharmony_ci 1371bd4fe43Sopenharmony_ci#define CMOS_CHECK_POINTER_VOID(ptr) \ 1381bd4fe43Sopenharmony_ci do { \ 1391bd4fe43Sopenharmony_ci if ((ptr) == HI_NULL) { \ 1401bd4fe43Sopenharmony_ci HI_ERR_TRACE(HI_ID_ISP, "Null Pointer!\n"); \ 1411bd4fe43Sopenharmony_ci return; \ 1421bd4fe43Sopenharmony_ci } \ 1431bd4fe43Sopenharmony_ci } while (0) 1441bd4fe43Sopenharmony_ci 1451bd4fe43Sopenharmony_ci#define SENSOR_FREE(ptr) \ 1461bd4fe43Sopenharmony_ci do { \ 1471bd4fe43Sopenharmony_ci if ((ptr) != HI_NULL) { \ 1481bd4fe43Sopenharmony_ci free(ptr); \ 1491bd4fe43Sopenharmony_ci (ptr) = HI_NULL; \ 1501bd4fe43Sopenharmony_ci } \ 1511bd4fe43Sopenharmony_ci } while (0) 1521bd4fe43Sopenharmony_ci 1531bd4fe43Sopenharmony_ci#define SNS_ERR_TRACE(fmt, ...) \ 1541bd4fe43Sopenharmony_ci do { \ 1551bd4fe43Sopenharmony_ci HI_ERR_TRACE(HI_ID_ISP, "[Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ 1561bd4fe43Sopenharmony_ci } while (0) 1571bd4fe43Sopenharmony_ci 1581bd4fe43Sopenharmony_ci#define SNS_DIV_0_TO_1(a) (((a) == 0) ? 1 : (a)) 1591bd4fe43Sopenharmony_ci#define SNS_DIV_0_TO_1_FLOAT(a) ((((a) < 1E-10) && ((a) > (-1E-10))) ? 1 : (a)) 1601bd4fe43Sopenharmony_ci#ifdef __cplusplus 1611bd4fe43Sopenharmony_ci#if __cplusplus 1621bd4fe43Sopenharmony_ci} 1631bd4fe43Sopenharmony_ci#endif 1641bd4fe43Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 1651bd4fe43Sopenharmony_ci 1661bd4fe43Sopenharmony_ci#endif /* __HI_SNS_CTRL_H__ */ 167