# include  <QDebug> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/offroad/developer_panel.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/widgets/ssh_keys.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/widgets/controls.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "common/util.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DeveloperPanel : : DeveloperPanel ( SettingsWindow  * parent )  :  ListWidget ( parent )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // SSH keys
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( new  SshToggle ( ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( new  SshControl ( ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  joystickToggle  =  new  ParamControl ( " JoystickDebugMode " ,  tr ( " Joystick Debug Mode " ) ,  " " ,  " " ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( joystickToggle ,  & ParamControl : : toggleFlipped ,  [ = ] ( bool  state )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    params . putBool ( " LongitudinalManeuverMode " ,  false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    longManeuverToggle - > refresh ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( joystickToggle ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  longManeuverToggle  =  new  ParamControl ( " LongitudinalManeuverMode " ,  tr ( " Longitudinal Maneuver Mode " ) ,  " " ,  " " ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( longManeuverToggle ,  & ParamControl : : toggleFlipped ,  [ = ] ( bool  state )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    params . putBool ( " JoystickDebugMode " ,  false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    joystickToggle - > refresh ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( longManeuverToggle ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Joystick and longitudinal maneuvers should be hidden on release branches
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  is_release  =  params . getBool ( " IsReleaseBranch " ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Toggles should be not available to change in onroad state
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( uiState ( ) ,  & UIState : : offroadTransition ,  this ,  & DeveloperPanel : : updateToggles ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DeveloperPanel : : updateToggles ( bool  _offroad )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  ( auto  btn  :  findChildren < ParamControl  * > ( ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    btn - > setVisible ( ! is_release ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    btn - > setEnabled ( _offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // longManeuverToggle should not be toggleable if the car don't have longitudinal control
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  auto  cp_bytes  =  params . get ( " CarParamsPersistent " ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! cp_bytes . empty ( ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    AlignedBuffer  aligned_buf ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    capnp : : FlatArrayMessageReader  cmsg ( aligned_buf . align ( cp_bytes . data ( ) ,  cp_bytes . size ( ) ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cereal : : CarParams : : Reader  CP  =  cmsg . getRoot < cereal : : CarParams > ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    longManeuverToggle - > setEnabled ( hasLongitudinalControl ( CP )  & &  _offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    longManeuverToggle - > setEnabled ( false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  offroad  =  _offroad ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DeveloperPanel : : showEvent ( QShowEvent  * event )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  updateToggles ( offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}