# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <cassert> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <cstdint> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <map> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <utility> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <vector> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "media/cam_sensor.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "system/camerad/cameras/camera_common.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "system/camerad/sensors/ar0231_registers.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "system/camerad/sensors/ox03c10_registers.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define ANALOG_GAIN_MAX_CNT 55 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  size_t  FRAME_WIDTH  =  1928 ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  size_t  FRAME_HEIGHT  =  1208 ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  size_t  FRAME_STRIDE  =  2896 ;   // for 12 bit output. 1928 * 12 / 8 + 4 (alignment)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  SensorInfo  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  SensorInfo ( )  =  default ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  virtual  std : : vector < i2c_random_wr_payload >  getExposureRegisters ( int  exposure_time ,  int  new_exp_g ,  bool  dc_gain_enabled )  const  {  return  { } ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  virtual  float  getExposureScore ( float  desired_ev ,  int  exp_t ,  int  exp_g_idx ,  float  exp_gain ,  int  gain_idx )  const  { return  0 ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  virtual  int  getSlaveAddress ( int  port )  const  {  assert ( 0 ) ;  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  virtual  void  processRegisters ( CameraState  * c ,  cereal : : FrameData : : Builder  & framed )  const  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  cereal : : FrameData : : ImageSensor  image_sensor  =  cereal : : FrameData : : ImageSensor : : UNKNOWN ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  frame_width ,  frame_height ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  frame_stride ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  frame_offset  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  extra_height  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  registers_offset  =  - 1 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  stats_offset  =  - 1 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  exposure_time_min ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  exposure_time_max ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  dc_gain_factor ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  dc_gain_min_weight ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  dc_gain_max_weight ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  dc_gain_on_grey ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  dc_gain_off_grey ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  sensor_analog_gains [ ANALOG_GAIN_MAX_CNT ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  analog_gain_min_idx ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  analog_gain_max_idx ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  analog_gain_rec_idx ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  analog_gain_cost_delta ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  analog_gain_cost_low ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  analog_gain_cost_high ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  target_grey_factor ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  min_ev ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  max_ev ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  data_word ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  probe_reg_addr ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  probe_expected_data ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : vector < i2c_random_wr_payload >  start_reg_array ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : vector < i2c_random_wr_payload >  init_reg_array ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  in_port_info_dt ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  power_config_val_low ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  AR0231  :  public  SensorInfo  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  AR0231 ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : vector < i2c_random_wr_payload >  getExposureRegisters ( int  exposure_time ,  int  new_exp_g ,  bool  dc_gain_enabled )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  getExposureScore ( float  desired_ev ,  int  exp_t ,  int  exp_g_idx ,  float  exp_gain ,  int  gain_idx )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  getSlaveAddress ( int  port )  const  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  processRegisters ( CameraState  * c ,  cereal : : FrameData : : Builder  & framed )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mutable  std : : map < uint16_t ,  std : : pair < int ,  int > >  ar0231_register_lut ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  OX03C10  :  public  SensorInfo  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  OX03C10 ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : vector < i2c_random_wr_payload >  getExposureRegisters ( int  exposure_time ,  int  new_exp_g ,  bool  dc_gain_enabled )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  getExposureScore ( float  desired_ev ,  int  exp_t ,  int  exp_g_idx ,  float  exp_gain ,  int  gain_idx )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  getSlaveAddress ( int  port )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;