mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-09-15 03:54:03 +08:00
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>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
#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);
|
||||
void ui_draw(UIState *s);
|
||||
void ui_draw_image(NVGcontext *vg, float x, float y, float w, float h, int image, float alpha);
|
||||
|
||||
+17
-3
@@ -25,7 +25,7 @@ int write_param_float(float param, const char* param_name, bool persistent_param
|
||||
}
|
||||
|
||||
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"});
|
||||
|
||||
s->started = false;
|
||||
@@ -262,7 +262,7 @@ void ui_update(UIState *s) {
|
||||
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->sm)->rcv_frame("controlsState") < s->started_frame) {
|
||||
// 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;
|
||||
} else if (((s->sm)->frame - (s->sm)->rcv_frame("controlsState")) > 5*UI_FREQ) {
|
||||
// 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);
|
||||
LOGE("Controls unresponsive");
|
||||
}
|
||||
@@ -281,6 +282,19 @@ void ui_update(UIState *s) {
|
||||
s->scene.alert_size = cereal::ControlsState::AlertSize::FULL;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user