@ -121,7 +121,7 @@ class DriverBlink(): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . right_blink  =  0.   
					 
					 
					 
					    self . right_blink  =  0.   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					class  DriverStatus ( ) :  
					 
					 
					 
					class  DriverStatus ( ) :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  __init__ ( self ,  rhd_saved = False ,  settings = None ) :   
					 
					 
					 
					  def  __init__ ( self ,  rhd_saved = False ,  settings = None ,  always_on = False ) :   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    if  settings  is  None :   
					 
					 
					 
					    if  settings  is  None :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      settings  =  DRIVER_MONITOR_SETTINGS ( )   
					 
					 
					 
					      settings  =  DRIVER_MONITOR_SETTINGS ( )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # init policy settings   
					 
					 
					 
					    # init policy settings   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -139,6 +139,7 @@ class DriverStatus(): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . ee1_calibrated  =  False   
					 
					 
					 
					    self . ee1_calibrated  =  False   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . ee2_calibrated  =  False   
					 
					 
					 
					    self . ee2_calibrated  =  False   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . always_on  =  always_on   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . awareness  =  1.   
					 
					 
					 
					    self . awareness  =  1.   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . awareness_active  =  1.   
					 
					 
					 
					    self . awareness_active  =  1.   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . awareness_passive  =  1.   
					 
					 
					 
					    self . awareness_passive  =  1.   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -301,8 +302,12 @@ class DriverStatus(): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    elif  self . face_detected  and  self . pose . low_std :   
					 
					 
					 
					    elif  self . face_detected  and  self . pose . low_std :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . hi_stds  =  0   
					 
					 
					 
					      self . hi_stds  =  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  update_events ( self ,  events ,  driver_engaged ,  ctrl_active ,  standstill ) :   
					 
					 
					 
					  def  update_events ( self ,  events ,  driver_engaged ,  ctrl_active ,  standstill ,  wrong_gear ) :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( driver_engaged  and  self . awareness  >  0  and  not  self . active_monitoring_mode )  or  not  ctrl_active :  # reset only when on disengagement if red reached   
					 
					 
					 
					    always_on_valid  =  self . always_on  and  not  wrong_gear   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( driver_engaged  and  self . awareness  >  0  and  not  self . active_monitoring_mode )  or  \  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       ( not  always_on_valid  and  not  ctrl_active )  or  \  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       ( always_on_valid  and  not  ctrl_active  and  self . awareness  < =  0 ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # always reset on disengage with normal mode; disengage resets only on red if always on   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . _reset_awareness ( )   
					 
					 
					 
					      self . _reset_awareness ( )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      return   
					 
					 
					 
					      return   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -323,11 +328,13 @@ class DriverStatus(): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return   
					 
					 
					 
					        return   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    standstill_exemption  =  standstill  and  self . awareness  -  self . step_change  < =  self . threshold_prompt   
					 
					 
					 
					    standstill_exemption  =  standstill  and  self . awareness  -  self . step_change  < =  self . threshold_prompt   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    always_on_red_exemption  =  always_on_valid  and  not  ctrl_active  and  self . awareness  -  self . step_change  < =  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    certainly_distracted  =  self . driver_distraction_filter . x  >  0.63  and  self . driver_distracted  and  self . face_detected   
					 
					 
					 
					    certainly_distracted  =  self . driver_distraction_filter . x  >  0.63  and  self . driver_distracted  and  self . face_detected   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    maybe_distracted  =  self . hi_stds  >  self . settings . _HI_STD_FALLBACK_TIME  or  not  self . face_detected   
					 
					 
					 
					    maybe_distracted  =  self . hi_stds  >  self . settings . _HI_STD_FALLBACK_TIME  or  not  self . face_detected   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  certainly_distracted  or  maybe_distracted :   
					 
					 
					 
					    if  certainly_distracted  or  maybe_distracted :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # should always be counting if distracted unless at standstill and reaching orange   
					 
					 
					 
					      # should always be counting if distracted unless at standstill and reaching orange   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  not  standstill_exemption :   
					 
					 
					 
					      # also will not be reaching 0 if DM is active when not engaged   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  not  standstill_exemption  and  not  always_on_red_exemption :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        self . awareness  =  max ( self . awareness  -  self . step_change ,  - 0.1 )   
					 
					 
					 
					        self . awareness  =  max ( self . awareness  -  self . step_change ,  - 0.1 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    alert  =  None   
					 
					 
					 
					    alert  =  None