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