# include  "selfdrive/ui/qt/offroad/developer_panel.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/widgets/ssh_keys.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/widgets/controls.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DeveloperPanel : : DeveloperPanel ( SettingsWindow  * parent )  :  ListWidget ( parent )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  adbToggle  =  new  ParamControl ( " AdbEnabled " ,  tr ( " Enable ADB " ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            tr ( " ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info. " ) ,  " " ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( adbToggle ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // 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 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  experimentalLongitudinalToggle  =  new  ParamControl ( 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " AlphaLongitudinalEnabled " , 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    tr ( " openpilot Longitudinal Control (Alpha) " ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    QString ( " <b>%1</b><br><br>%2 " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      . arg ( tr ( " WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). " ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      . arg ( tr ( " On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control.  " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              " Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. " ) ) , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  experimentalLongitudinalToggle - > setConfirmation ( true ,  false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( experimentalLongitudinalToggle ,  & ParamControl : : toggleFlipped ,  [ = ] ( )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    updateToggles ( offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  addItem ( experimentalLongitudinalToggle ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // 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 ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /*
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  experimentalLongitudinalToggle  should  be  toggelable  when : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  visible ,  and 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  during  onroad  &  offroad  states 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( btn  ! =  experimentalLongitudinalToggle )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      btn - > setEnabled ( _offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // longManeuverToggle and experimentalLongitudinalToggle should not be toggleable if the car does not 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 > ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! CP . getAlphaLongitudinalAvailable ( )  | |  is_release )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      params . remove ( " AlphaLongitudinalEnabled " ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      experimentalLongitudinalToggle - > setEnabled ( false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /*
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  experimentalLongitudinalToggle  should  be  visible  when : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  is  not  a  release  branch ,  and 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  the  car  supports  experimental  longitudinal  control  ( alpha ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    experimentalLongitudinalToggle - > setVisible ( CP . getAlphaLongitudinalAvailable ( )  & &  ! is_release ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    longManeuverToggle - > setEnabled ( hasLongitudinalControl ( CP )  & &  _offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    longManeuverToggle - > setEnabled ( false ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    experimentalLongitudinalToggle - > setVisible ( false ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  experimentalLongitudinalToggle - > refresh ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  offroad  =  _offroad ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DeveloperPanel : : showEvent ( QShowEvent  * event )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  updateToggles ( offroad ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}