# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <cstdint> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <map> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <utility> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <media/cam_req_mgr.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "system/camerad/cameras/camera_common.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/util.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define FRAME_BUF_COUNT 4 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  MemoryManager  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void  init ( int  _video0_fd )  {  video0_fd  =  _video0_fd ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void  * alloc ( int  len ,  uint32_t  * handle ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void  free ( void  * ptr ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ~ MemoryManager ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : mutex  lock ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : map < void  * ,  uint32_t >  handle_lookup ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : map < void  * ,  int >  size_lookup ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : map < int ,  std : : queue < void  * >  >  cached_allocations ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  video0_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CameraState  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  MultiCameraState  * multi_cam_state ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  CameraInfo  ci ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  enabled ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : mutex  exp_lock ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  exposure_time ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  dc_gain_enabled ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  analog_gain_frac ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  cur_ev [ 3 ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  min_ev ,  max_ev ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  measured_grey_fraction ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  target_grey_fraction ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  gain_idx ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_fd  sensor_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_fd  csiphy_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  camera_num ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_camera_event ( void  * evdat ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  set_camera_exposure ( float  grey_frac ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  sensors_start ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  camera_open ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  camera_init ( MultiCameraState  * multi_cam_state ,  VisionIpcServer  *  v ,  int  camera_id ,  int  camera_num ,  unsigned  int  fps ,  cl_device_id  device_id ,  cl_context  ctx ,  VisionStreamType  yuv_type ,  bool  enabled ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  camera_close ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : map < uint16_t ,  uint16_t >  ar0231_parse_registers ( uint8_t  * data ,  std : : initializer_list < uint16_t >  addrs ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int32_t  session_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int32_t  sensor_dev_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int32_t  isp_dev_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int32_t  csiphy_dev_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int32_t  link_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  buf0_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  buf_handle [ FRAME_BUF_COUNT ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  sync_objs [ FRAME_BUF_COUNT ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  request_ids [ FRAME_BUF_COUNT ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  request_id_last ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  frame_id_last ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  idx_offset ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  skipped ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  camera_id ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  CameraBuf  buf ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  MemoryManager  mm ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  config_isp ( int  io_mem_handle ,  int  fence ,  int  request_id ,  int  buf0_mem_handle ,  int  buf0_offset ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  enqueue_req_multi ( int  start ,  int  n ,  bool  dp ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  enqueue_buffer ( int  i ,  bool  dp ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  clear_req_queue ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  sensors_init ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  sensors_poke ( int  request_id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  sensors_i2c ( struct  i2c_random_wr_payload *  dat ,  int  len ,  int  op_code ,  bool  data_word ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Register parsing
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : map < uint16_t ,  std : : pair < int ,  int > >  ar0231_register_lut ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : map < uint16_t ,  std : : pair < int ,  int > >  ar0231_build_register_lut ( uint8_t  * data ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  MultiCameraState  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_fd  video0_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_fd  cam_sync_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unique_fd  isp_fd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  device_iommu ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  cdm_iommu ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  CameraState  road_cam ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  CameraState  wide_road_cam ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  CameraState  driver_cam ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  PubMaster  * pm ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  MultiCameraState ;