From 41b72be473eb85c0f7dbad63623d5531ea162fcf Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 29 Jan 2020 21:55:12 +1000 Subject: [PATCH 1/2] fix temp/battery display issue --- selfdrive/ui/paint.cc | 14 ++++---- selfdrive/ui/ui.cc | 78 ++++++++++++++++++++++--------------------- selfdrive/ui/ui.hpp | 19 ++--------- 3 files changed, 50 insertions(+), 61 deletions(-) diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc index 076afdf92..b950c290a 100644 --- a/selfdrive/ui/paint.cc +++ b/selfdrive/ui/paint.cc @@ -814,27 +814,27 @@ static void ui_draw_infobar(UIState *s) { strftime(date_time, sizeof(date_time),"%D %T", &timeinfo); // Create temp string - char temp[6]; - snprintf(temp, sizeof(temp), "%02.0f°C", s->scene.pa0); + char temp[7]; + snprintf(temp, sizeof(temp), "% 3d°C", s->scene.pa0); // create battery percentage string - char battery[4]; - snprintf(battery, sizeof(battery), "%02d%%", s->scene.batteryPercent); + char battery[5]; + snprintf(battery, sizeof(battery), "% 3d%%", s->scene.batteryPercent); if (s->dragon_ui_dev_mini) { char rel_steer[9]; - snprintf(rel_steer, sizeof(rel_steer), "%s%05.1f°", s->scene.angleSteers < 0? "-" : "+", fabs(s->scene.angleSteers)); + snprintf(rel_steer, sizeof(rel_steer), "%s% 5.1f°", s->scene.angleSteers < 0? "-" : "+", fabs(s->scene.angleSteers)); char des_steer[9]; if (s->scene.engaged) { - snprintf(des_steer, sizeof(des_steer), "%s%05.1f°", s->scene.angleSteersDes < 0? "-" : "+", fabs(s->scene.angleSteersDes)); + snprintf(des_steer, sizeof(des_steer), "%s% 5.1f°", s->scene.angleSteersDes < 0? "-" : "+", fabs(s->scene.angleSteersDes)); } else { snprintf(des_steer, sizeof(des_steer), "%7s", "-"); } char lead_dist[8]; if (s->scene.lead_status) { - snprintf(lead_dist, sizeof(lead_dist), "%06.2fm", s->scene.lead_d_rel); + snprintf(lead_dist, sizeof(lead_dist), "% 6.2fm", s->scene.lead_d_rel); } else { snprintf(lead_dist, sizeof(lead_dist), "%7s", "-"); } diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index b8740e01e..82f83de2c 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -113,7 +113,6 @@ static void ui_init(UIState *s) { s->livecalibration_sock = SubSocket::create(s->ctx, "liveCalibration"); s->radarstate_sock = SubSocket::create(s->ctx, "radarState"); s->carstate_sock = SubSocket::create(s->ctx, "carState"); - s->thermal_sock = SubSocket::create(s->ctx, "thermal"); assert(s->model_sock != NULL); assert(s->controlsstate_sock != NULL); @@ -121,7 +120,6 @@ static void ui_init(UIState *s) { assert(s->livecalibration_sock != NULL); assert(s->radarstate_sock != NULL); assert(s->carstate_sock != NULL); - assert(s->thermal_sock != NULL); s->poller = Poller::create({ s->model_sock, @@ -129,8 +127,7 @@ static void ui_init(UIState *s) { s->uilayout_sock, s->livecalibration_sock, s->radarstate_sock, - s->carstate_sock, - s->thermal_sock + s->carstate_sock }); #ifdef SHOW_SPEEDLIMIT @@ -240,20 +237,7 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs, s->limit_set_speed_timeout = UI_FREQ; // dragonpilot, 1hz - s->dragon_ui_speed_timeout = 100; - s->dragon_ui_event_timeout = 100; - s->dragon_ui_maxspeed_timeout = 100; - s->dragon_ui_face_timeout = 100; - s->dragon_ui_dev_timeout = 100; - s->dragon_ui_dev_mini_timeout = 100; - s->dragon_enable_dashcam_timeout = 100; - s->dragon_ui_volume_boost_timeout = 100; - s->dragon_driving_ui_timeout = 100; - s->dragon_ui_lane_timeout = 100; - s->dragon_ui_lead_timeout = 100; - s->dragon_ui_path_timeout = 100; - s->dragon_ui_blinker_timeout = 100; - s->dragon_waze_mode_timeout = 100; + s->dragon_ui_timeout = 100; } static PathData read_path(cereal_ModelData_PathData_ptr pathp) { @@ -484,12 +468,6 @@ void handle_message(UIState *s, Message * msg) { } s->scene.leftBlinker = datad.leftBlinker; s->scene.rightBlinker = datad.rightBlinker; - } else if (eventd.which == cereal_Event_thermal) { - struct cereal_ThermalData datad; - cereal_read_ThermalData(&datad, eventd.thermal); - - s->scene.batteryPercent = datad.batteryPercent; - s->scene.pa0 = datad.pa0; } capn_free(&ctx); } @@ -898,6 +876,7 @@ int main(int argc, char* argv[]) { set_volume(MIN_VOLUME); s->volume_timeout = 5 * UI_FREQ; + s->dragon_ui_info_timeout = 5 * UI_FREQ; int draws = 0; while (!do_exit) { bool should_swap = false; @@ -1006,13 +985,36 @@ int main(int argc, char* argv[]) { s->controls_seen = false; } + // update ui temp/battery values only when vision is up. + if (s->awake && s->vision_connected) { + if (s->dragon_ui_info_timeout > 0) { + s->dragon_ui_info_timeout--; + } else { + // update temp + int temp = open("/sys/devices/virtual/thermal/thermal_zone25/temp", O_RDONLY); + if (temp >= 0) { + char temp_buf[3]; + read(temp, temp_buf, 3); + s->scene.pa0 = atoi(temp_buf); + } + // update battery level + int battery = open("/sys/class/power_supply/battery/capacity", O_RDONLY); + if (battery >= 0) { + char battery_buf[3]; + read(battery, battery_buf, 3); + s->scene.batteryPercent = atoi(battery_buf); + } + s->dragon_ui_info_timeout = 5 * UI_FREQ; + } + } + read_param_bool_timeout(&s->is_metric, "IsMetric", &s->is_metric_timeout); read_param_bool_timeout(&s->longitudinal_control, "LongitudinalControl", &s->longitudinal_control_timeout); read_param_bool_timeout(&s->limit_set_speed, "LimitSetSpeed", &s->limit_set_speed_timeout); read_param_float_timeout(&s->speed_lim_off, "SpeedLimitOffset", &s->limit_set_speed_timeout); // dragonpilot - read_param_float_timeout(&s->dragon_ui_volume_boost, "DragonUIVolumeBoost", &s->dragon_ui_volume_boost_timeout); - read_param_bool_timeout(&s->dragon_waze_mode, "DragonWazeMode", &s->dragon_waze_mode_timeout); + read_param_float_timeout(&s->dragon_ui_volume_boost, "DragonUIVolumeBoost", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_waze_mode, "DragonWazeMode", &s->dragon_ui_timeout); if (s->dragon_waze_mode) { s->dragon_ui_speed = false; @@ -1028,18 +1030,18 @@ int main(int argc, char* argv[]) { s->dragon_ui_path = false; s->dragon_ui_blinker = false; } else { - read_param_bool_timeout(&s->dragon_ui_speed, "DragonUISpeed", &s->dragon_ui_speed_timeout); - read_param_bool_timeout(&s->dragon_ui_event, "DragonUIEvent", &s->dragon_ui_event_timeout); - read_param_bool_timeout(&s->dragon_ui_maxspeed, "DragonUIMaxSpeed", &s->dragon_ui_maxspeed_timeout); - read_param_bool_timeout(&s->dragon_ui_face, "DragonUIFace", &s->dragon_ui_face_timeout); - read_param_bool_timeout(&s->dragon_ui_dev, "DragonUIDev", &s->dragon_ui_dev_timeout); - read_param_bool_timeout(&s->dragon_ui_dev_mini, "DragonUIDevMini", &s->dragon_ui_dev_mini_timeout); - read_param_bool_timeout(&s->dragon_enable_dashcam, "DragonEnableDashcam", &s->dragon_enable_dashcam_timeout); - read_param_bool_timeout(&s->dragon_driving_ui, "DragonDrivingUI", &s->dragon_driving_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_lane, "DragonUILane", &s->dragon_ui_lane_timeout); - read_param_bool_timeout(&s->dragon_ui_lead, "DragonUILead", &s->dragon_ui_lead_timeout); - read_param_bool_timeout(&s->dragon_ui_path, "DragonUIPath", &s->dragon_ui_path_timeout); - read_param_bool_timeout(&s->dragon_ui_blinker, "DragonUIBlinker", &s->dragon_ui_blinker_timeout); + read_param_bool_timeout(&s->dragon_ui_speed, "DragonUISpeed", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_event, "DragonUIEvent", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_maxspeed, "DragonUIMaxSpeed", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_face, "DragonUIFace", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_dev, "DragonUIDev", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_dev_mini, "DragonUIDevMini", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_enable_dashcam, "DragonEnableDashcam", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_driving_ui, "DragonDrivingUI", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_lane, "DragonUILane", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_lead, "DragonUILead", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_path, "DragonUIPath", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_blinker, "DragonUIBlinker", &s->dragon_ui_timeout); } pthread_mutex_unlock(&s->lock); diff --git a/selfdrive/ui/ui.hpp b/selfdrive/ui/ui.hpp index 8b63cdd35..f372f848d 100644 --- a/selfdrive/ui/ui.hpp +++ b/selfdrive/ui/ui.hpp @@ -122,7 +122,7 @@ typedef struct UIScene { // for minimal UI float angleSteersDes; float angleSteers; - float pa0; + int pa0; int batteryPercent; // for blinker, from kegman @@ -257,21 +257,8 @@ typedef struct UIState { // dragonpilot SubSocket *carstate_sock; - SubSocket *thermal_sock; - int dragon_ui_speed_timeout; - int dragon_ui_event_timeout; - int dragon_ui_maxspeed_timeout; - int dragon_ui_face_timeout; - int dragon_ui_dev_timeout; - int dragon_ui_dev_mini_timeout; - int dragon_enable_dashcam_timeout; - int dragon_ui_volume_boost_timeout; - int dragon_driving_ui_timeout; - int dragon_ui_lane_timeout; - int dragon_ui_lead_timeout; - int dragon_ui_path_timeout; - int dragon_ui_blinker_timeout; - int dragon_waze_mode_timeout; + int dragon_ui_info_timeout; + int dragon_ui_timeout; bool dragon_ui_speed; bool dragon_ui_event; From ea3be014b3e1b267d3d5b8f3c9b73092782ba79d Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Fri, 31 Jan 2020 17:18:40 +1000 Subject: [PATCH 2/2] remove temp/battery level display to fix black/freeze screen. --- selfdrive/ui/paint.cc | 24 ++++------------ selfdrive/ui/ui.cc | 67 ++++++++++++++++++------------------------- selfdrive/ui/ui.hpp | 18 +++++++++--- 3 files changed, 48 insertions(+), 61 deletions(-) diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc index b950c290a..b3ea2c8ca 100644 --- a/selfdrive/ui/paint.cc +++ b/selfdrive/ui/paint.cc @@ -813,14 +813,6 @@ static void ui_draw_infobar(UIState *s) { localtime_r(&rawtime, &timeinfo); strftime(date_time, sizeof(date_time),"%D %T", &timeinfo); - // Create temp string - char temp[7]; - snprintf(temp, sizeof(temp), "% 3d°C", s->scene.pa0); - - // create battery percentage string - char battery[5]; - snprintf(battery, sizeof(battery), "% 3d%%", s->scene.batteryPercent); - if (s->dragon_ui_dev_mini) { char rel_steer[9]; snprintf(rel_steer, sizeof(rel_steer), "%s% 5.1f°", s->scene.angleSteers < 0? "-" : "+", fabs(s->scene.angleSteers)); @@ -842,10 +834,8 @@ static void ui_draw_infobar(UIState *s) { snprintf( infobar, sizeof(infobar), - "%s /TMP: %s /BAT: %s /REL: %s /DES: %s /DIS: %s", + "%s /REL: %s /DES: %s /DIS: %s", date_time, - temp, - battery, rel_steer, des_steer, lead_dist @@ -854,10 +844,8 @@ static void ui_draw_infobar(UIState *s) { snprintf( infobar, sizeof(infobar), - "%s /TMP: %s /BAT: %s", - date_time, - temp, - battery + "%s", + date_time ); } @@ -1297,11 +1285,11 @@ void ui_nvg_init(UIState *s) { s->font_courbd = nvgCreateFont(s->vg, "courbd", "../assets/fonts/courbd.ttf"); assert(s->font_courbd >= 0); - s->font_sans_regular = nvgCreateFont(s->vg, "sans-regular", "../../dragonpilot/chinese-fonts/NotoSansCJKtc-Regular.otf"); + s->font_sans_regular = nvgCreateFont(s->vg, "sans-regular", "../assets/fonts/opensans_regular.ttf"); assert(s->font_sans_regular >= 0); - s->font_sans_semibold = nvgCreateFont(s->vg, "sans-semibold", "../../dragonpilot/chinese-fonts/NotoSansCJKtc-Medium.otf"); + s->font_sans_semibold = nvgCreateFont(s->vg, "sans-semibold", "../assets/fonts/opensans_semibold.ttf"); assert(s->font_sans_semibold >= 0); - s->font_sans_bold = nvgCreateFont(s->vg, "sans-bold", "../../dragonpilot/chinese-fonts/NotoSansCJKtc-Bold.otf"); + s->font_sans_bold = nvgCreateFont(s->vg, "sans-bold", "../assets/fonts/opensans_bold.ttf"); assert(s->font_sans_bold >= 0); assert(s->img_wheel >= 0); diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 82f83de2c..929f6f8c1 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -237,7 +237,20 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs, s->limit_set_speed_timeout = UI_FREQ; // dragonpilot, 1hz - s->dragon_ui_timeout = 100; + s->dragon_ui_speed_timeout = UI_FREQ * 3.1; + s->dragon_ui_event_timeout = UI_FREQ * 3.2; + s->dragon_ui_maxspeed_timeout = UI_FREQ * 3.3; + s->dragon_ui_face_timeout = UI_FREQ * 3.4; + s->dragon_ui_dev_timeout = UI_FREQ * 3.5; + s->dragon_ui_dev_mini_timeout = UI_FREQ * 3.6; + s->dragon_enable_dashcam_timeout = UI_FREQ * 3.7; + s->dragon_ui_volume_boost_timeout = UI_FREQ * 3.8; + s->dragon_driving_ui_timeout = UI_FREQ * 3.9; + s->dragon_ui_lane_timeout = UI_FREQ * 4.0; + s->dragon_ui_lead_timeout = UI_FREQ * 4.1; + s->dragon_ui_path_timeout = UI_FREQ * 4.2; + s->dragon_ui_blinker_timeout = UI_FREQ * 4.3; + s->dragon_waze_mode_timeout = UI_FREQ * 4.4; } static PathData read_path(cereal_ModelData_PathData_ptr pathp) { @@ -876,7 +889,6 @@ int main(int argc, char* argv[]) { set_volume(MIN_VOLUME); s->volume_timeout = 5 * UI_FREQ; - s->dragon_ui_info_timeout = 5 * UI_FREQ; int draws = 0; while (!do_exit) { bool should_swap = false; @@ -985,36 +997,13 @@ int main(int argc, char* argv[]) { s->controls_seen = false; } - // update ui temp/battery values only when vision is up. - if (s->awake && s->vision_connected) { - if (s->dragon_ui_info_timeout > 0) { - s->dragon_ui_info_timeout--; - } else { - // update temp - int temp = open("/sys/devices/virtual/thermal/thermal_zone25/temp", O_RDONLY); - if (temp >= 0) { - char temp_buf[3]; - read(temp, temp_buf, 3); - s->scene.pa0 = atoi(temp_buf); - } - // update battery level - int battery = open("/sys/class/power_supply/battery/capacity", O_RDONLY); - if (battery >= 0) { - char battery_buf[3]; - read(battery, battery_buf, 3); - s->scene.batteryPercent = atoi(battery_buf); - } - s->dragon_ui_info_timeout = 5 * UI_FREQ; - } - } - read_param_bool_timeout(&s->is_metric, "IsMetric", &s->is_metric_timeout); read_param_bool_timeout(&s->longitudinal_control, "LongitudinalControl", &s->longitudinal_control_timeout); read_param_bool_timeout(&s->limit_set_speed, "LimitSetSpeed", &s->limit_set_speed_timeout); read_param_float_timeout(&s->speed_lim_off, "SpeedLimitOffset", &s->limit_set_speed_timeout); // dragonpilot - read_param_float_timeout(&s->dragon_ui_volume_boost, "DragonUIVolumeBoost", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_waze_mode, "DragonWazeMode", &s->dragon_ui_timeout); + read_param_float_timeout(&s->dragon_ui_volume_boost, "DragonUIVolumeBoost", &s->dragon_ui_volume_boost_timeout); + read_param_bool_timeout(&s->dragon_waze_mode, "DragonWazeMode", &s->dragon_waze_mode_timeout); if (s->dragon_waze_mode) { s->dragon_ui_speed = false; @@ -1030,18 +1019,18 @@ int main(int argc, char* argv[]) { s->dragon_ui_path = false; s->dragon_ui_blinker = false; } else { - read_param_bool_timeout(&s->dragon_ui_speed, "DragonUISpeed", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_event, "DragonUIEvent", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_maxspeed, "DragonUIMaxSpeed", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_face, "DragonUIFace", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_dev, "DragonUIDev", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_dev_mini, "DragonUIDevMini", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_enable_dashcam, "DragonEnableDashcam", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_driving_ui, "DragonDrivingUI", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_lane, "DragonUILane", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_lead, "DragonUILead", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_path, "DragonUIPath", &s->dragon_ui_timeout); - read_param_bool_timeout(&s->dragon_ui_blinker, "DragonUIBlinker", &s->dragon_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_speed, "DragonUISpeed", &s->dragon_ui_speed_timeout); + read_param_bool_timeout(&s->dragon_ui_event, "DragonUIEvent", &s->dragon_ui_event_timeout); + read_param_bool_timeout(&s->dragon_ui_maxspeed, "DragonUIMaxSpeed", &s->dragon_ui_maxspeed_timeout); + read_param_bool_timeout(&s->dragon_ui_face, "DragonUIFace", &s->dragon_ui_face_timeout); + read_param_bool_timeout(&s->dragon_ui_dev, "DragonUIDev", &s->dragon_ui_dev_timeout); + read_param_bool_timeout(&s->dragon_ui_dev_mini, "DragonUIDevMini", &s->dragon_ui_dev_mini_timeout); + read_param_bool_timeout(&s->dragon_enable_dashcam, "DragonEnableDashcam", &s->dragon_enable_dashcam_timeout); + read_param_bool_timeout(&s->dragon_driving_ui, "DragonDrivingUI", &s->dragon_driving_ui_timeout); + read_param_bool_timeout(&s->dragon_ui_lane, "DragonUILane", &s->dragon_ui_lane_timeout); + read_param_bool_timeout(&s->dragon_ui_lead, "DragonUILead", &s->dragon_ui_lead_timeout); + read_param_bool_timeout(&s->dragon_ui_path, "DragonUIPath", &s->dragon_ui_path_timeout); + read_param_bool_timeout(&s->dragon_ui_blinker, "DragonUIBlinker", &s->dragon_ui_blinker_timeout); } pthread_mutex_unlock(&s->lock); diff --git a/selfdrive/ui/ui.hpp b/selfdrive/ui/ui.hpp index f372f848d..0f09c4e16 100644 --- a/selfdrive/ui/ui.hpp +++ b/selfdrive/ui/ui.hpp @@ -122,8 +122,6 @@ typedef struct UIScene { // for minimal UI float angleSteersDes; float angleSteers; - int pa0; - int batteryPercent; // for blinker, from kegman bool leftBlinker; @@ -257,8 +255,20 @@ typedef struct UIState { // dragonpilot SubSocket *carstate_sock; - int dragon_ui_info_timeout; - int dragon_ui_timeout; + int dragon_ui_speed_timeout; + int dragon_ui_event_timeout; + int dragon_ui_maxspeed_timeout; + int dragon_ui_face_timeout; + int dragon_ui_dev_timeout; + int dragon_ui_dev_mini_timeout; + int dragon_enable_dashcam_timeout; + int dragon_ui_volume_boost_timeout; + int dragon_driving_ui_timeout; + int dragon_ui_lane_timeout; + int dragon_ui_lead_timeout; + int dragon_ui_path_timeout; + int dragon_ui_blinker_timeout; + int dragon_waze_mode_timeout; bool dragon_ui_speed; bool dragon_ui_event;