ax_sensor_struct.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /**********************************************************************************
  2. *
  3. * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Beijing AXera Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Beijing AXera Technology Co., Ltd.
  8. *
  9. **********************************************************************************/
  10. #ifndef _AX_SENSOR_STRUCT_H_
  11. #define _AX_SENSOR_STRUCT_H_
  12. #include "ax_base_type.h"
  13. #include "ax_isp_common.h"
  14. #include "ax_isp_iq_api.h"
  15. #include "ax_isp_3a_struct.h"
  16. typedef AX_S32 SENSOR_DEV;
  17. typedef AX_U8 ISP_PIPE_ID;
  18. #define HDR_MAX_FRAME_NUM (4)
  19. #define ISP_MAX_SNS_REGISTER_NUM (32)
  20. #define SNS_MAX_FRAME_RATE (30)
  21. #define AX_SNS_L_FSOF (0x00)
  22. #define AX_SNS_L_FEOF (0x01)
  23. #define AX_SNS_S_FSOF (0x10)
  24. #define AX_SNS_S_FEOF (0x11)
  25. #define AX_SNS_VS_FSOF (0x20)
  26. #define AX_SNS_VS_FEOF (0x21)
  27. typedef enum _AX_SNS_ADGAIN_MODE_E_ {
  28. AX_AGAIN_ONLY = 0,
  29. AX_ADGAIN_SEPARATION = 1,
  30. AX_ADGAIN_COMBINED = 2,
  31. } AX_SNS_ADGAIN_MODE_E;
  32. typedef enum _AX_SNS_HCGLCG_MODE_E_ {
  33. AX_HCG_MODE = 0,
  34. AX_LCG_MODE = 1,
  35. AX_LCG_NOTSUPPORT_MODE = 2,
  36. } AX_SNS_HCGLCG_MODE_E;
  37. typedef enum _AX_SNS_MASTER_SLAVE_E_ {
  38. AX_SNS_MASTER = 0,
  39. AX_SNS_SLAVE = 1,
  40. } AX_SNS_MASTER_SLAVE_E;
  41. typedef enum _AX_SNS_WITHIN_BEYONDFSC_E_ {
  42. AX_SNS_WITHIN_MODE = 0,
  43. AX_SNS_BEYONDFSC_MODE = 1,
  44. } AX_SNS_WITHIN_BEYONDFSC_E;
  45. typedef struct _AX_SNS_CAP_T_ {
  46. AX_U32 nSnsMode_caps;
  47. AX_U32 nSnsRawType_caps;
  48. AX_U32 nSnsFps_caps;
  49. AX_U32 nSnsResolution_caps;
  50. } AX_SNS_CAP_T;
  51. typedef enum _AX_SNS_CLK_RATE_E_ {
  52. AX_SNS_CLK_NOT_CFG = -1, /* not config, The user completes the configuration himself */
  53. AX_SNS_CLK_24M = 24000000, /* 24MHz, Default value of chip configuration */
  54. AX_SNS_CLK_27M = 27000000, /* 27MHz */
  55. AX_SNS_CLK_37_125M = 37125000, /* 37.125MHz */
  56. AX_SNS_CLK_74_25M = 74250000, /* 74.25MHz */
  57. } AX_SNS_CLK_RATE_E;
  58. typedef enum _AX_SNS_MIRRORFLIP_TYPE_E_{
  59. AX_SNS_MF_NORMAL = 0,
  60. AX_SNS_MF_MIRROR = 1,
  61. AX_SNS_MF_FLIP = 2,
  62. AX_SNS_MF_MIRROR_FLIP = 3,
  63. AX_SNS_MF_BUTT
  64. } AX_SNS_MIRRORFLIP_TYPE_E;
  65. typedef struct _AX_SNS_ATTR_T_ {
  66. AX_U32 nWidth;
  67. AX_U32 nHeight;
  68. AX_U32 nFrameRate; /* 25/30/50/60fps */
  69. AX_SNS_HDR_MODE_E eSnsMode;
  70. AX_RAW_TYPE_E eRawType; /* supported raw type AX_RAW_TYPE_E*/
  71. AX_SNS_HCGLCG_MODE_E eSnsHcgLcg; /* supported hcg/lcg mode AX_SNS_HCGLCG_MODE_E*/
  72. AX_BAYER_PATTERN_E eBayerPattern;
  73. AX_BOOL bTestPatternEnable; /* Active Sensor Test Pattern */
  74. AX_SNS_MASTER_SLAVE_E eMasterSlaveSel;
  75. AX_SNS_WITHIN_BEYONDFSC_E eWithinBeyondfscSel;
  76. } AX_SNS_ATTR_T;
  77. typedef struct _AX_SNS_AE_GAIN_TABLE_T_ {
  78. AX_S32 nAgainTableSize;
  79. AX_F32 *pAgainTable;
  80. AX_S32 nDgainTableSize;
  81. AX_F32 *pDgainTable;
  82. } AX_SNS_AE_GAIN_TABLE_T;
  83. typedef struct _AX_SNS_AE_SLOW_SHUTTER_TBL_T_ {
  84. AX_U32 nMaxIntTime; /* unit : us */
  85. AX_F32 fRealFps;
  86. } AX_SNS_AE_SLOW_SHUTTER_TBL_T;
  87. typedef struct _AX_SNS_AE_SLOW_SHUTTER_PARAM_T_ {
  88. AX_SNS_AE_SLOW_SHUTTER_TBL_T tSlowShutterTbl[SNS_MAX_FRAME_RATE];
  89. AX_F32 fMaxFps;
  90. AX_F32 fMinFps;
  91. AX_S32 nGroupNum;
  92. } AX_SNS_AE_SLOW_SHUTTER_PARAM_T;
  93. typedef struct _AX_SNS_AE_LIMIT_T_ {
  94. AX_F32 nMingain;
  95. AX_F32 nMaxgain;
  96. AX_F32 nMinAgain[HDR_MAX_FRAME_NUM]; /* minimum:0-long analog gain, 1- medium analog gain, 2- short analog gain, 3-*/
  97. AX_F32 nMaxAgain[HDR_MAX_FRAME_NUM]; /* max mum:0-long analog gain, 1- medium analog gain, 2- short analog gain, 3-*/
  98. AX_F32 nMinDgain[HDR_MAX_FRAME_NUM]; /* minimum:0-long digital gain, 1- medium digital gain, 2- short digital gain, 3-*/
  99. AX_F32 nMaxDgain[HDR_MAX_FRAME_NUM]; /* max mum:0-long digital gain, 1- medium digital gain, 2- short digital gain, 3-*/
  100. AX_F32 nMinratio;
  101. AX_F32 nMaxratio;
  102. AX_U32 nInitMinIntegrationTime; /* Initial value ; unit-us */
  103. AX_U32 nInitMaxIntegrationTime; /* Initial value ; unit-us */
  104. AX_U32 nMinIntegrationTime[HDR_MAX_FRAME_NUM]; /* minimum:0-long frame IntegrationTime, 1- medium frame IntegrationTime, 2- short frame IntegrationTime, 3- ; unit-us (U22.10) */
  105. AX_U32 nMaxIntegrationTime[HDR_MAX_FRAME_NUM]; /* max mum:0-long frame IntegrationTime, 1- medium frame IntegrationTime, 2- short frame IntegrationTime, 3- ; unit-us (U22.10) */
  106. } AX_SNS_AE_LIMIT_T;
  107. typedef struct _AX_SNS_AE_PARAM_T_ {
  108. AX_U32 nGainMode; /* AX_SNS_ADGAIN_MODE_E */
  109. /* current ae param */
  110. AX_F32 nCurAGain[HDR_MAX_FRAME_NUM]; /* current analog gain: 0-long frame, 1- medium frame, 2- short frame, 3- */
  111. AX_F32 nCurDGain[HDR_MAX_FRAME_NUM]; /* current digital gain: 0-long frame, 1- medium frame, 2- short frame, 3- */
  112. AX_F32 nCurIspDGain[HDR_MAX_FRAME_NUM]; /* current isp digital gain: 0-long frame, 1- medium frame, 2- short frame, 3- */
  113. AX_U32 nCurIntegrationTime[HDR_MAX_FRAME_NUM]; /* current Integration time: 0-long frame , 1- medium frame, 2- short frame, 3- ; unit-us (U22.10) */
  114. /* ae step param */
  115. AX_F32 nAGainIncrement[HDR_MAX_FRAME_NUM]; /* analog gain step: 0-long frame, 1- medium frame, 2- short frame, 3- */
  116. AX_F32 nDGainIncrement[HDR_MAX_FRAME_NUM]; /* digital gain step: 0-long frame, 1- medium frame, 2- short frame, 3- */
  117. AX_F32 nIspDGainIncrement[HDR_MAX_FRAME_NUM]; /* isp digital gain step: 0-long frame, 1- medium frame, 2- short frame, 3- */
  118. AX_U32 nIntegrationTimeIncrement[HDR_MAX_FRAME_NUM]; /* Integration time step: 0-long frame, 1- medium frame, 2- short frame, 3- ; unit-us (U22.10) */
  119. AX_F32 nCurFps;
  120. AX_F32 nSnsHcgLcgRatio;
  121. AX_F32 nHcgLcgRatio;
  122. AX_F32 nIntegrationTimeOffset[HDR_MAX_FRAME_NUM]; /* Integration time offset unit:line */
  123. } AX_SNS_AE_PARAM_T;
  124. typedef struct _AX_SNS_AE_GAIN_CFG_T_ {
  125. /* gain: 0-long frame, 1- medium frame, 2- short frame, 3-very short frame */
  126. AX_F32 nGain[HDR_MAX_FRAME_NUM];
  127. /* ratio: index=0: longFrame/mediumFrame, index=1: mediumFrame/shortFrame, index=2: shortFrame/veryShortFrame, index=3:Not used */
  128. AX_F32 nHdrRatio[HDR_MAX_FRAME_NUM];
  129. } AX_SNS_AE_GAIN_CFG_T;
  130. typedef struct _AX_SNS_AE_SHUTTER_CFG_T_ {
  131. /* integration time: 0-long frame, 1- medium frame, 2- short frame, 3-very short frame ; unit-us */
  132. AX_U32 nIntTime[HDR_MAX_FRAME_NUM];
  133. /* integration time ratio: index=0: longFrame/mediumFrame, index=1: mediumFrame/shortFrame, index=2: shortFrame/veryShortFrame, index=3:Not used */
  134. AX_F32 nHdrRatio[HDR_MAX_FRAME_NUM];
  135. } AX_SNS_AE_SHUTTER_CFG_T;
  136. typedef struct _AX_SNS_PARAMS_T_ {
  137. AX_SNS_ATTR_T sns_dev_attr;
  138. AX_SNS_AE_LIMIT_T sns_ae_limit;
  139. AX_SNS_AE_PARAM_T sns_ae_param;
  140. } AX_SNS_PARAMS_T;
  141. typedef struct _AX_SNS_ATTR_INFO_T_ {
  142. SENSOR_DEV nSensorId;
  143. } AX_SNS_ATTR_INFO_T;
  144. typedef struct _AX_SNS_BLACK_LEVEL_T_ {
  145. AX_U16 nBlackLevel[AX_ISP_BAYER_CHN_NUM];
  146. } AX_SNS_BLACK_LEVEL_T;
  147. typedef union _AX_SNS_COMMBUS_T_ {
  148. AX_S8 I2cDev;
  149. struct {
  150. AX_S8 bit4SpiDev : 4;
  151. AX_S8 bit4SpiCs : 4;
  152. } SpiDev;
  153. } AX_SNS_COMMBUS_T;
  154. /*
  155. IIC/SPI connection is used between sensor and ISP
  156. */
  157. typedef enum _AX_SNS_CONNECT_TYPE_E_ {
  158. ISP_SNS_CONNECT_I2C_TYPE = 0,
  159. ISP_SNS_CONNECT_SPI_TYPE,
  160. ISP_SNS_CONNECT_TYPE_BUTT,
  161. } AX_SNS_CONNECT_TYPE_E;
  162. typedef struct _AX_SNS_ISP_I2C_DATA_T_ {
  163. AX_BOOL bUpdate; /* AX_TRUE: The sensor registers are written, AX_FALSE: The sensor registers are not written*/
  164. AX_U8 nDelayFrmNum; /* Number of frames for register delay configuration */
  165. AX_U8 nDevAddr; /* sensor device address */
  166. AX_U8 nIntPos; /* Position of the register takes effect, only support AX_SNS_L_FSOF/AX_SNS_S_FSOF */
  167. AX_U8 reserve[1];
  168. AX_U32 nRegAddr; /* register address */
  169. AX_U32 nAddrByteNum; /* Bit width of the register address */
  170. AX_U32 nData; /* Sensor register data */
  171. AX_U32 nDataByteNum; /* Bit width of sensor register data */
  172. } AX_SNS_ISP_I2C_DATA_T;
  173. typedef struct _AX_SNS_ISP_EXP_INFO_T_ {
  174. AX_U32 szExpTime[HDR_MAX_FRAME_NUM]; /* unit:us */
  175. AX_F32 szCurAGain[HDR_MAX_FRAME_NUM];
  176. AX_F32 szCurDGain[HDR_MAX_FRAME_NUM];
  177. AX_U32 szLineGap[HDR_MAX_FRAME_NUM]; /* index0: long frame and medium frame line gap, exposure in unit of rows */
  178. AX_U32 szLineGapTime[HDR_MAX_FRAME_NUM]; /* szLineGap * nLinePeriod (us) */
  179. AX_U32 nDelayNum; /* max(exptime,gain) register take effect delay frame num */
  180. } AX_SNS_ISP_EXP_INFO_T;
  181. typedef struct _AX_SNS_REGS_CFG_TABLE_T_ {
  182. AX_BOOL bConfig;
  183. AX_SNS_CONNECT_TYPE_E eSnsType;
  184. /*Number of registers requiring timing control. The member value cannot be dynamically changed*/
  185. AX_U32 nRegNum;
  186. AX_SNS_COMMBUS_T tComBus;
  187. AX_SNS_ISP_I2C_DATA_T sztI2cData[ISP_MAX_SNS_REGISTER_NUM];
  188. AX_SNS_ISP_EXP_INFO_T tSnsExpInfo;
  189. } AX_SNS_REGS_CFG_TABLE_T;
  190. typedef struct _AX_SENSOR_DEFAULT_PARAM_T_ {
  191. AX_ISP_IQ_DPC_PARAM_T *ptDpc;
  192. AX_ISP_IQ_BLC_PARAM_T *ptBlc;
  193. AX_ISP_IQ_DS_PARAM_T *ptDarkshading;
  194. AX_ISP_IQ_FPN_PARAM_T *ptFpn;
  195. AX_ISP_IQ_GBL_PARAM_T *ptGbl;
  196. AX_ISP_IQ_NPU_PARAM_T *ptNpu;
  197. AX_ISP_IQ_WNR_PARAM_T *ptWnr;
  198. AX_ISP_IQ_EIS_PARAM_T *ptEis;
  199. AX_ISP_IQ_CAC_PARAM_T *ptCac;
  200. AX_ISP_IQ_LSC_PARAM_T *ptLsc;
  201. AX_ISP_IQ_WB_GAIN_PARAM_T *ptWbGain;
  202. AX_ISP_IQ_RLTM_PARAM_T *ptRltm;
  203. AX_ISP_IQ_DEHAZE_PARAM_T *ptDehaze;
  204. AX_ISP_IQ_DEMOSAIC_PARAM_T *ptDemosaic;
  205. AX_ISP_IQ_CLC_PARAM_T *ptClc;
  206. AX_ISP_IQ_PFR_PARAM_T *ptPfr;
  207. AX_ISP_IQ_GAMMA_PARAM_T *ptGamma;
  208. AX_ISP_IQ_YUV_CSC0_PARAM_T *ptCsc0;
  209. AX_ISP_IQ_YUV_CSC1_PARAM_T *ptCsc1;
  210. AX_ISP_IQ_SHARPEN_PARAM_T *ptSharpen;
  211. AX_ISP_IQ_CSET_PARAM_T *ptCset;
  212. AX_ISP_IQ_LUMA_NR_PARAM_T *ptLumaNr;
  213. AX_ISP_IQ_YCPROC_PARAM_T *ptYcproc;
  214. AX_ISP_IQ_CHROMA_NR_PARAM_T *ptChromaNr;
  215. AX_ISP_IQ_YCRT_PARAM_T *ptYcrt;
  216. AX_ISP_IQ_AE_PARAM_T *ptAeDftParam;
  217. AX_ISP_IQ_AWB_PARAM_T *ptAwbDftParam;
  218. } AX_SENSOR_DEFAULT_PARAM_T;
  219. typedef struct _AX_SENSOR_REGISTER_FUNC_T_ {
  220. /* sensor ctrl */
  221. AX_S32(*pfn_sensor_chipid)(ISP_PIPE_ID nPipeId, int *pSnsChipId);
  222. AX_S32(*pfn_sensor_reset)(ISP_PIPE_ID nPipeId);
  223. AX_VOID(*pfn_sensor_init)(ISP_PIPE_ID nPipeId);
  224. AX_VOID(*pfn_sensor_exit)(ISP_PIPE_ID nPipeId);
  225. AX_S32(*pfn_sensor_streaming_ctrl)(ISP_PIPE_ID nPipeId, AX_U32 on);
  226. AX_S32(*pfn_sensor_set_mode)(ISP_PIPE_ID nPipeId, AX_SNS_ATTR_T *ptSnsMode);
  227. AX_S32(*pfn_sensor_get_mode)(ISP_PIPE_ID nPipeId, AX_SNS_ATTR_T *ptSnsMode);
  228. AX_S32(*pfn_sensor_set_wdr_mode)(ISP_PIPE_ID nPipeId, AX_SNS_HDR_MODE_E eHdrMode);
  229. AX_S32(*pfn_sensor_get_capability)(ISP_PIPE_ID nPipeId, AX_SNS_CAP_T *ptCap);
  230. AX_S32(*pfn_sensor_testpattern)(ISP_PIPE_ID nPipeId, AX_U32 nTestpatternEn);
  231. AX_S32(*pfn_sensor_mirror_flip)(ISP_PIPE_ID nPipeId, AX_SNS_MIRRORFLIP_TYPE_E eSnsMirrorFlip);
  232. /* sensor read/write */
  233. AX_S32(*pfn_sensor_set_bus_info)(ISP_PIPE_ID nPipeId, AX_SNS_COMMBUS_T tSnsBusInfo);
  234. AX_S32(*pfn_sensor_write_register)(ISP_PIPE_ID nPipeId, AX_U32 nAddr, AX_U32 nData);
  235. AX_S32(*pfn_sensor_read_register)(ISP_PIPE_ID nPipeId, AX_U32 nAddr);
  236. /* module default parameters */
  237. AX_S32(*pfn_sensor_get_default_params)(ISP_PIPE_ID nPipeId, AX_SENSOR_DEFAULT_PARAM_T *ptDftParam);
  238. AX_S32(*pfn_sensor_get_isp_black_level)(ISP_PIPE_ID nPipeId, AX_SNS_BLACK_LEVEL_T *ptBlackLevel);
  239. /* ae ctrl */
  240. AX_S32(*pfn_sensor_set_params)(ISP_PIPE_ID nPipeId, AX_SNS_PARAMS_T *ptSnsParam);
  241. AX_S32(*pfn_sensor_get_params)(ISP_PIPE_ID nPipeId, AX_SNS_PARAMS_T *ptSnsParam);
  242. AX_S32(*pfn_sensor_get_gain_table)(ISP_PIPE_ID nPipeId, AX_SNS_AE_GAIN_TABLE_T *ptSnsGainTbl);
  243. AX_S32(*pfn_sensor_set_again)(ISP_PIPE_ID nPipeId, AX_SNS_AE_GAIN_CFG_T *ptAnalogGainTbl);
  244. AX_S32(*pfn_sensor_get_again)(ISP_PIPE_ID nPipeId, AX_SNS_AE_GAIN_CFG_T *ptAnalogGainTbl);
  245. AX_S32(*pfn_sensor_set_dgain)(ISP_PIPE_ID nPipeId, AX_SNS_AE_GAIN_CFG_T *ptDigitalGainTbl);
  246. AX_S32(*pfn_sensor_get_dgain)(ISP_PIPE_ID nPipeId, AX_SNS_AE_GAIN_CFG_T *ptDigitalGainTbl);
  247. AX_S32(*pfn_sensor_set_integration_time)(ISP_PIPE_ID nPipeId, AX_SNS_AE_SHUTTER_CFG_T *ptIntTimeTbl);
  248. AX_S32(*pfn_sensor_get_integration_time)(ISP_PIPE_ID nPipeId, AX_SNS_AE_SHUTTER_CFG_T *ptIntTimeTbl);
  249. AX_S32(*pfn_sensor_hcglcg_ctrl)(ISP_PIPE_ID nPipeId, AX_U32 nSnsHcgLcg);
  250. AX_S32(*pfn_sensor_set_fps)(ISP_PIPE_ID nPipeId, AX_F32 nFps, AX_SNS_PARAMS_T *ptSnsParam);
  251. AX_S32(*pfn_sensor_get_slow_shutter_param)(ISP_PIPE_ID nPipeId, AX_SNS_AE_SLOW_SHUTTER_PARAM_T *ptSlowShutterParam);
  252. AX_S32(*pfn_sensor_get_sns_reg_info)(ISP_PIPE_ID nPipeId, AX_SNS_REGS_CFG_TABLE_T *ptSnsRegsInfo);
  253. AX_S32(*pfn_sensor_get_temperature_info)(ISP_PIPE_ID nPipeId, AX_S32 *nTemperature);
  254. } AX_SENSOR_REGISTER_FUNC_T;
  255. #endif //_AX_SENSOR_STRUCT_H_