From 671183184bd177d697285d397bce10c51afd5395 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Thu, 8 Oct 2020 19:29:56 -0700 Subject: [PATCH] UI cleanup + startup time improvement (#2295) --- common/apk.py | 13 +++++--- selfdrive/assets/img_comma.png | Bin 0 -> 11250 bytes selfdrive/ui/paint.cc | 57 ++++++++++++--------------------- selfdrive/ui/ui.hpp | 17 ++++------ 4 files changed, 36 insertions(+), 51 deletions(-) create mode 100644 selfdrive/assets/img_comma.png diff --git a/common/apk.py b/common/apk.py index c04c19aa5..2dfe83852 100644 --- a/common/apk.py +++ b/common/apk.py @@ -3,6 +3,7 @@ import subprocess import glob import hashlib import shutil +import threading from common.basedir import BASEDIR from selfdrive.swaglog import cloudlog @@ -27,8 +28,10 @@ def install_apk(path): return ret == 0 def start_offroad(): - set_package_permissions() - system("am start -n ai.comma.plus.offroad/.MainActivity") + def f(): + set_package_permissions() + system("am start -n ai.comma.plus.offroad/.MainActivity") + threading.Thread(target=f).start() def set_package_permissions(): pm_grant("ai.comma.plus.offroad", "android.permission.ACCESS_FINE_LOCATION") @@ -90,8 +93,10 @@ def update_apks(): assert success def pm_apply_packages(cmd): - for p in android_packages: - system("pm %s %s" % (cmd, p)) + def f(): + for p in android_packages: + system("pm %s %s" % (cmd, p)) + threading.Thread(target=f).start() if __name__ == "__main__": update_apks() diff --git a/selfdrive/assets/img_comma.png b/selfdrive/assets/img_comma.png new file mode 100644 index 0000000000000000000000000000000000000000..818946dd4aa93da736c9e758512e9ba66fe207f8 GIT binary patch literal 11250 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 literal 0 HcmV?d00001 diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc index 881074d8f..ad37caaca 100644 --- a/selfdrive/ui/paint.cc +++ b/selfdrive/ui/paint.cc @@ -18,12 +18,12 @@ extern "C"{ // TODO: this is also hardcoded in common/transformations/camera.py // TODO: choose based on frame input size -#ifdef QCOM2 -const mat3 intrinsic_matrix = (mat3){{ - 2648.0, 0.0, 1928.0/2, - 0.0, 2648.0, 1208.0/2, - 0.0, 0.0, 1.0 -}}; +#ifdef QCOM2 +const mat3 intrinsic_matrix = (mat3){{ + 2648.0, 0.0, 1928.0/2, + 0.0, 2648.0, 1208.0/2, + 0.0, 0.0, 1.0 +}}; #else const mat3 intrinsic_matrix = (mat3){{ 910., 0., 582., @@ -32,14 +32,6 @@ const mat3 intrinsic_matrix = (mat3){{ }}; #endif -const uint8_t alert_colors[][4] = { - [STATUS_OFFROAD] = {0x07, 0x23, 0x39, 0xf1}, - [STATUS_DISENGAGED] = {0x17, 0x33, 0x49, 0xc8}, - [STATUS_ENGAGED] = {0x17, 0x86, 0x44, 0xf1}, - [STATUS_WARNING] = {0xDA, 0x6F, 0x25, 0xf1}, - [STATUS_ALERT] = {0xC9, 0x22, 0x31, 0xf1}, -}; - // Projects a point in car to space to the corresponding point in full frame // image space. vec3 car_space_to_full_frame(const UIState *s, vec4 car_space_projective) { @@ -233,13 +225,13 @@ static void ui_draw_track(UIState *s, bool is_mpc, track_vertices_data *pvd) { NVGpaint track_bg; if (is_mpc) { // Draw colored MPC track - const Color clr = bg_colors[s->status]; + const NVGcolor clr = bg_colors[s->status]; track_bg = nvgLinearGradient(s->vg, s->fb_w, s->fb_h, s->fb_w, s->fb_h*.4, - nvgRGBA(clr.r, clr.g, clr.b, 255), nvgRGBA(clr.r, clr.g, clr.b, 255/2)); + nvgRGBA(clr.r, clr.g, clr.b, 255), nvgRGBA(clr.r, clr.g, clr.b, 255/2)); } else { // Draw white vision track track_bg = nvgLinearGradient(s->vg, s->fb_w, s->fb_h, s->fb_w, s->fb_h*.4, - COLOR_WHITE, COLOR_WHITE_ALPHA(0)); + COLOR_WHITE, COLOR_WHITE_ALPHA(0)); } nvgFillPaint(s->vg, track_bg); nvgFill(s->vg); @@ -443,23 +435,14 @@ static void ui_draw_vision_event(UIState *s) { // draw winding road sign const int img_turn_size = 160*1.5; ui_draw_image(s->vg, viz_event_x - (img_turn_size / 4), viz_event_y + bdr_s - 25, img_turn_size, img_turn_size, s->img_turn, 1.0f); - } else { + } else if (s->scene.controls_state.getEngageable()) { // draw steering wheel const int bg_wheel_size = 96; const int bg_wheel_x = viz_event_x + (viz_event_w-bg_wheel_size); const int bg_wheel_y = viz_event_y + (bg_wheel_size/2); - NVGcolor color = COLOR_BLACK_ALPHA(0); - if (s->status == STATUS_ENGAGED) { - color = nvgRGBA(23, 134, 68, 255); - } else if (s->status == STATUS_WARNING) { - color = COLOR_OCHRE; - } else { - color = nvgRGBA(23, 51, 73, 255); - } + const NVGcolor color = bg_colors[s->status]; - if (s->scene.controls_state.getEngageable()){ - ui_draw_circle_image(s->vg, bg_wheel_x, bg_wheel_y, bg_wheel_size, s->img_wheel, color, 1.0f, bg_wheel_y - 25); - } + ui_draw_circle_image(s->vg, bg_wheel_x, bg_wheel_y, bg_wheel_size, s->img_wheel, color, 1.0f, bg_wheel_y - 25); } } @@ -541,7 +524,7 @@ static void ui_draw_vision_footer(UIState *s) { ui_draw_vision_face(s); } -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) { static std::map alert_size_map = { {cereal::ControlsState::AlertSize::NONE, 0}, @@ -552,7 +535,8 @@ void ui_draw_vision_alert(UIState *s, cereal::ControlsState::AlertSize va_size, const UIScene *scene = &s->scene; bool longAlert1 = strlen(va_text1) > 15; - const uint8_t *color = alert_colors[va_color]; + NVGcolor color = bg_colors[va_color]; + color.a *= s->alert_blinking_alpha; int alr_s = alert_size_map[va_size]; const int alr_x = scene->viz_rect.x - bdr_s; @@ -560,10 +544,10 @@ void ui_draw_vision_alert(UIState *s, cereal::ControlsState::AlertSize va_size, const int alr_h = alr_s+(va_size==cereal::ControlsState::AlertSize::NONE?0:bdr_s); const int alr_y = s->fb_h-alr_h; - ui_draw_rect(s->vg, alr_x, alr_y, alr_w, alr_h, nvgRGBA(color[0],color[1],color[2],(color[3]*s->alert_blinking_alpha))); + ui_draw_rect(s->vg, alr_x, alr_y, alr_w, alr_h, color); NVGpaint gradient = nvgLinearGradient(s->vg, alr_x, alr_y, alr_x, alr_y+alr_h, - nvgRGBAf(0.0,0.0,0.0,0.05), nvgRGBAf(0.0,0.0,0.0,0.35)); + nvgRGBAf(0.0,0.0,0.0,0.05), nvgRGBAf(0.0,0.0,0.0,0.35)); ui_draw_rect(s->vg, alr_x, alr_y, alr_w, alr_h, gradient); nvgFillColor(s->vg, COLOR_WHITE); @@ -589,6 +573,7 @@ void ui_draw_vision_alert(UIState *s, cereal::ControlsState::AlertSize va_size, static void ui_draw_vision(UIState *s) { const UIScene *scene = &s->scene; const Rect &viz_rect = scene->viz_rect; + // Draw video frames glEnable(GL_SCISSOR_TEST); glViewport(viz_rect.x+scene->ui_viz_ro, viz_rect.y, s->fb_w - bdr_s*2, viz_rect.h); @@ -618,8 +603,8 @@ static void ui_draw_vision(UIState *s) { } static void ui_draw_background(UIState *s) { - const Color color = bg_colors[s->status]; - glClearColor(color.r/256.0, color.g/256.0, color.b/256.0, 1.0); + const NVGcolor color = bg_colors[s->status]; + glClearColor(color.r, color.g, color.b, 1.0); glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); } @@ -656,7 +641,7 @@ void ui_draw_image(NVGcontext *vg, float x, float y, float w, float h, int image void ui_draw_rect(NVGcontext *vg, float x, float y, float w, float h, NVGcolor color, float r, int width) { nvgBeginPath(vg); - r > 0? nvgRoundedRect(vg, x, y, w, h, r) : nvgRect(vg, x, y, w, h); + r > 0 ? nvgRoundedRect(vg, x, y, w, h, r) : nvgRect(vg, x, y, w, h); if (width) { nvgStrokeColor(vg, color); nvgStrokeWidth(vg, width); diff --git a/selfdrive/ui/ui.hpp b/selfdrive/ui/ui.hpp index a9016dd61..f09748d0e 100644 --- a/selfdrive/ui/ui.hpp +++ b/selfdrive/ui/ui.hpp @@ -33,7 +33,6 @@ #define COLOR_WHITE_ALPHA(x) nvgRGBA(255, 255, 255, x) #define COLOR_YELLOW nvgRGBA(218, 202, 37, 255) #define COLOR_RED nvgRGBA(201, 34, 49, 255) -#define COLOR_OCHRE nvgRGBA(218, 111, 37, 255) #define UI_BUF_COUNT 4 @@ -62,10 +61,6 @@ const int TRACK_POINTS_MAX_CNT = 50 * 2; const int SET_SPEED_NA = 255; -typedef struct Color { - uint8_t r, g, b; -} Color; - typedef enum NetStatus { NET_CONNECTED, NET_DISCONNECTED, @@ -80,12 +75,12 @@ typedef enum UIStatus { STATUS_ALERT, } UIStatus; -static std::map bg_colors = { - {STATUS_OFFROAD, {0x07, 0x23, 0x39}}, - {STATUS_DISENGAGED, {0x17, 0x33, 0x49}}, - {STATUS_ENGAGED, {0x17, 0x86, 0x44}}, - {STATUS_WARNING, {0xDA, 0x6F, 0x25}}, - {STATUS_ALERT, {0xC9, 0x22, 0x31}}, +static std::map bg_colors = { + {STATUS_OFFROAD, nvgRGBA(0x07, 0x23, 0x39, 0xf1)}, + {STATUS_DISENGAGED, nvgRGBA(0x17, 0x33, 0x49, 0xc8)}, + {STATUS_ENGAGED, nvgRGBA(0x17, 0x86, 0x44, 0xf1)}, + {STATUS_WARNING, nvgRGBA(0xDA, 0x6F, 0x25, 0xf1)}, + {STATUS_ALERT, nvgRGBA(0xC9, 0x22, 0x31, 0xf1)}, }; typedef struct UIScene {