# pragma once 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <vector> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "cereal/messaging/messaging.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "common/util.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "selfdrive/modeld/models/commonmodel.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/modeld/runners/run.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define CALIB_LEN 3 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define OUTPUT_SIZE 84 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define REG_SCALE 0.25f 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								typedef  struct  DriverStateResult  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  face_orientation [ 3 ] ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  face_orientation_std [ 3 ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  face_position [ 2 ] ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  face_position_std [ 2 ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  face_prob ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  left_eye_prob ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  right_eye_prob ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  left_blink_prob ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  right_blink_prob ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  sunglasses_prob ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  occluded_prob ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  ready_prob [ 4 ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  not_ready_prob [ 2 ] ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  DriverStateResult ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  DMonitoringModelResult  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  DriverStateResult  driver_state_lhd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  DriverStateResult  driver_state_rhd ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  poor_vision_prob ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  wheel_on_right_prob ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  dsp_execution_time ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  DMonitoringModelResult ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  DMonitoringModelState  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  RunModel  * m ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  float  output [ OUTPUT_SIZE ] ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : vector < uint8_t >  net_input_buf ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  float  calib [ CALIB_LEN ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  DMonitoringModelState ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  dmonitoring_init ( DMonitoringModelState *  s ) ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								DMonitoringModelResult  dmonitoring_eval_frame ( DMonitoringModelState *  s ,  void *  stream_buf ,  int  width ,  int  height ,  int  stride ,  int  uv_offset ,  float  * calib ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  dmonitoring_publish ( PubMaster  & pm ,  uint32_t  frame_id ,  const  DMonitoringModelResult  & model_res ,  float  execution_time ,  kj : : ArrayPtr < const  float >  raw_pred ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  dmonitoring_free ( DMonitoringModelState *  s ) ;