ui.cc: remove variables from UIScene, use event::Reader to get data (#1585)

* use struct to store lead status

* remove white space

* use RadarState::LeadData::Reader

* use reader to get thermal data

* use reader

* continue

* remove variables

reset submodules,fix some errors

reset submodules

revert

* remove s->scene.gps_planner_active

* modify

* cleanup

* done

* resolve conflict

* remove irrelevant comment

* remove white space
This commit is contained in:
Dean Lee
2020-06-06 06:33:45 +08:00
committed by GitHub
parent 19512315ff
commit d720f28ecb
4 changed files with 78 additions and 154 deletions
+30 -77
View File
@@ -207,9 +207,6 @@ static void ui_init(UIState *s) {
set_awake(s, true);
s->model_changed = false;
s->livempc_or_radarstate_changed = false;
ui_nvg_init(s);
}
@@ -228,18 +225,16 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs,
s->cur_vision_idx = -1;
s->cur_vision_front_idx = -1;
s->scene = (UIScene){
.frontview = getenv("FRONTVIEW") != NULL,
.fullview = getenv("FULLVIEW") != NULL,
.transformed_width = ui_info.transformed_width,
.transformed_height = ui_info.transformed_height,
.front_box_x = ui_info.front_box_x,
.front_box_y = ui_info.front_box_y,
.front_box_width = ui_info.front_box_width,
.front_box_height = ui_info.front_box_height,
.world_objects_visible = false, // Invisible until we receive a calibration message.
.gps_planner_active = false,
};
s->scene.frontview = getenv("FRONTVIEW") != NULL;
s->scene.fullview = getenv("FULLVIEW") != NULL;
s->scene.transformed_width = ui_info.transformed_width;
s->scene.transformed_height = ui_info.transformed_height;
s->scene.front_box_x = ui_info.front_box_x;
s->scene.front_box_y = ui_info.front_box_y;
s->scene.front_box_width = ui_info.front_box_width;
s->scene.front_box_height = ui_info.front_box_height;
s->scene.world_objects_visible = false; // Invisible until we receive a calibration message.
s->scene.gps_planner_active = false;
s->rgb_width = back_bufs.width;
s->rgb_height = back_bufs.height;
@@ -307,23 +302,12 @@ void handle_message(UIState *s, SubMaster &sm) {
UIScene &scene = s->scene;
if (s->started && sm.updated("controlsState")) {
auto event = sm["controlsState"];
auto data = event.getControlsState();
scene.controls_state = event.getControlsState();
s->controls_timeout = 1 * UI_FREQ;
scene.frontview = data.getRearViewCam();
scene.frontview = scene.controls_state.getRearViewCam();
if (!scene.frontview){ s->controls_seen = true; }
if (data.getVCruise() != scene.v_cruise) {
scene.v_cruise_update_ts = event.getLogMonoTime();
}
scene.v_cruise = data.getVCruise();
scene.v_ego = data.getVEgo();
scene.curvature = data.getCurvature();
scene.engaged = data.getEnabled();
scene.engageable = data.getEngageable();
scene.gps_planner_active = data.getGpsPlannerActive();
scene.monitoring_active = data.getDriverMonitoringOn();
scene.decel_for_model = data.getDecelForModel();
auto alert_sound = data.getAlertSound();
auto alert_sound = scene.controls_state.getAlertSound();
const auto sound_none = cereal::CarControl::HUDControl::AudibleAlert::NONE;
if (alert_sound != s->alert_sound){
if (s->alert_sound != sound_none){
@@ -331,34 +315,33 @@ void handle_message(UIState *s, SubMaster &sm) {
}
if (alert_sound != sound_none){
play_alert_sound(alert_sound);
s->alert_type = data.getAlertType();
s->alert_type = scene.controls_state.getAlertType();
}
s->alert_sound = alert_sound;
}
scene.alert_text1 = data.getAlertText1();
scene.alert_text2 = data.getAlertText2();
scene.alert_ts = event.getLogMonoTime();
scene.alert_size = data.getAlertSize();
auto alertStatus = data.getAlertStatus();
scene.alert_text1 = scene.controls_state.getAlertText1();
scene.alert_text2 = scene.controls_state.getAlertText2();
scene.alert_size = scene.controls_state.getAlertSize();
auto alertStatus = scene.controls_state.getAlertStatus();
if (alertStatus == cereal::ControlsState::AlertStatus::USER_PROMPT) {
update_status(s, STATUS_WARNING);
} else if (alertStatus == cereal::ControlsState::AlertStatus::CRITICAL) {
update_status(s, STATUS_ALERT);
} else{
update_status(s, scene.engaged ? STATUS_ENGAGED : STATUS_DISENGAGED);
update_status(s, scene.controls_state.getEnabled() ? STATUS_ENGAGED : STATUS_DISENGAGED);
}
scene.alert_blinkingrate = data.getAlertBlinkingRate();
if (scene.alert_blinkingrate > 0.) {
float alert_blinkingrate = scene.controls_state.getAlertBlinkingRate();
if (alert_blinkingrate > 0.) {
if (s->alert_blinked) {
if (s->alert_blinking_alpha > 0.0 && s->alert_blinking_alpha < 1.0) {
s->alert_blinking_alpha += (0.05*scene.alert_blinkingrate);
s->alert_blinking_alpha += (0.05*alert_blinkingrate);
} else {
s->alert_blinked = false;
}
} else {
if (s->alert_blinking_alpha > 0.25) {
s->alert_blinking_alpha -= (0.05*scene.alert_blinkingrate);
s->alert_blinking_alpha -= (0.05*alert_blinkingrate);
} else {
s->alert_blinking_alpha += 0.25;
s->alert_blinked = true;
@@ -368,18 +351,8 @@ void handle_message(UIState *s, SubMaster &sm) {
}
if (sm.updated("radarState")) {
auto data = sm["radarState"].getRadarState();
auto leaddatad = data.getLeadOne();
scene.lead_status = leaddatad.getStatus();
scene.lead_d_rel = leaddatad.getDRel();
scene.lead_y_rel = leaddatad.getYRel();
scene.lead_v_rel = leaddatad.getVRel();
auto leaddatad2 = data.getLeadTwo();
scene.lead_status2 = leaddatad2.getStatus();
scene.lead_d_rel2 = leaddatad2.getDRel();
scene.lead_y_rel2 = leaddatad2.getYRel();
scene.lead_v_rel2 = leaddatad2.getVRel();
s->livempc_or_radarstate_changed = true;
scene.lead_data[0] = data.getLeadOne();
scene.lead_data[1] = data.getLeadTwo();
}
if (sm.updated("liveCalibration")) {
scene.world_objects_visible = true;
@@ -390,7 +363,6 @@ void handle_message(UIState *s, SubMaster &sm) {
}
if (sm.updated("model")) {
read_model(scene.model, sm["model"].getModel());
s->model_changed = true;
}
// else if (which == cereal::Event::LIVE_MPC) {
// auto data = event.getLiveMpc();
@@ -406,9 +378,6 @@ void handle_message(UIState *s, SubMaster &sm) {
auto data = sm["uiLayoutState"].getUiLayoutState();
s->active_app = data.getActiveApp();
scene.uilayout_sidebarcollapsed = data.getSidebarCollapsed();
if (data.getMockEngaged() != scene.uilayout_mockengaged) {
scene.uilayout_mockengaged = data.getMockEngaged();
}
}
#ifdef SHOW_SPEEDLIMIT
if (sm.updated("liveMapData")) {
@@ -416,16 +385,7 @@ void handle_message(UIState *s, SubMaster &sm) {
}
#endif
if (sm.updated("thermal")) {
auto data = sm["thermal"].getThermal();
scene.networkType = data.getNetworkType();
scene.networkStrength = data.getNetworkStrength();
scene.batteryPercent = data.getBatteryPercent();
scene.batteryCharging = data.getBatteryStatus() == "Charging";
scene.freeSpace = data.getFreeSpace();
scene.thermalStatus = data.getThermalStatus();
scene.paTemp = data.getPa0();
s->thermal_started = data.getStarted();
scene.thermal = sm["thermal"].getThermal();
}
if (sm.updated("ubloxGnss")) {
auto data = sm["ubloxGnss"].getUbloxGnss();
@@ -438,20 +398,15 @@ void handle_message(UIState *s, SubMaster &sm) {
s->hardware_timeout = 5*30; // 5 seconds at 30 fps
}
if (sm.updated("driverState")) {
auto data = sm["driverState"].getDriverState();
scene.face_prob = data.getFaceProb();
auto fxy_list = data.getFacePosition();
scene.face_x = fxy_list[0];
scene.face_y = fxy_list[1];
scene.driver_state = sm["driverState"].getDriverState();
}
if (sm.updated("dMonitoringState")) {
auto data = sm["dMonitoringState"].getDMonitoringState();
scene.is_rhd = data.getIsRHD();
scene.awareness_status = data.getAwarenessStatus();
s->preview_started = data.getIsPreview();
}
s->started = s->thermal_started || s->preview_started ;
s->started = scene.thermal.getStarted() || s->preview_started ;
// Handle onroad/offroad transition
if (!s->started) {
if (s->status != STATUS_STOPPED) {
@@ -471,9 +426,7 @@ void handle_message(UIState *s, SubMaster &sm) {
}
static void check_messages(UIState *s) {
while (true) {
if (s->sm->update(0) == 0)
break;
if (s->sm->update(0) > 0){
handle_message(s, *(s->sm));
}
}
@@ -911,7 +864,7 @@ int main(int argc, char* argv[]) {
if (s->volume_timeout > 0) {
s->volume_timeout--;
} else {
int volume = fmin(MAX_VOLUME, MIN_VOLUME + s->scene.v_ego / 5); // up one notch every 5 m/s
int volume = fmin(MAX_VOLUME, MIN_VOLUME + s->scene.controls_state.getVEgo() / 5); // up one notch every 5 m/s
set_volume(volume);
s->volume_timeout = 5 * UI_FREQ;
}