# 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 ) ;
}