@ -180,8 +180,10 @@ static void update_sockets(UIState *s) {
}
if ( sm . updated ( " driverMonitoringState " ) ) {
scene . dmonitoring_state = sm [ " driverMonitoringState " ] . getDriverMonitoringState ( ) ;
scene . frontview = ! s - > ignition ;
} else if ( scene . frontview & & ( sm . frame - sm . rcv_frame ( " driverMonitoringState " ) ) > UI_FREQ / 2 ) {
if ( ! s - > scene . frontview & & ! s - > ignition ) {
read_param ( & s - > scene . frontview , " IsDriverViewEnabled " ) ;
}
} else if ( ( sm . frame - sm . rcv_frame ( " driverMonitoringState " ) ) > UI_FREQ / 2 ) {
scene . frontview = false ;
}
if ( sm . updated ( " sensorEvents " ) ) {
@ -195,11 +197,10 @@ static void update_sockets(UIState *s) {
}
}
}
s - > started = s - > scene . thermal . getStarted ( ) | | s - > scene . frontview ;
}
static void update_alert ( UIState * s ) {
if ( ! s - > started | | s - > scene . frontview ) return ;
UIScene & scene = s - > scene ;
if ( s - > sm - > updated ( " controlsState " ) ) {
auto alert_sound = scene . controls_state . getAlertSound ( ) ;
@ -218,7 +219,7 @@ static void update_alert(UIState *s) {
}
// Handle controls timeout
if ( ( s - > sm - > frame - s - > started_frame ) > 10 * UI_FREQ ) {
if ( s - > scene . thermal . getStarted ( ) & & ( s - > sm - > frame - s - > started_frame ) > 10 * UI_FREQ ) {
const uint64_t cs_frame = s - > sm - > rcv_frame ( " controlsState " ) ;
if ( cs_frame < s - > started_frame ) {
// car is started, but controlsState hasn't been seen at all
@ -256,8 +257,6 @@ static void update_params(UIState *s) {
static void update_vision ( UIState * s ) {
if ( ! s - > vipc_client - > connected & & s - > started ) {
s - > vipc_client = s - > scene . frontview ? s - > vipc_client_front : s - > vipc_client_rear ;
if ( s - > vipc_client - > connect ( false ) ) {
ui_init_vision ( s ) ;
}
@ -272,8 +271,6 @@ static void update_vision(UIState *s) {
}
static void update_status ( UIState * s ) {
s - > started = s - > scene . thermal . getStarted ( ) | | s - > scene . frontview ;
if ( s - > started & & s - > sm - > updated ( " controlsState " ) ) {
auto alert_status = s - > scene . controls_state . getAlertStatus ( ) ;
if ( alert_status = = cereal : : ControlsState : : AlertStatus : : USER_PROMPT ) {
@ -286,27 +283,32 @@ static void update_status(UIState *s) {
}
// Handle onroad/offroad transition
if ( ! s - > started & & s - > status ! = STATUS_OFFROAD ) {
s - > status = STATUS_OFFROAD ;
s - > active_app = cereal : : UiLayoutState : : App : : HOME ;
s - > sidebar_collapsed = false ;
s - > sound - > stop ( ) ;
s - > vipc_client - > connected = false ;
} else if ( s - > started & & s - > status = = STATUS_OFFROAD ) {
s - > status = STATUS_DISENGAGED ;
s - > started_frame = s - > sm - > frame ;
read_param ( & s - > scene . is_rhd , " IsRHD " ) ;
s - > active_app = cereal : : UiLayoutState : : App : : NONE ;
s - > sidebar_collapsed = true ;
s - > scene . alert_size = cereal : : ControlsState : : AlertSize : : NONE ;
static bool started_prev = false ;
if ( s - > started ! = started_prev ) {
if ( s - > started ) {
s - > status = STATUS_DISENGAGED ;
s - > started_frame = s - > sm - > frame ;
read_param ( & s - > scene . is_rhd , " IsRHD " ) ;
s - > active_app = cereal : : UiLayoutState : : App : : NONE ;
s - > sidebar_collapsed = true ;
s - > scene . alert_size = cereal : : ControlsState : : AlertSize : : NONE ;
s - > vipc_client = s - > scene . frontview ? s - > vipc_client_front : s - > vipc_client_rear ;
} else {
s - > status = STATUS_OFFROAD ;
s - > active_app = cereal : : UiLayoutState : : App : : HOME ;
s - > sidebar_collapsed = false ;
s - > sound - > stop ( ) ;
s - > vipc_client - > connected = false ;
}
}
started_prev = s - > started ;
}
void ui_update ( UIState * s ) {
update_params ( s ) ;
update_sockets ( s ) ;
update_alert ( s ) ;
update_status ( s ) ;
update_alert ( s ) ;
update_vision ( s ) ;
}