@ -510,6 +510,7 @@ static void ui_update(UIState *s) {
s - > vision_connect_firstrun = false ;
s - > controls_timeout = 6 * UI_FREQ ;
s - > alert_blinking_alpha = 1.0 ;
s - > alert_blinked = false ;
}
@ -853,22 +854,30 @@ int main(int argc, char* argv[]) {
s - > sound . setVolume ( fmin ( MAX_VOLUME , MIN_VOLUME + s - > scene . controls_state . getVEgo ( ) / 5 ) , 5 ) ; // up one notch every 5 m/s
// If car is started and controlsState times out, display an alert
if ( s - > controls_timeout > 0 ) {
s - > controls_timeout - - ;
} else if ( s - > started ) {
if ( ! s - > controls_seen ) {
// car is started, but controlsState hasn't been seen at all
LOGE ( " Controls failed to start " ) ;
s - > scene . alert_text1 = " openpilot Unavailable " ;
s - > scene . alert_text2 = " Controls Failed to Start " ;
s - > scene . alert_size = cereal : : ControlsState : : AlertSize : : MID ;
update_status ( s , STATUS_WARNING ) ;
} else {
if ( s - > started & & s - > controls_seen & & s - > scene . alert_text2 ! = " Controls Unresponsive " ) {
// car is started, but controls is lagging or died
LOGE ( " Controls unresponsive " ) ;
s - > scene . alert_size = cereal : : ControlsState : : AlertSize : : FULL ;
update_status ( s , STATUS_ALERT ) ;
if ( s - > scene . alert_text2 ! = " Controls Unresponsive " ) {
s - > sound . play ( AudibleAlert : : CHIME_WARNING_REPEAT , 3 ) ; // loop sound 3 times
}
s - > scene . alert_text1 = " TAKE CONTROL IMMEDIATELY " ;
s - > scene . alert_text2 = " Controls Unresponsive " ;
ui_draw_vision_alert ( s , s - > scene . alert_size , s - > status , s - > scene . alert_text1 . c_str ( ) , s - > scene . alert_text2 . c_str ( ) ) ;
s - > sound . play ( AudibleAlert : : CHIME_WARNING_REPEAT , 3 ) ; // loop sound 3 times
s - > scene . alert_size = cereal : : ControlsState : : AlertSize : : FULL ;
update_status ( s , STATUS_ALERT ) ;
}
s - > controls_seen = false ;
ui_draw_vision_alert ( s , s - > scene . alert_size , s - > status , s - > scene . alert_text1 . c_str ( ) , s - > scene . alert_text2 . c_str ( ) ) ;
}
read_param_timeout ( & s - > is_metric , " IsMetric " , & s - > is_metric_timeout ) ;