You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							106 lines
						
					
					
						
							2.7 KiB
						
					
					
				| #pragma once
 | |
| 
 | |
| #include <atomic>
 | |
| #include <cstdint>
 | |
| #include <memory>
 | |
| 
 | |
| #include "cereal/messaging/messaging.h"
 | |
| #include "cereal/visionipc/visionbuf.h"
 | |
| #include "selfdrive/camerad/cameras/camera_common.h"
 | |
| #include "selfdrive/camerad/imgproc/utils.h"
 | |
| #include "selfdrive/camerad/include/msm_cam_sensor.h"
 | |
| #include "selfdrive/camerad/include/msmb_camera.h"
 | |
| #include "selfdrive/camerad/include/msmb_isp.h"
 | |
| #include "selfdrive/camerad/include/msmb_ispif.h"
 | |
| #include "selfdrive/common/mat.h"
 | |
| #include "selfdrive/common/util.h"
 | |
| 
 | |
| #define FRAME_BUF_COUNT 4
 | |
| #define METADATA_BUF_COUNT 4
 | |
| 
 | |
| #define NUM_FOCUS 8
 | |
| 
 | |
| #define LP3_AF_DAC_DOWN 366
 | |
| #define LP3_AF_DAC_UP 634
 | |
| #define LP3_AF_DAC_M 440
 | |
| #define LP3_AF_DAC_3SIG 52
 | |
| 
 | |
| #define FOCUS_RECOVER_PATIENCE 50 // 2.5 seconds of complete blur
 | |
| #define FOCUS_RECOVER_STEPS 240 // 6 seconds
 | |
| 
 | |
| typedef struct CameraState CameraState;
 | |
| 
 | |
| typedef int (*camera_apply_exposure_func)(CameraState *s, int gain, int integ_lines, uint32_t frame_length);
 | |
| 
 | |
| typedef struct StreamState {
 | |
|   struct msm_isp_buf_request buf_request;
 | |
|   struct msm_vfe_axi_stream_request_cmd stream_req;
 | |
|   struct msm_isp_qbuf_info qbuf_info[FRAME_BUF_COUNT];
 | |
|   VisionBuf *bufs;
 | |
| } StreamState;
 | |
| 
 | |
| typedef struct CameraState {
 | |
|   int camera_num;
 | |
|   int camera_id;
 | |
| 
 | |
|   int fps;
 | |
|   CameraInfo ci;
 | |
| 
 | |
|   unique_fd csid_fd;
 | |
|   unique_fd csiphy_fd;
 | |
|   unique_fd sensor_fd;
 | |
|   unique_fd isp_fd;
 | |
| 
 | |
|   struct msm_vfe_axi_stream_cfg_cmd stream_cfg;
 | |
| 
 | |
|   StreamState ss[3];
 | |
|   CameraBuf buf;
 | |
| 
 | |
|   std::mutex frame_info_lock;
 | |
|   FrameMetadata frame_metadata[METADATA_BUF_COUNT];
 | |
|   int frame_metadata_idx;
 | |
| 
 | |
|   // exposure
 | |
|   uint32_t pixel_clock, line_length_pclk;
 | |
|   uint32_t frame_length;
 | |
|   unsigned int max_gain;
 | |
|   float cur_exposure_frac, cur_gain_frac;
 | |
|   int cur_gain, cur_integ_lines;
 | |
| 
 | |
|   float measured_grey_fraction;
 | |
|   float target_grey_fraction;
 | |
| 
 | |
|   std::atomic<float> digital_gain;
 | |
|   camera_apply_exposure_func apply_exposure;
 | |
| 
 | |
|   // rear camera only,used for focusing
 | |
|   unique_fd actuator_fd;
 | |
|   std::atomic<float> focus_err;
 | |
|   std::atomic<float> lens_true_pos;
 | |
|   std::atomic<int> self_recover; // af recovery counter, neg is patience, pos is active
 | |
|   uint16_t cur_step_pos;
 | |
|   uint16_t cur_lens_pos;
 | |
|   int16_t focus[NUM_FOCUS];
 | |
|   uint8_t confidence[NUM_FOCUS];
 | |
| } CameraState;
 | |
| 
 | |
| 
 | |
| typedef struct MultiCameraState {
 | |
|   unique_fd ispif_fd;
 | |
|   unique_fd msmcfg_fd;
 | |
|   unique_fd v4l_fd;
 | |
|   uint16_t lapres[(ROI_X_MAX-ROI_X_MIN+1)*(ROI_Y_MAX-ROI_Y_MIN+1)];
 | |
| 
 | |
|   VisionBuf focus_bufs[FRAME_BUF_COUNT];
 | |
|   VisionBuf stats_bufs[FRAME_BUF_COUNT];
 | |
| 
 | |
|   CameraState road_cam;
 | |
|   CameraState driver_cam;
 | |
| 
 | |
|   SubMaster *sm;
 | |
|   PubMaster *pm;
 | |
|   LapConv *lap_conv;
 | |
| } MultiCameraState;
 | |
| 
 | |
| void actuator_move(CameraState *s, uint16_t target);
 | |
| int sensor_write_regs(CameraState *s, struct msm_camera_i2c_reg_array* arr, size_t size, int data_type);
 | |
| 
 |