From 6efe858dfc40267310f8d518c27a4ba7e8914f78 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 14 May 2024 03:17:23 -0500 Subject: [PATCH] wip --- .vscode/settings.json | 16 +- openpilot/.vscode/settings.json | 8 + .../clearpiliot_devqueue_zbacklog.txt | 0 .../clearpilot_design.txt | 0 .../clearpilot_devqueue_amain.txt | 33 +- .../clearpilot_feature_documentation.txt | 0 .../clearpilot_notes.txt | 0 .../clearpilot_settings.txt | 0 .../clearpilot_testme.txt | 0 openpilot/opendbc | 1 + openpilot/panda | 1 + panda/board/safety/safety_hyundai_canfd.h | 160 +++++++- panda/board/safety/safety_hyundai_canfd.org | 360 ++++++++++++++++++ selfdrive/car/hyundai/carcontroller.py | 4 +- selfdrive/car/hyundai/hyundaicanfd.py | 19 +- .../clearpilot/behavior/_abstract.py | 0 ...echange.py => conditional_experimental.py} | 0 .../behavior/lane_change_no_lateral.py | 0 .../clearpilot/behavior/lane_change_nudge.py | 0 .../behavior/lane_change_nudgeless.py | 0 .../behavior/long_control_button_spam.py | 0 .../behavior/long_control_openpilot.py | 0 .../clearpilot/behavior/stock_lateral.py | 0 selfdrive/clearpilot/readme.txt | 1 + selfdrive/manager/process_config.py | 12 +- .../{configure => install}/defaults.sh | 0 system/clearpilot/install/plan.txt | 14 + .../{configure => install}/provision.sh | 4 +- 28 files changed, 601 insertions(+), 32 deletions(-) create mode 100644 openpilot/.vscode/settings.json rename clearpiliot_devqueue_zbacklog.txt => openpilot/clearpiliot_devqueue_zbacklog.txt (100%) rename clearpilot_design.txt => openpilot/clearpilot_design.txt (100%) rename clearpilot_devqueue_amain.txt => openpilot/clearpilot_devqueue_amain.txt (78%) rename clearpilot_feature_documentation.txt => openpilot/clearpilot_feature_documentation.txt (100%) rename clearpilot_notes.txt => openpilot/clearpilot_notes.txt (100%) rename clearpilot_settings.txt => openpilot/clearpilot_settings.txt (100%) rename clearpilot_testme.txt => openpilot/clearpilot_testme.txt (100%) create mode 120000 openpilot/opendbc create mode 120000 openpilot/panda create mode 100644 panda/board/safety/safety_hyundai_canfd.org rename openpilot/update.sh => selfdrive/clearpilot/behavior/_abstract.py (100%) rename selfdrive/clearpilot/behavior/{lanechange.py => conditional_experimental.py} (100%) create mode 100644 selfdrive/clearpilot/behavior/lane_change_no_lateral.py create mode 100644 selfdrive/clearpilot/behavior/lane_change_nudge.py create mode 100644 selfdrive/clearpilot/behavior/lane_change_nudgeless.py create mode 100644 selfdrive/clearpilot/behavior/long_control_button_spam.py create mode 100644 selfdrive/clearpilot/behavior/long_control_openpilot.py create mode 100644 selfdrive/clearpilot/behavior/stock_lateral.py rename system/clearpilot/{configure => install}/defaults.sh (100%) create mode 100644 system/clearpilot/install/plan.txt rename system/clearpilot/{configure => install}/provision.sh (91%) diff --git a/.vscode/settings.json b/.vscode/settings.json index 32fccf1..02c4653 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,20 @@ { "files.exclude": { "selfdrive/": true, - "openpilot/system/": true, - "tools/": true + "system/": true, + "tools/": true, + "openpilot/third_party": true, + "common/" true, + "opendbc/": true, + "panda/": true }, "search.exclude": { "selfdrive/": true, - "openpilot/system/": true, - "tools/": true + "system/": true, + "tools/": true, + "openpilot/third_party": true, + "common/" true, + "opendbc/": true, + "panda/": true } } diff --git a/openpilot/.vscode/settings.json b/openpilot/.vscode/settings.json new file mode 100644 index 0000000..529e888 --- /dev/null +++ b/openpilot/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.exclude": { + "third_party": true + }, + "search.exclude": { + "third_party": true + } +} diff --git a/clearpiliot_devqueue_zbacklog.txt b/openpilot/clearpiliot_devqueue_zbacklog.txt similarity index 100% rename from clearpiliot_devqueue_zbacklog.txt rename to openpilot/clearpiliot_devqueue_zbacklog.txt diff --git a/clearpilot_design.txt b/openpilot/clearpilot_design.txt similarity index 100% rename from clearpilot_design.txt rename to openpilot/clearpilot_design.txt diff --git a/clearpilot_devqueue_amain.txt b/openpilot/clearpilot_devqueue_amain.txt similarity index 78% rename from clearpilot_devqueue_amain.txt rename to openpilot/clearpilot_devqueue_amain.txt index f736de1..b7dc92e 100644 --- a/clearpilot_devqueue_amain.txt +++ b/openpilot/clearpilot_devqueue_amain.txt @@ -1,3 +1,19 @@ + +- test that lkas button crashes controlsd, it should +- test that lkas button creates an alert, it should + +- hyundai clsc https://github.com/garrettpall/openpilot/commit/5528198aa73d3d017d16ec4ca38306b11e5da0a8 + +- test tools/replay to get UI working offline +- add debug elements to ui with a boolean at top of onroad.cc to enable/disable: + - curviture + - current speed limit + - current cruise speed + - current experimental mode speed + - current distance to lead based on radar + - current distance to lead based on model draw distance + - current speed of lead + - make side lanes 10% wider and the disengage mode 10% brighter - make 25% of side lanes 50% darker than base @@ -7,12 +23,15 @@ - button stuff: - read paddle left (for full nudgeless lane change + blinker, reset to drive) - read paddle right ("") +- read current drive mode, reset paddle mode to drive - write pause, res, accel, mode, drive +wishlist: read / write info switcher, hvac, windows +wishlist: allow lane assist (not lane keep) on disengage + test: - disable all canbus - set speed limit during stock long -- OP -> Oscar - oscar - global clearpilot state var @@ -31,6 +50,8 @@ Oscar -> OP - settings menu - - branch selector - release, stage, dev. Stage is my personal release branch. Should always be able to easilly switch to stage while im in a development state. +- unfuck the directory structure. new structure: +- ------- @@ -59,6 +80,7 @@ Oscar -> OP - Create clearpilot process. manages behaviors. - experiment with reduced jerk values - test toggle stop all canbus output +- check if acc_cancel events are being made on idle in stock long, if so, its a bug. - Warn if significantly slower traffic @@ -104,3 +126,12 @@ behaviors: - mark os version different than release, forcing a os reinstall - no prompt on os reinstall + +Test features wizard: +- read paddles +- read speed +- adjust speed +- cancel / resume +- reset drive mode +- read radar distance +- activate blinkers \ No newline at end of file diff --git a/clearpilot_feature_documentation.txt b/openpilot/clearpilot_feature_documentation.txt similarity index 100% rename from clearpilot_feature_documentation.txt rename to openpilot/clearpilot_feature_documentation.txt diff --git a/clearpilot_notes.txt b/openpilot/clearpilot_notes.txt similarity index 100% rename from clearpilot_notes.txt rename to openpilot/clearpilot_notes.txt diff --git a/clearpilot_settings.txt b/openpilot/clearpilot_settings.txt similarity index 100% rename from clearpilot_settings.txt rename to openpilot/clearpilot_settings.txt diff --git a/clearpilot_testme.txt b/openpilot/clearpilot_testme.txt similarity index 100% rename from clearpilot_testme.txt rename to openpilot/clearpilot_testme.txt diff --git a/openpilot/opendbc b/openpilot/opendbc new file mode 120000 index 0000000..0244313 --- /dev/null +++ b/openpilot/opendbc @@ -0,0 +1 @@ +../opendbc/ \ No newline at end of file diff --git a/openpilot/panda b/openpilot/panda new file mode 120000 index 0000000..0ffbc13 --- /dev/null +++ b/openpilot/panda @@ -0,0 +1 @@ +../panda/ \ No newline at end of file diff --git a/panda/board/safety/safety_hyundai_canfd.h b/panda/board/safety/safety_hyundai_canfd.h index f847a8d..caceee9 100644 --- a/panda/board/safety/safety_hyundai_canfd.h +++ b/panda/board/safety/safety_hyundai_canfd.h @@ -21,18 +21,21 @@ const SteeringLimits HYUNDAI_CANFD_STEERING_LIMITS = { const CanMsg HYUNDAI_CANFD_HDA2_TX_MSGS[] = { {0x50, 0, 16}, // LKAS {0x1CF, 1, 8}, // CRUISE_BUTTON + {426, 1, 16}, // CRUISE_BUTTONS_ALT {0x2A4, 0, 24}, // CAM_0x2A4 }; const CanMsg HYUNDAI_CANFD_HDA2_ALT_STEERING_TX_MSGS[] = { {0x110, 0, 32}, // LKAS_ALT {0x1CF, 1, 8}, // CRUISE_BUTTON + {426, 1, 16}, // CRUISE_BUTTONS_ALT {0x362, 0, 32}, // CAM_0x362 }; const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { {0x50, 0, 16}, // LKAS {0x1CF, 1, 8}, // CRUISE_BUTTON + {426, 1, 16}, // CRUISE_BUTTONS_ALT {0x2A4, 0, 24}, // CAM_0x2A4 {0x51, 0, 32}, // ADRV_0x51 {0x730, 1, 8}, // tester present for ADAS ECU disable @@ -70,6 +73,9 @@ const CanMsg HYUNDAI_CANFD_HDA1_TX_MSGS[] = { #define HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(pt_bus) \ {.msg = {{0x1aa, (pt_bus), 16, .check_checksum = false, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ +#define HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(pt_bus) \ + {.msg = {{0x1aa, (pt_bus), 16, .check_checksum = false, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ + // SCC_CONTROL (from ADAS unit or camera) #define HYUNDAI_CANFD_SCC_ADDR_CHECK(scc_bus) \ {.msg = {{0x1a0, (scc_bus), 32, .check_checksum = true, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ @@ -159,6 +165,74 @@ static void hyundai_canfd_rx_hook(const CANPacket_t *to_push) { const int pt_bus = hyundai_canfd_hda2 ? 1 : 0; const int scc_bus = hyundai_camera_scc ? 2 : pt_bus; + // Todo: test: + // BO_ 1345 CGW1: 8 BCM + // SG_ C_SunRoofOpenState : 57|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,DATC,IBOX,DATC,IBOX + // BO_ 68 DATC11: 8 DATC + // SG_ CR_Datc_OutTempC : 24|8@1+ (0.5,-41.0) [-41.0|86.5] "deg" CLU,FPCM + // SG_ CR_Datc_OutTempF : 32|8@1+ (1.0,-42.0) [-42.0|213.0] "deg" CLU + // SG_ CF_Datc_IncarTemp : 40|8@1+ (0.5,-40.0) [-40.0|60.0] "deg" BCM,CLU + // BO_ 64 DATC14: 8 DATC + // SG_ CF_Datc_AqsLevelOut : 0|4@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ CF_Datc_DiagMode : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ CR_Datc_SelfDiagCode : 8|8@1+ (1.0,-1.0) [0.0|254.0] "" CLU + // SG_ DATC_SyncDisp : 16|4@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ DATC_OffDisp : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ DATC_SmartVentDisp : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ DATC_SmartVentOnOffStatus : 24|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ DATC_AutoDefogSysOff_Disp : 26|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // SG_ DATC_ADSDisp : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU + // VAL_ 1144 DRIVE_MODE2 3 "Set Sport" 1 "Set Normal" 2 "Set Eco"; +// BO_ 1151 HVAC_TOUCH_BUTTONS: 8 XXX +// SG_ AUTO_BUTTON : 8|1@0+ (1,0) [0|1] "" XXX +// SG_ SYNC_BUTTON : 12|1@0+ (1,0) [0|1] "" XXX +// SG_ FR_DEFROST_BUTTON : 20|1@0+ (1,0) [0|1] "" XXX +// SG_ RR_DEFROST_BUTTON : 22|1@0+ (1,0) [0|1] "" XXX +// SG_ FAN_SPEED_UP_BUTTON : 24|1@0+ (1,0) [0|1] "" XXX +// SG_ FAN_SPEED_DOWN_BUTTON : 26|1@0+ (1,0) [0|1] "" XXX +// SG_ AIR_DIRECTION_BUTTON : 28|1@0+ (1,0) [0|1] "" XXX +// SG_ AC_BUTTON : 40|1@0+ (1,0) [0|1] "" XXX +// SG_ DRIVER_ONLY_BUTTON : 44|1@0+ (1,0) [0|1] "" XXX +// SG_ RECIRC_BUTTON : 48|1@0+ (1,0) [0|1] "" XXX +// SG_ HEAT_BUTTON : 52|1@0+ (1,0) [0|1] "" XXX +// BO_ 304 GEAR_SHIFTER: 16 XXX +// SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX +// SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX +// SG_ PARK_BUTTON : 32|2@1+ (1,0) [0|3] "" XXX +// SG_ GEAR : 64|3@1+ (1,0) [0|7] "" XXX +// SG_ KNOB_POSITION : 40|3@1+ (1,0) [0|3] "" XXX +// BO_ 1322 CLU15: 8 CLU +// SG_ CF_Clu_VehicleSpeed : 0|8@1+ (1.0,0.0) [0.0|255.0] "" BCM +// SG_ CF_Clu_Gear : 9|4@1+ (1,0) [0|15] "" BCM +// SG_ CF_Clu_HudInfoSet : 13|7@1+ (1.0,0.0) [0.0|127.0] "" HUD +// SG_ CF_Clu_HudFontColorSet : 20|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_HudBrightUpSW : 22|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_HudBrightDnSW : 24|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_HudHeightUpSW : 26|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_HudHeightDnSW : 28|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_HudSet : 30|1@1+ (1.0,0.0) [0.0|1.0] "" HUD +// SG_ CF_Clu_HudFontSizeSet : 31|2@1+ (1.0,0.0) [0.0|3.0] "" HUD +// SG_ CF_Clu_LanguageInfo : 33|5@1+ (1.0,0.0) [0.0|31.0] "" BCM,PGS +// SG_ CF_Clu_ClusterSound : 38|1@1- (1.0,0.0) [0.0|0.0] "" BCM,CGW,FATC +// SG_ CF_Clu_VehicleSpeed2 : 48|8@1+ (1,0) [0|255] "" XXX +// BO_ 1292 CLU13: 8 CLU +// SG_ CF_Clu_LowfuelWarn : 0|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,FPCM,IBOX +// SG_ CF_Clu_RefDetMod : 2|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX +// SG_ CF_Clu_AvgFCU : 3|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX +// SG_ CF_Clu_AvsmCur : 5|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,SCC +// SG_ CF_Clu_AvgFCI : 6|10@1+ (0.1,0.0) [0.0|102.2] "" IBOX +// SG_ CF_Clu_DrivingModeSwi : 16|2@1+ (1.0,0.0) [0.0|3.0] "" DATC,ECS,EMS,ESC,IAP,MDPS,TCU +// SG_ CF_Clu_FuelDispLvl : 18|5@1+ (1.0,0.0) [0.0|31.0] "" CGW,IBOX +// SG_ CF_Clu_FlexSteerSW : 23|1@1+ (1.0,0.0) [0.0|1.0] "" MDPS +// SG_ CF_Clu_DTE : 24|10@1+ (1.0,0.0) [0.0|1023.0] "" DATC +// SG_ CF_Clu_TripUnit : 34|2@1+ (1.0,0.0) [0.0|3.0] "" DATC +// SG_ CF_Clu_SWL_Stat : 36|3@1+ (1.0,0.0) [0.0|7.0] "" ACU,EMS +// SG_ CF_Clu_ActiveEcoSW : 39|1@1+ (1.0,0.0) [0.0|1.0] "" DATC,EMS,TCU +// SG_ CF_Clu_EcoDriveInf : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CUBIS,EMS,IAP,IBOX +// SG_ CF_Clu_IsaMainSW : 43|1@1+ (1.0,0.0) [0.0|1.0] "" EMS +// SG_ CF_Clu_LdwsLkasSW : 56|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS +// SG_ CF_Clu_AltLStatus : 59|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,DATC,EMS +// SG_ CF_Clu_AliveCnt2 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,LDWS_LKAS if (bus == pt_bus) { // driver torque if (addr == 0xea) { @@ -168,6 +242,7 @@ static void hyundai_canfd_rx_hook(const CANPacket_t *to_push) { } // cruise buttons + // todo: allow paddle shifter presses through const int button_addr = hyundai_canfd_alt_buttons ? 0x1aa : 0x1cf; if (addr == button_addr) { bool main_button = false; @@ -243,16 +318,83 @@ static bool hyundai_canfd_tx_hook(const CANPacket_t *to_send) { } // cruise buttons check - if (addr == 0x1cf) { - int button = GET_BYTE(to_send, 2) & 0x7U; - bool is_cancel = (button == HYUNDAI_BTN_CANCEL); - bool is_resume = (button == HYUNDAI_BTN_RESUME); + /* +BO_ 463 CRUISE_BUTTONS: 8 XXX + SG_ _CHECKSUM : 0|8@1+ (1,0) [0|65535] "" XXX + SG_ LKAS_BTN : 23|1@1+ (1,0) [0|1] "" XXX + SG_ SET_ME_1 : 29|1@1+ (1,0) [0|1] "" XXX + SG_ ADAPTIVE_CRUISE_MAIN_BTN : 19|1@1+ (1,0) [0|1] "" XXX + SG_ NORMAL_CRUISE_MAIN_BTN : 21|1@1+ (1,0) [0|1] "" XXX + SG_ COUNTER : 12|4@1+ (1,0) [0|255] "" XXX + SG_ CRUISE_BUTTONS : 16|3@1+ (1,0) [0|3] "" XXX + */ - bool allowed = (is_cancel && cruise_engaged_prev) || (is_resume && controls_allowed); - if (!allowed) { - tx = false; - } - } + // Pass all desired buttons for now + // if (addr == 0x1cf) { + // int button = GET_BYTE(to_send, 2) & 0x7U; + // bool is_cancel = (button == HYUNDAI_BTN_CANCEL); + // bool is_resume = (button == HYUNDAI_BTN_RESUME); + // bool is_set = (button == HYUNDAI_BTN_SET); + + // bool allowed = + // (is_cancel && cruise_engaged_prev) || + // (is_resume && controls_allowed); + // (is_set && controls_allowed) + // ; + + // if (!allowed) { + // tx = false; + // } + // } + + + + // 'alt' buttons check + /* + +BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 24|4@1+ (1,0) [0|15] "" XXX + SG_ SET_ME_1 : 28|2@1+ (1,0) [0|3] "" XXX + SG_ DISTANCE_UNIT : 30|1@1+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 31|3@1+ (1,0) [0|7] "" XXX + SG_ ADAPTIVE_CRUISE_MAIN_BTN : 34|1@1+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 35|1@1+ (1,0) [0|1] "" XXX + SG_ LFA_BTN : 39|1@1+ (1,0) [0|1] "" XXX + SG_ CRUISE_BUTTONS : 36|3@1+ (1,0) [0|4] "" XXX + SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|1] "" XXX + SG_ NORMAL_CRUISE_MAIN_BTN : 41|1@1+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 42|2@1+ (1,0) [0|3] "" XXX + SG_ SET_ME_2 : 44|3@1+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_6 : 47|1@1+ (1,0) [0|1] "" XXX + SG_ BYTE6 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE7 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE8 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE9 : 72|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE10 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE11 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE12 : 96|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE13 : 104|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX +*/ + +// HVAC +/* +BO_ 1151 HVAC_TOUCH_BUTTONS: 8 XXX + SG_ AUTO_BUTTON : 8|1@0+ (1,0) [0|1] "" XXX + SG_ SYNC_BUTTON : 12|1@0+ (1,0) [0|1] "" XXX + SG_ FR_DEFROST_BUTTON : 20|1@0+ (1,0) [0|1] "" XXX + SG_ RR_DEFROST_BUTTON : 22|1@0+ (1,0) [0|1] "" XXX + SG_ FAN_SPEED_UP_BUTTON : 24|1@0+ (1,0) [0|1] "" XXX + SG_ FAN_SPEED_DOWN_BUTTON : 26|1@0+ (1,0) [0|1] "" XXX + SG_ AIR_DIRECTION_BUTTON : 28|1@0+ (1,0) [0|1] "" XXX + SG_ AC_BUTTON : 40|1@0+ (1,0) [0|1] "" XXX + SG_ DRIVER_ONLY_BUTTON : 44|1@0+ (1,0) [0|1] "" XXX + SG_ RECIRC_BUTTON : 48|1@0+ (1,0) [0|1] "" XXX + SG_ HEAT_BUTTON : 52|1@0+ (1,0) [0|1] "" XXX + */ // UDS: only tester present ("\x02\x3E\x80\x00\x00\x00\x00\x00") allowed on diagnostics address if ((addr == 0x730) && hyundai_canfd_hda2) { diff --git a/panda/board/safety/safety_hyundai_canfd.org b/panda/board/safety/safety_hyundai_canfd.org new file mode 100644 index 0000000..ba1a266 --- /dev/null +++ b/panda/board/safety/safety_hyundai_canfd.org @@ -0,0 +1,360 @@ +#include "safety_hyundai_common.h" + +const SteeringLimits HYUNDAI_CANFD_STEERING_LIMITS = { + .max_steer = 270, + .max_rt_delta = 112, + .max_rt_interval = 250000, + .max_rate_up = 2, + .max_rate_down = 3, + .driver_torque_allowance = 250, + .driver_torque_factor = 2, + .type = TorqueDriverLimited, + + // the EPS faults when the steering angle is above a certain threshold for too long. to prevent this, + // we allow setting torque actuation bit to 0 while maintaining the requested torque value for two consecutive frames + .min_valid_request_frames = 89, + .max_invalid_request_frames = 2, + .min_valid_request_rt_interval = 810000, // 810ms; a ~10% buffer on cutting every 90 frames + .has_steer_req_tolerance = true, +}; + +const CanMsg HYUNDAI_CANFD_HDA2_TX_MSGS[] = { + {0x50, 0, 16}, // LKAS + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x2A4, 0, 24}, // CAM_0x2A4 +}; + +const CanMsg HYUNDAI_CANFD_HDA2_ALT_STEERING_TX_MSGS[] = { + {0x110, 0, 32}, // LKAS_ALT + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x362, 0, 32}, // CAM_0x362 +}; + +const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { + {0x50, 0, 16}, // LKAS + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x2A4, 0, 24}, // CAM_0x2A4 + {0x51, 0, 32}, // ADRV_0x51 + {0x730, 1, 8}, // tester present for ADAS ECU disable + {0x12A, 1, 16}, // LFA + {0x160, 1, 16}, // ADRV_0x160 + {0x1E0, 1, 16}, // LFAHDA_CLUSTER + {0x1A0, 1, 32}, // CRUISE_INFO + {0x1EA, 1, 32}, // ADRV_0x1ea + {0x200, 1, 8}, // ADRV_0x200 + {0x345, 1, 8}, // ADRV_0x345 + {0x1DA, 1, 32}, // ADRV_0x1da +}; + +const CanMsg HYUNDAI_CANFD_HDA1_TX_MSGS[] = { + {0x12A, 0, 16}, // LFA + {0x1A0, 0, 32}, // CRUISE_INFO + {0x1CF, 2, 8}, // CRUISE_BUTTON + {0x1E0, 0, 16}, // LFAHDA_CLUSTER +}; + + +// *** Addresses checked in rx hook *** +// EV, ICE, HYBRID: ACCELERATOR (0x35), ACCELERATOR_BRAKE_ALT (0x100), ACCELERATOR_ALT (0x105) +#define HYUNDAI_CANFD_COMMON_RX_CHECKS(pt_bus) \ + {.msg = {{0x35, (pt_bus), 32, .check_checksum = true, .max_counter = 0xffU, .frequency = 100U}, \ + {0x100, (pt_bus), 32, .check_checksum = true, .max_counter = 0xffU, .frequency = 100U}, \ + {0x105, (pt_bus), 32, .check_checksum = true, .max_counter = 0xffU, .frequency = 100U}}}, \ + {.msg = {{0x175, (pt_bus), 24, .check_checksum = true, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ + {.msg = {{0xa0, (pt_bus), 24, .check_checksum = true, .max_counter = 0xffU, .frequency = 100U}, { 0 }, { 0 }}}, \ + {.msg = {{0xea, (pt_bus), 24, .check_checksum = true, .max_counter = 0xffU, .frequency = 100U}, { 0 }, { 0 }}}, \ + +#define HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(pt_bus) \ + {.msg = {{0x1cf, (pt_bus), 8, .check_checksum = false, .max_counter = 0xfU, .frequency = 50U}, { 0 }, { 0 }}}, \ + +#define HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(pt_bus) \ + {.msg = {{0x1aa, (pt_bus), 16, .check_checksum = false, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ + +// SCC_CONTROL (from ADAS unit or camera) +#define HYUNDAI_CANFD_SCC_ADDR_CHECK(scc_bus) \ + {.msg = {{0x1a0, (scc_bus), 32, .check_checksum = true, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ + + +// *** Non-HDA2 checks *** +// Camera sends SCC messages on HDA1. +// Both button messages exist on some platforms, so we ensure we track the correct one using flag +RxCheck hyundai_canfd_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; +RxCheck hyundai_canfd_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; + +// Longitudinal checks for HDA1 +RxCheck hyundai_canfd_long_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) +}; +RxCheck hyundai_canfd_long_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) +}; + +// Radar sends SCC messages on these cars instead of camera +RxCheck hyundai_canfd_radar_scc_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(0) +}; +RxCheck hyundai_canfd_radar_scc_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(0) +}; + + +// *** HDA2 checks *** +// E-CAN is on bus 1, ADAS unit sends SCC messages on HDA2. +// Does not use the alt buttons message +RxCheck hyundai_canfd_hda2_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(1) + HYUNDAI_CANFD_SCC_ADDR_CHECK(1) +}; +RxCheck hyundai_canfd_hda2_long_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(1) +}; + + + +const int HYUNDAI_PARAM_CANFD_ALT_BUTTONS = 32; +const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; +bool hyundai_canfd_alt_buttons = false; +bool hyundai_canfd_hda2_alt_steering = false; + + +int hyundai_canfd_hda2_get_lkas_addr(void) { + return hyundai_canfd_hda2_alt_steering ? 0x110 : 0x50; +} + +static uint8_t hyundai_canfd_get_counter(const CANPacket_t *to_push) { + uint8_t ret = 0; + if (GET_LEN(to_push) == 8U) { + ret = GET_BYTE(to_push, 1) >> 4; + } else { + ret = GET_BYTE(to_push, 2); + } + return ret; +} + +static uint32_t hyundai_canfd_get_checksum(const CANPacket_t *to_push) { + uint32_t chksum = GET_BYTE(to_push, 0) | (GET_BYTE(to_push, 1) << 8); + return chksum; +} + +static void hyundai_canfd_rx_hook(const CANPacket_t *to_push) { + int bus = GET_BUS(to_push); + int addr = GET_ADDR(to_push); + + const int pt_bus = hyundai_canfd_hda2 ? 1 : 0; + const int scc_bus = hyundai_camera_scc ? 2 : pt_bus; + + if (bus == pt_bus) { + // driver torque + if (addr == 0xea) { + int torque_driver_new = ((GET_BYTE(to_push, 11) & 0x1fU) << 8U) | GET_BYTE(to_push, 10); + torque_driver_new -= 4095; + update_sample(&torque_driver, torque_driver_new); + } + + // cruise buttons + const int button_addr = hyundai_canfd_alt_buttons ? 0x1aa : 0x1cf; + if (addr == button_addr) { + bool main_button = false; + int cruise_button = 0; + if (addr == 0x1cf) { + cruise_button = GET_BYTE(to_push, 2) & 0x7U; + main_button = GET_BIT(to_push, 19U); + } else { + cruise_button = (GET_BYTE(to_push, 4) >> 4) & 0x7U; + main_button = GET_BIT(to_push, 34U); + } + hyundai_common_cruise_buttons_check(cruise_button, main_button); + } + + // gas press, different for EV, hybrid, and ICE models + if ((addr == 0x35) && hyundai_ev_gas_signal) { + gas_pressed = GET_BYTE(to_push, 5) != 0U; + } else if ((addr == 0x105) && hyundai_hybrid_gas_signal) { + gas_pressed = GET_BIT(to_push, 103U) || (GET_BYTE(to_push, 13) != 0U) || GET_BIT(to_push, 112U); + } else if ((addr == 0x100) && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { + gas_pressed = GET_BIT(to_push, 176U); + } else { + } + + // brake press + if (addr == 0x175) { + brake_pressed = GET_BIT(to_push, 81U); + } + + // vehicle moving + if (addr == 0xa0) { + uint32_t front_left_speed = GET_BYTES(to_push, 8, 2); + uint32_t rear_right_speed = GET_BYTES(to_push, 14, 2); + vehicle_moving = (front_left_speed > HYUNDAI_STANDSTILL_THRSLD) || (rear_right_speed > HYUNDAI_STANDSTILL_THRSLD); + } + } + + if (bus == scc_bus) { + // cruise state + if ((addr == 0x1a0) && !hyundai_longitudinal) { + // 1=enabled, 2=driver override + int cruise_status = ((GET_BYTE(to_push, 8) >> 4) & 0x7U); + bool cruise_engaged = (cruise_status == 1) || (cruise_status == 2); + hyundai_common_cruise_state_check(cruise_engaged); + } + } + + const int steer_addr = hyundai_canfd_hda2 ? hyundai_canfd_hda2_get_lkas_addr() : 0x12a; + bool stock_ecu_detected = (addr == steer_addr) && (bus == 0); + if (hyundai_longitudinal) { + // on HDA2, ensure ADRV ECU is still knocked out + // on others, ensure accel msg is blocked from camera + const int stock_scc_bus = hyundai_canfd_hda2 ? 1 : 0; + stock_ecu_detected = stock_ecu_detected || ((addr == 0x1a0) && (bus == stock_scc_bus)); + } + generic_rx_checks(stock_ecu_detected); + +} + +static bool hyundai_canfd_tx_hook(const CANPacket_t *to_send) { + bool tx = true; + int addr = GET_ADDR(to_send); + + // steering + const int steer_addr = (hyundai_canfd_hda2 && !hyundai_longitudinal) ? hyundai_canfd_hda2_get_lkas_addr() : 0x12a; + if (addr == steer_addr) { + int desired_torque = (((GET_BYTE(to_send, 6) & 0xFU) << 7U) | (GET_BYTE(to_send, 5) >> 1U)) - 1024U; + bool steer_req = GET_BIT(to_send, 52U); + + if (steer_torque_cmd_checks(desired_torque, steer_req, HYUNDAI_CANFD_STEERING_LIMITS)) { + tx = false; + } + } + + // cruise buttons check + if (addr == 0x1cf) { + int button = GET_BYTE(to_send, 2) & 0x7U; + bool is_cancel = (button == HYUNDAI_BTN_CANCEL); + bool is_resume = (button == HYUNDAI_BTN_RESUME); + + bool allowed = (is_cancel && cruise_engaged_prev) || (is_resume && controls_allowed); + if (!allowed) { + tx = false; + } + } + + // UDS: only tester present ("\x02\x3E\x80\x00\x00\x00\x00\x00") allowed on diagnostics address + if ((addr == 0x730) && hyundai_canfd_hda2) { + if ((GET_BYTES(to_send, 0, 4) != 0x00803E02U) || (GET_BYTES(to_send, 4, 4) != 0x0U)) { + tx = false; + } + } + + // ACCEL: safety check + if (addr == 0x1a0) { + int desired_accel_raw = (((GET_BYTE(to_send, 17) & 0x7U) << 8) | GET_BYTE(to_send, 16)) - 1023U; + int desired_accel_val = ((GET_BYTE(to_send, 18) << 4) | (GET_BYTE(to_send, 17) >> 4)) - 1023U; + + bool violation = false; + + if (hyundai_longitudinal) { + violation |= longitudinal_accel_checks(desired_accel_raw, HYUNDAI_LONG_LIMITS); + violation |= longitudinal_accel_checks(desired_accel_val, HYUNDAI_LONG_LIMITS); + } else { + // only used to cancel on here + if ((desired_accel_raw != 0) || (desired_accel_val != 0)) { + violation = true; + } + } + + if (violation) { + tx = false; + } + } + + return tx; +} + +static int hyundai_canfd_fwd_hook(int bus_num, int addr) { + int bus_fwd = -1; + + if (bus_num == 0) { + bus_fwd = 2; + } + if (bus_num == 2) { + // LKAS for HDA2, LFA for HDA1 + int hda2_lfa_block_addr = hyundai_canfd_hda2_alt_steering ? 0x362 : 0x2a4; + bool is_lkas_msg = ((addr == hyundai_canfd_hda2_get_lkas_addr()) || (addr == hda2_lfa_block_addr)) && hyundai_canfd_hda2; + bool is_lfa_msg = ((addr == 0x12a) && !hyundai_canfd_hda2); + + // HUD icons + bool is_lfahda_msg = ((addr == 0x1e0) && !hyundai_canfd_hda2); + + // CRUISE_INFO for non-HDA2, we send our own longitudinal commands + bool is_scc_msg = ((addr == 0x1a0) && hyundai_longitudinal && !hyundai_canfd_hda2); + + bool block_msg = is_lkas_msg || is_lfa_msg || is_lfahda_msg || is_scc_msg; + if (!block_msg) { + bus_fwd = 0; + } + } + + return bus_fwd; +} + +static safety_config hyundai_canfd_init(uint16_t param) { + hyundai_common_init(param); + + gen_crc_lookup_table_16(0x1021, hyundai_canfd_crc_lut); + hyundai_canfd_alt_buttons = GET_FLAG(param, HYUNDAI_PARAM_CANFD_ALT_BUTTONS); + hyundai_canfd_hda2_alt_steering = GET_FLAG(param, HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING); + + // no long for radar-SCC HDA1 yet + if (!hyundai_canfd_hda2 && !hyundai_camera_scc) { + hyundai_longitudinal = false; + } + + safety_config ret; + if (hyundai_longitudinal) { + if (hyundai_canfd_hda2) { + ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } else { + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_long_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_long_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); + } + } else { + if (hyundai_canfd_hda2) { + ret = hyundai_canfd_hda2_alt_steering ? BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks, HYUNDAI_CANFD_HDA2_ALT_STEERING_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks, HYUNDAI_CANFD_HDA2_TX_MSGS); + } else if (!hyundai_camera_scc) { + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_radar_scc_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_radar_scc_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); + } else { + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); + } + } + + return ret; +} + +const safety_hooks hyundai_canfd_hooks = { + .init = hyundai_canfd_init, + .rx = hyundai_canfd_rx_hook, + .tx = hyundai_canfd_tx_hook, + .fwd = hyundai_canfd_fwd_hook, + .get_counter = hyundai_canfd_get_counter, + .get_checksum = hyundai_canfd_get_checksum, + .compute_checksum = hyundai_common_canfd_compute_checksum, +}; \ No newline at end of file diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py index cae47f1..94e4dfb 100644 --- a/selfdrive/car/hyundai/carcontroller.py +++ b/selfdrive/car/hyundai/carcontroller.py @@ -200,9 +200,9 @@ class CarController(CarControllerBase): if CC.cruiseControl.cancel: if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: # pass - can_sends.append(hyundaicanfd.create_acc_cancel(self.packer, self.CP, self.CAN, CS.cruise_info)) + can_sends.append(hyundaicanfd.create_buttons_alt(self.packer, self.CP, self.CAN, CS.buttons_counter+1, Buttons.CANCEL)) self.last_button_frame = self.frame - # CS.lkas_trigger_result = 1 + CS.lkas_trigger_result = 1 else: for _ in range(20): can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter+1, Buttons.CANCEL)) diff --git a/selfdrive/car/hyundai/hyundaicanfd.py b/selfdrive/car/hyundai/hyundaicanfd.py index b647851..e5b64e5 100644 --- a/selfdrive/car/hyundai/hyundaicanfd.py +++ b/selfdrive/car/hyundai/hyundaicanfd.py @@ -88,15 +88,16 @@ def create_buttons(packer, CP, CAN, cnt, btn): bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM return packer.make_can_msg("CRUISE_BUTTONS", bus, values) -# def create_buttons_alt(packer, CP, CAN, cnt, btn): -# values = { -# "COUNTER": cnt, -# "SET_ME_1": 1, -# "CRUISE_BUTTONS": btn, -# } +def create_buttons_alt(packer, CP, CAN, cnt, btn): + values = { + "COUNTER": cnt, + "SET_ME_1": 1, + "SET_ME_2": 2, + "CRUISE_BUTTONS": btn, + } -# bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM -# return packer.make_can_msg("CRUISE_BUTTONS_ALT", bus, values) + bus = CAN.ECAN # if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM + return packer.make_can_msg("CRUISE_BUTTONS_ALT", bus, values) def create_acc_cancel(packer, CP, CAN, cruise_info_copy): # why are we executing this at all? @@ -123,7 +124,7 @@ def create_acc_cancel(packer, CP, CAN, cruise_info_copy): "CRUISE_STANDSTILL", ]} values.update({ - "ACCMode": 1, # testing 1 instead of 4 + "ACCMode": 4, # testing 1 instead of 4 "aReqRaw": 0.0, "aReqValue": 0.0, }) diff --git a/openpilot/update.sh b/selfdrive/clearpilot/behavior/_abstract.py similarity index 100% rename from openpilot/update.sh rename to selfdrive/clearpilot/behavior/_abstract.py diff --git a/selfdrive/clearpilot/behavior/lanechange.py b/selfdrive/clearpilot/behavior/conditional_experimental.py similarity index 100% rename from selfdrive/clearpilot/behavior/lanechange.py rename to selfdrive/clearpilot/behavior/conditional_experimental.py diff --git a/selfdrive/clearpilot/behavior/lane_change_no_lateral.py b/selfdrive/clearpilot/behavior/lane_change_no_lateral.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/behavior/lane_change_nudge.py b/selfdrive/clearpilot/behavior/lane_change_nudge.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/behavior/lane_change_nudgeless.py b/selfdrive/clearpilot/behavior/lane_change_nudgeless.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/behavior/long_control_button_spam.py b/selfdrive/clearpilot/behavior/long_control_button_spam.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/behavior/long_control_openpilot.py b/selfdrive/clearpilot/behavior/long_control_openpilot.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/behavior/stock_lateral.py b/selfdrive/clearpilot/behavior/stock_lateral.py new file mode 100644 index 0000000..e69de29 diff --git a/selfdrive/clearpilot/readme.txt b/selfdrive/clearpilot/readme.txt index e69de29..6db8860 100644 --- a/selfdrive/clearpilot/readme.txt +++ b/selfdrive/clearpilot/readme.txt @@ -0,0 +1 @@ +This is a nodejs service diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py index c050ca2..1c4854d 100644 --- a/selfdrive/manager/process_config.py +++ b/selfdrive/manager/process_config.py @@ -66,8 +66,8 @@ procs = [ NativeProcess("stream_encoderd", "system/loggerd", ["./encoderd", "--stream"], notcar), NativeProcess("loggerd", "system/loggerd", ["./loggerd"], allow_logging), NativeProcess("modeld", "selfdrive/modeld", ["./modeld"], only_onroad), - NativeProcess("mapsd", "selfdrive/navd", ["./mapsd"], only_onroad), - PythonProcess("navmodeld", "selfdrive.modeld.navmodeld", only_onroad), + #NativeProcess("mapsd", "selfdrive/navd", ["./mapsd"], only_onroad), + #PythonProcess("navmodeld", "selfdrive.modeld.navmodeld", only_onroad), NativeProcess("sensord", "system/sensord", ["./sensord"], only_onroad, enabled=not PC), NativeProcess("ui", "selfdrive/ui", ["./ui"], always_run, watchdog_max_dt=(5 if not PC else None), always_watchdog=only_offroad), PythonProcess("soundd", "selfdrive.ui.soundd", only_onroad), @@ -78,13 +78,13 @@ procs = [ PythonProcess("controlsd", "selfdrive.controls.controlsd", only_onroad), PythonProcess("deleter", "system.loggerd.deleter", always_run), PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", driverview, enabled=(not PC or WEBCAM)), - PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI), + #PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI), #PythonProcess("ugpsd", "system.ugpsd", only_onroad, enabled=TICI), - PythonProcess("navd", "selfdrive.navd.navd", only_onroad), + #PythonProcess("navd", "selfdrive.navd.navd", only_onroad), PythonProcess("pandad", "selfdrive.boardd.pandad", always_run), PythonProcess("paramsd", "selfdrive.locationd.paramsd", only_onroad), - NativeProcess("ubloxd", "system/ubloxd", ["./ubloxd"], ublox, enabled=TICI), - PythonProcess("pigeond", "system.ubloxd.pigeond", ublox, enabled=TICI), + #NativeProcess("ubloxd", "system/ubloxd", ["./ubloxd"], ublox, enabled=TICI), + #PythonProcess("pigeond", "system.ubloxd.pigeond", ublox, enabled=TICI), PythonProcess("plannerd", "selfdrive.controls.plannerd", only_onroad), PythonProcess("radard", "selfdrive.controls.radard", only_onroad), PythonProcess("thermald", "selfdrive.thermald.thermald", always_run), diff --git a/system/clearpilot/configure/defaults.sh b/system/clearpilot/install/defaults.sh similarity index 100% rename from system/clearpilot/configure/defaults.sh rename to system/clearpilot/install/defaults.sh diff --git a/system/clearpilot/install/plan.txt b/system/clearpilot/install/plan.txt new file mode 100644 index 0000000..bdbd4d5 --- /dev/null +++ b/system/clearpilot/install/plan.txt @@ -0,0 +1,14 @@ +- test - does wiping the device also wipe installed apt packages? + if yes, then no uninstaller needed. + +- installer will download models and support packages as part of its install process. + +- if that isn't possible on first init, it will prompt for wifi and then get the support packages. + +- startup wizard: + - verify this is a tested car + - describe system is extremely experimental and use at your own risk + - describe that the use of certain options may be illegal in your jursdiction and you accept all risk + and liability for use of options which are against local regulations and any consequences of their use + - walk through the features and prompt if each one should be enabled / disabled + \ No newline at end of file diff --git a/system/clearpilot/configure/provision.sh b/system/clearpilot/install/provision.sh similarity index 91% rename from system/clearpilot/configure/provision.sh rename to system/clearpilot/install/provision.sh index 128d3ae..68ea1ed 100644 --- a/system/clearpilot/configure/provision.sh +++ b/system/clearpilot/install/provision.sh @@ -19,7 +19,9 @@ # Todo: Detect if provisioned for current version. If not, start qt_shell subshell for provision. apt-get update -apt-get install -y nodejs npm imagemagick ccrypt qtwebengine5-dev + +apt-get install -y nodejs npm imagemagick ccrypt qtwebengine5-dev libqt5serialbus5 \ + libqt5serialbus5-bin libqt5serialbus5-plugins libqt5serialbus5-dev libqt5charts5-dev # python3-pyqt5 pywayland imagemagick qtwebengine5-dev # python3-dev python3-pyqt5.qtwebengine pybind11-dev