From 2c9f751616d01a695968150c0edccc57cc2f6d4f Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Mon, 19 Sep 2022 23:33:59 -0700 Subject: [PATCH 1/3] Optima: split into two platforms (#24815) * Add missing fw versions for 2019 Optima * move versions to new platform * add temp fw version notes temp notes * clean up * Update docs * add fw versions from the last 180 days * add tests * fix * remove FPv1 for Optima * seems like the 2016 is the same * revert * add versions from our 2019 Optima * label/move some versions * add some versions from a 2020! (3d96bd05b5513638) * this is from the same 2017 as earlier (4f930156368f7830) * vin lookup isn't perfect * Revert "vin lookup isn't perfect" This reverts commit 62c563bc4549b37160254d45bb90fcbc1f6cd589. * a 2020 (df71aec6e636d7e4) * cleanup, this transmission is also a 2020 version df71aec6e636d7e4|2021-10-07--17-59-28 * this comes with scc * one line * revert * bump panda * add our transmission FW * Add test route --- panda | 2 +- selfdrive/car/hyundai/hyundaican.py | 2 +- selfdrive/car/hyundai/interface.py | 4 +- selfdrive/car/hyundai/values.py | 46 ++++++++++++++--------- selfdrive/car/tests/routes.py | 1 + selfdrive/car/torque_data/substitute.yaml | 3 +- 6 files changed, 37 insertions(+), 21 deletions(-) diff --git a/panda b/panda index 046fd58e8d..11ea112258 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 046fd58e8d64c58ed80769fcbec5ac2417a04c71 +Subproject commit 11ea112258b66a0969fa340cd5e2d870378e5c5d diff --git a/selfdrive/car/hyundai/hyundaican.py b/selfdrive/car/hyundai/hyundaican.py index df5cb6ae6e..b3e1aa6b66 100644 --- a/selfdrive/car/hyundai/hyundaican.py +++ b/selfdrive/car/hyundai/hyundaican.py @@ -38,7 +38,7 @@ def create_lkas11(packer, frame, car_fingerprint, apply_steer, steer_req, values["CF_Lkas_SysWarning"] = 4 if sys_warning else 0 # Likely cars lacking the ability to show individual lane lines in the dash - elif car_fingerprint in (CAR.KIA_OPTIMA,): + elif car_fingerprint in (CAR.KIA_OPTIMA, CAR.KIA_OPTIMA_2019): # SysWarning 4 = keep hands on wheel + beep values["CF_Lkas_SysWarning"] = 4 if sys_warning else 0 diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index c32cfbeec2..97c1f7a5dc 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -202,11 +202,13 @@ class CarInterface(CarInterfaceBase): ret.lateralTuning.indi.timeConstantV = [1.4] ret.lateralTuning.indi.actuatorEffectivenessBP = [0.] ret.lateralTuning.indi.actuatorEffectivenessV = [1.8] - elif candidate in (CAR.KIA_OPTIMA, CAR.KIA_OPTIMA_H): + elif candidate in (CAR.KIA_OPTIMA, CAR.KIA_OPTIMA_2019, CAR.KIA_OPTIMA_H): ret.mass = 3558. * CV.LB_TO_KG ret.wheelbase = 2.80 ret.steerRatio = 13.75 tire_stiffness_factor = 0.5 + if candidate == CAR.KIA_OPTIMA: + ret.minSteerSpeed = 32 * CV.MPH_TO_MS CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) elif candidate == CAR.KIA_STINGER: ret.lateralTuning.pid.kf = 0.00005 diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index f3e45873a5..3afae91e72 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -85,7 +85,8 @@ class CAR: KIA_NIRO_EV = "KIA NIRO EV 2020" KIA_NIRO_PHEV = "KIA NIRO HYBRID 2019" KIA_NIRO_HEV_2021 = "KIA NIRO HYBRID 2021" - KIA_OPTIMA = "KIA OPTIMA SX 2019 & 2016" + KIA_OPTIMA = "KIA OPTIMA 2016" + KIA_OPTIMA_2019 = "KIA OPTIMA 2019" KIA_OPTIMA_H = "KIA OPTIMA HYBRID 2017 & SPORTS 2019" KIA_SELTOS = "KIA SELTOS 2021" KIA_SORENTO = "KIA SORENTO GT LINE 2018" @@ -156,10 +157,8 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Kia Niro Hybrid 2021", harness=Harness.hyundai_f), # TODO: could be hyundai_d, verify HyundaiCarInfo("Kia Niro Hybrid 2022", harness=Harness.hyundai_h), ], - CAR.KIA_OPTIMA: [ - HyundaiCarInfo("Kia Optima 2017", "Advanced Smart Cruise Control", min_steer_speed=32. * CV.MPH_TO_MS, harness=Harness.hyundai_b), - HyundaiCarInfo("Kia Optima 2019-20", "Smart Cruise Control (SCC)", harness=Harness.hyundai_g), - ], + CAR.KIA_OPTIMA: HyundaiCarInfo("Kia Optima 2017", "Advanced Smart Cruise Control", harness=Harness.hyundai_b), # TODO: may support 2016, 2018 + CAR.KIA_OPTIMA_2019: HyundaiCarInfo("Kia Optima 2019-20", "Smart Cruise Control (SCC)", harness=Harness.hyundai_g), CAR.KIA_OPTIMA_H: [ HyundaiCarInfo("Kia Optima Hybrid 2017", "Advanced Smart Cruise Control"), # TODO: may support adjacent years HyundaiCarInfo("Kia Optima Hybrid 2019", "Smart Cruise Control (SCC)"), @@ -230,9 +229,6 @@ FINGERPRINTS = { CAR.SONATA_LF: [ {66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1314: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1397: 8, 1407: 8, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2008: 8, 2009: 8, 2012: 8, 2013: 8, 2014: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8}, ], - CAR.KIA_OPTIMA: [{ - 64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 128: 8, 129: 8, 273: 8, 274: 8, 275: 8, 339: 8, 354: 3, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 558: 8, 593: 8, 608: 8, 640: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 909: 8, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1186: 2, 1191: 2, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1268: 8, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1356: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1407: 8, 1414: 3, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1492: 8, 1530: 8, 1532: 5, 1792: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 1996: 8, 2000: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8, 1371: 8, 1397: 8, 1961: 8 - }], CAR.KIA_SORENTO: [{ 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1384: 8, 1407: 8, 1411: 8, 1419: 8, 1425: 2, 1427: 6, 1444: 8, 1456: 4, 1470: 8, 1489: 1 }], @@ -1144,25 +1140,40 @@ FW_VERSIONS = { }, CAR.KIA_OPTIMA: { (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4110 ', + b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4100 ', ], (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00JF ESC \x0b 11 \x18\x030 58920-D5180', + b'\xf1\x00JF ESC \x0f 16 \x16\x06\x17 58920-D5080', ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x89F1JF600AISEIU702\xf1\x82F1JF600AISEIU702', + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JFWGN LDWS AT USA LHD 1.00 1.02 95895-D4100 G21', ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8409', + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6J0051\x00\x00\xf1\x006T6J0_C2\x00\x006T6J0051\x00\x00TJF0T20NSB\x00\x00\x00\x00', + ], + }, + CAR.KIA_OPTIMA_2019: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4110 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00JF ESC \x0b 11 \x18\x030 58920-D5180', + b"\xf1\x00JF ESC \t 11 \x18\x03' 58920-D5260", ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5001 h32', - b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.02 95895-D5000 h31', + b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5100 h32', ], (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', + b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', + b'\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', + b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', + b'\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B8051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B8051\x00\x00TJFSG24NH27\xa7\xc2\xb4', ], }, CAR.ELANTRA_2021: { @@ -1358,7 +1369,7 @@ CHECKSUM = { FEATURES = { # which message has the gear "use_cluster_gears": {CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KONA}, - "use_tcu_gears": {CAR.KIA_OPTIMA, CAR.SONATA_LF, CAR.VELOSTER, CAR.TUCSON}, + "use_tcu_gears": {CAR.KIA_OPTIMA, CAR.KIA_OPTIMA_2019, CAR.SONATA_LF, CAR.VELOSTER, CAR.TUCSON}, "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.KONA_EV_2022}, # these cars use the FCA11 message for the AEB and FCW signals, all others use SCC12 @@ -1374,7 +1385,7 @@ HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_PHEV, CAR.KIA_N EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR.KONA_EV_2022} # these cars require a special panda safety mode due to missing counters and checksums in the messages -LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA, CAR.VELOSTER, CAR.KIA_STINGER, CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.KIA_CEED, CAR.ELANTRA, CAR.IONIQ_HEV_2022} +LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA, CAR.KIA_OPTIMA_2019, CAR.VELOSTER, CAR.KIA_STINGER, CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.KIA_CEED, CAR.ELANTRA, CAR.IONIQ_HEV_2022} # If 0x500 is present on bus 1 it probably has a Mando radar outputting radar points. # If no points are outputted by default it might be possible to turn it on using selfdrive/debug/hyundai_enable_radar_points.py @@ -1400,6 +1411,7 @@ DBC = { CAR.KIA_NIRO_PHEV: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'), CAR.KIA_NIRO_HEV_2021: dbc_dict('hyundai_kia_generic', None), CAR.KIA_OPTIMA: dbc_dict('hyundai_kia_generic', None), + CAR.KIA_OPTIMA_2019: dbc_dict('hyundai_kia_generic', None), CAR.KIA_OPTIMA_H: dbc_dict('hyundai_kia_generic', None), CAR.KIA_SELTOS: dbc_dict('hyundai_kia_generic', None), CAR.KIA_SORENTO: dbc_dict('hyundai_kia_generic', None), # Has 0x5XX messages, but different format diff --git a/selfdrive/car/tests/routes.py b/selfdrive/car/tests/routes.py index e86525baac..3ae3a357ce 100644 --- a/selfdrive/car/tests/routes.py +++ b/selfdrive/car/tests/routes.py @@ -89,6 +89,7 @@ routes = [ CarTestRoute("656ac0d830792fcc|2021-12-28--14-45-56", HYUNDAI.SANTA_FE_PHEV_2022, segment=1), CarTestRoute("e0e98335f3ebc58f|2021-03-07--16-38-29", HYUNDAI.KIA_CEED), CarTestRoute("7653b2bce7bcfdaa|2020-03-04--15-34-32", HYUNDAI.KIA_OPTIMA), + CarTestRoute("018654717bc93d7d|2022-09-19--23-11-10", HYUNDAI.KIA_OPTIMA_2019, segment=0), CarTestRoute("c75a59efa0ecd502|2021-03-11--20-52-55", HYUNDAI.KIA_SELTOS), CarTestRoute("5b7c365c50084530|2020-04-15--16-13-24", HYUNDAI.SONATA), CarTestRoute("b2a38c712dcf90bd|2020-05-18--18-12-48", HYUNDAI.SONATA_LF), diff --git a/selfdrive/car/torque_data/substitute.yaml b/selfdrive/car/torque_data/substitute.yaml index de64a5544c..92361d37f4 100644 --- a/selfdrive/car/torque_data/substitute.yaml +++ b/selfdrive/car/torque_data/substitute.yaml @@ -17,7 +17,8 @@ LEXUS RC 2020: LEXUS NX 2020 TOYOTA AVALON HYBRID 2019: TOYOTA AVALON 2019 TOYOTA AVALON HYBRID 2022: TOYOTA AVALON 2022 -KIA OPTIMA SX 2019 & 2016: HYUNDAI SONATA 2020 +KIA OPTIMA 2016: HYUNDAI SONATA 2020 +KIA OPTIMA 2019: HYUNDAI SONATA 2020 KIA OPTIMA HYBRID 2017 & SPORTS 2019: HYUNDAI SONATA 2020 KIA FORTE E 2018 & GT 2021: HYUNDAI SONATA 2020 KIA CEED INTRO ED 2019: HYUNDAI SONATA 2020 From 1379989e0de7f2d5d163879befd32638dc1ebe1b Mon Sep 17 00:00:00 2001 From: Cameron Clough Date: Tue, 20 Sep 2022 10:45:13 -0700 Subject: [PATCH 2/3] sidebar: add button pressed states (#25848) * add flag img * add image assets * try darker button pressed * remove pressed image, set opacity instead * settings can be pressed too! * cleanup * make settings button white * bookmark --- selfdrive/assets/images/button_flag.png | Bin 0 -> 3305 bytes selfdrive/ui/qt/home.cc | 1 + selfdrive/ui/qt/sidebar.cc | 31 +++++++++++++++++++----- selfdrive/ui/qt/sidebar.h | 5 +++- 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 selfdrive/assets/images/button_flag.png diff --git a/selfdrive/assets/images/button_flag.png b/selfdrive/assets/images/button_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..b55620328a77a6672a4fb7e726ecd484bb2af97c GIT binary patch literal 3305 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 literal 0 HcmV?d00001 diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index 435ba9056a..78bc6aab40 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -41,6 +41,7 @@ HomeWindow::HomeWindow(QWidget* parent) : QWidget(parent) { setAttribute(Qt::WA_NoSystemBackground); QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState); QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition); + QObject::connect(uiState(), &UIState::offroadTransition, sidebar, &Sidebar::offroadTransition); } void HomeWindow::showSidebar(bool show) { diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index a84542d291..eeb163aa14 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -32,8 +32,9 @@ void Sidebar::drawMetric(QPainter &p, const QPair &label, QCol p.drawText(label_rect, Qt::AlignCenter, label.second); } -Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { +Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(false), settings_pressed(false) { home_img = loadPixmap("../assets/images/button_home.png", home_btn.size()); + flag_img = loadPixmap("../assets/images/button_flag.png", home_btn.size()); settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio); connect(this, &Sidebar::valueChanged, [=] { update(); }); @@ -47,17 +48,34 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { pm = std::make_unique>({"userFlag"}); } +void Sidebar::mousePressEvent(QMouseEvent *event) { + if (onroad && home_btn.contains(event->pos())) { + flag_pressed = true; + update(); + } else if (settings_btn.contains(event->pos())) { + settings_pressed = true; + update(); + } +} + void Sidebar::mouseReleaseEvent(QMouseEvent *event) { + if (flag_pressed || settings_pressed) { + flag_pressed = settings_pressed = false; + update(); + } if (home_btn.contains(event->pos())) { MessageBuilder msg; msg.initEvent().initUserFlag(); pm->send("userFlag", msg); - } - if (settings_btn.contains(event->pos())) { + } else if (settings_btn.contains(event->pos())) { emit openSettings(); } } +void Sidebar::offroadTransition(bool offroad) { + onroad = !offroad; +} + void Sidebar::updateState(const UIState &s) { if (!isVisible()) return; @@ -102,11 +120,12 @@ void Sidebar::paintEvent(QPaintEvent *event) { p.fillRect(rect(), QColor(57, 57, 57)); - // static imgs - p.setOpacity(0.65); + // buttons + p.setOpacity(settings_pressed ? 0.65 : 1.0); p.drawPixmap(settings_btn.x(), settings_btn.y(), settings_img); + p.setOpacity(onroad && flag_pressed ? 0.65 : 1.0); + p.drawPixmap(home_btn.x(), home_btn.y(), onroad ? flag_img : home_img); p.setOpacity(1.0); - p.drawPixmap(home_btn.x(), home_btn.y(), home_img); // network int x = 58; diff --git a/selfdrive/ui/qt/sidebar.h b/selfdrive/ui/qt/sidebar.h index 621a21444d..53ad7467ac 100644 --- a/selfdrive/ui/qt/sidebar.h +++ b/selfdrive/ui/qt/sidebar.h @@ -24,14 +24,17 @@ signals: void valueChanged(); public slots: + void offroadTransition(bool offroad); void updateState(const UIState &s); protected: void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void drawMetric(QPainter &p, const QPair &label, QColor c, int y); - QPixmap home_img, settings_img; + QPixmap home_img, flag_img, settings_img; + bool onroad, flag_pressed, settings_pressed; const QMap network_type = { {cereal::DeviceState::NetworkType::NONE, tr("--")}, {cereal::DeviceState::NetworkType::WIFI, tr("Wi-Fi")}, From c5df17cd571cb2bd77bbd13539cd6c773f76d9ad Mon Sep 17 00:00:00 2001 From: Cameron Clough Date: Tue, 20 Sep 2022 10:54:46 -0700 Subject: [PATCH 3/3] sidebar: updated bookmark image --- selfdrive/assets/images/button_flag.png | Bin 3305 -> 1611 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/selfdrive/assets/images/button_flag.png b/selfdrive/assets/images/button_flag.png index b55620328a77a6672a4fb7e726ecd484bb2af97c..cac4db6d4cdb51c4ec2d93f3a68bdb89513ab2df 100644 GIT binary patch delta 1605 zcmV-L2D@SBW+;iQ*zOg1hSr^v_nhiE-z;bM(WlO-)77UkNsv=eQGe6W&|o}f=7F`{;yi&46>9a&w(Q|;~ufcwQ^HfkFL^YtsyWHl3!G2$Gk3%6np+U3t z1FkbC8wM`$8sG3(NcN^-IR4-Y*>G@)t2|&R8iW+#2mHu8WJAIg?g=Q)*~1Ph@(12d zTBPO7M}L-4ktcD+Q@>ah8R3~^A5>(7XA-L-BRrFopdur@W5lS)2-`&pP>~VpNm>;d zp+iYdry@6?Bj>n&kBW@Y3&N<#2nmM;sK||3kaV23C`P zV5`W$;Px}NiacNDCWkdDGK3tz=Yxt2p~PPyQGbyk)cDO@RAdMie}zOvhLPi~kSa2a z67TSyiVS0gcRWQ!hSA^^<0>)?gV(N5kzqKzoUI~5$@_gD6&Xs=e^a9(L#g`PLlqfH z-7kJrWGIb_j3%<>2o)Jh+b_peWGJTJLQ|0{a?2uZe}kwZLva}$N2th9Iu#j*PD48m zPJfe49IT3rgVlmO4o0_#acH$^q1_*8BDJv_gIZrT#G%rcUvVh(b!;4RJs=PRr$<)e zVDu1G92z~=7l)M|G>t<^3P+!r^Coj7i_DRJ7@ryM@;Tq~DX(%7nIf(D&qJ8;5qJ29 zC;Z9Ryu~FXimZiyu*8gO{K5eMhdiR@4Sy~oPh^SYPv~A~d>YsZWeU-m*ojDRjb~vHKLDo;>U3`tc%HQ~y8A6AH2pCtxjH|t%KIy5v$$t!q z<7&1#K*`V4oLQy30ZQ8*>BWqz{@QqIfPcaafg`=PIAo5?T z8QfUqEoR6Xd$_GZoLt~NKT~fM;5V2dYY^vlM#J(t-|>V%)=%XP=13Y1JN~d@F7rO$ z2Ws?7bVzW$=rE?($_%V{Db5af|y5M}d&5svh&Or!lt5 zN8INLL(w4S^0bt3FJ&r3T`-v{2EFn$3QP17-mP9&&YoTi{el*~sDC_Cw$`ij zqZZ+MU3s+CQCG_Fq9+pMSaualP8JOoJDPMH3$m!N+(DI&C0TSR=-4GX3bH|Qn<$dpq%(x*-?^>0>y+gxH~1qXfYH}@QeYA3GQ|*3$oE6pV%JUkdti% z_9oOBI=RE6iAP|9nQVx+Xj!khG z8df_k@EEBD6*UbFEe4Cl(b3_sSPbp@znY3dmb`xf0#!3U;F{w&00000NkvXXu0mjf Dp)Tg` literal 3305 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