road camera malfunction alert (#2697)

* camera unresponsive

* blue and remove loge

* simplify

* should override to avoid blank screen

* let it be

* stop sound

Co-authored-by: WXEon <device@comma.ai>
old-commit-hash: 257c5f9d94
commatwo_master
ZwX1616 4 years ago committed by GitHub
parent 2c106a1a9a
commit 8ab6ec02ad
  1. 2
      selfdrive/ui/paint.hpp
  2. 20
      selfdrive/ui/ui.cc

@ -2,7 +2,7 @@
#include "ui.hpp" #include "ui.hpp"
void ui_draw_vision_alert(UIState *s, cereal::ControlsState::AlertSize va_size, int va_color, void ui_draw_vision_alert(UIState *s, cereal::ControlsState::AlertSize va_size, UIStatus va_color,
const char* va_text1, const char* va_text2); const char* va_text1, const char* va_text2);
void ui_draw(UIState *s); void ui_draw(UIState *s);
void ui_draw_image(NVGcontext *vg, float x, float y, float w, float h, int image, float alpha); void ui_draw_image(NVGcontext *vg, float x, float y, float w, float h, int image, float alpha);

@ -25,7 +25,7 @@ int write_param_float(float param, const char* param_name, bool persistent_param
} }
void ui_init(UIState *s) { void ui_init(UIState *s) {
s->sm = new SubMaster({"modelV2", "controlsState", "uiLayoutState", "liveCalibration", "radarState", "thermal", s->sm = new SubMaster({"modelV2", "controlsState", "uiLayoutState", "liveCalibration", "radarState", "thermal", "frame",
"health", "carParams", "ubloxGnss", "driverState", "dMonitoringState", "sensorEvents"}); "health", "carParams", "ubloxGnss", "driverState", "dMonitoringState", "sensorEvents"});
s->started = false; s->started = false;
@ -262,7 +262,7 @@ void ui_update(UIState *s) {
s->scene.alert_size = cereal::ControlsState::AlertSize::NONE; s->scene.alert_size = cereal::ControlsState::AlertSize::NONE;
} }
// Handle controls timeout // Handle controls/fcamera timeout
if (s->started && !s->scene.frontview && ((s->sm)->frame - s->started_frame) > 5*UI_FREQ) { if (s->started && !s->scene.frontview && ((s->sm)->frame - s->started_frame) > 5*UI_FREQ) {
if ((s->sm)->rcv_frame("controlsState") < s->started_frame) { if ((s->sm)->rcv_frame("controlsState") < 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
@ -271,7 +271,8 @@ void ui_update(UIState *s) {
s->scene.alert_size = cereal::ControlsState::AlertSize::MID; s->scene.alert_size = cereal::ControlsState::AlertSize::MID;
} else if (((s->sm)->frame - (s->sm)->rcv_frame("controlsState")) > 5*UI_FREQ) { } else if (((s->sm)->frame - (s->sm)->rcv_frame("controlsState")) > 5*UI_FREQ) {
// car is started, but controls is lagging or died // car is started, but controls is lagging or died
if (s->scene.alert_text2 != "Controls Unresponsive") { if (s->scene.alert_text2 != "Controls Unresponsive" &&
s->scene.alert_text1 != "Camera Malfunction") {
s->sound->play(AudibleAlert::CHIME_WARNING_REPEAT); s->sound->play(AudibleAlert::CHIME_WARNING_REPEAT);
LOGE("Controls unresponsive"); LOGE("Controls unresponsive");
} }
@ -281,6 +282,19 @@ void ui_update(UIState *s) {
s->scene.alert_size = cereal::ControlsState::AlertSize::FULL; s->scene.alert_size = cereal::ControlsState::AlertSize::FULL;
s->status = STATUS_ALERT; s->status = STATUS_ALERT;
} }
if (((s->sm)->rcv_frame("frame") > s->started_frame &&
((s->sm)->frame - (s->sm)->rcv_frame("frame")) > 5*UI_FREQ) ||
((s->sm)->frame - (s->sm)->rcv_frame("frame")) > 15*UI_FREQ) {
// controls is fine, but rear camera is lagging or died
s->scene.alert_text1 = "Camera Malfunction";
s->scene.alert_text2 = "Contact Support";
s->scene.alert_size = cereal::ControlsState::AlertSize::FULL;
s->status = STATUS_DISENGAGED;
s->sound->stop();
ui_draw_vision_alert(s, s->scene.alert_size, s->status,
s->scene.alert_text1.c_str(), s->scene.alert_text2.c_str());
}
} }
// Read params // Read params

Loading…
Cancel
Save