From bcf78fec02e6267cd53640cce64b4effb16a826d Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sun, 26 Apr 2026 15:40:15 -0500 Subject: [PATCH] i6 --- .../opendbc/car/hyundai/carcontroller.py | 9 +-- opendbc_repo/opendbc/car/hyundai/carstate.py | 10 +++ .../opendbc/car/hyundai/hyundaicanfd.py | 50 +++++-------- .../opendbc/car/hyundai/tests/test_hyundai.py | 68 +++++++++++------- .../opendbc/safety/modes/hyundai_canfd.h | 1 - .../safety/tests/test_hyundai_canfd.py | 2 +- panda/board/obj/body_h7.bin.signed | Bin 76652 -> 76636 bytes panda/board/obj/body_h7/bootstub.elf | Bin 112692 -> 112692 bytes panda/board/obj/body_h7/main.bin | Bin 76516 -> 76500 bytes panda/board/obj/body_h7/main.elf | Bin 368520 -> 368520 bytes panda/board/obj/bootstub.body_h7.bin | Bin 12644 -> 12644 bytes panda/board/obj/bootstub.panda.bin | Bin 11068 -> 11068 bytes panda/board/obj/bootstub.panda_h7.bin | Bin 18784 -> 18784 bytes panda/board/obj/bootstub.panda_h7_remote.bin | Bin 18784 -> 18784 bytes panda/board/obj/bootstub.panda_jungle_h7.bin | Bin 13956 -> 13956 bytes panda/board/obj/bootstub.panda_remote.bin | Bin 11068 -> 11068 bytes panda/board/obj/gitversion.h | 2 +- panda/board/obj/panda.bin.signed | Bin 68356 -> 68356 bytes panda/board/obj/panda/bootstub.elf | Bin 100760 -> 100760 bytes panda/board/obj/panda/main.bin | Bin 68220 -> 68220 bytes panda/board/obj/panda/main.elf | Bin 332444 -> 332444 bytes panda/board/obj/panda_h7.bin.signed | Bin 84588 -> 84572 bytes panda/board/obj/panda_h7/bootstub.elf | Bin 152728 -> 152728 bytes panda/board/obj/panda_h7/main.bin | Bin 84452 -> 84436 bytes panda/board/obj/panda_h7/main.elf | Bin 411912 -> 411912 bytes panda/board/obj/panda_h7_remote.bin.signed | Bin 84532 -> 84516 bytes panda/board/obj/panda_h7_remote/bootstub.elf | Bin 152736 -> 152736 bytes panda/board/obj/panda_h7_remote/main.bin | Bin 84396 -> 84380 bytes panda/board/obj/panda_h7_remote/main.elf | Bin 411836 -> 411836 bytes panda/board/obj/panda_jungle_h7.bin.signed | Bin 78508 -> 78492 bytes panda/board/obj/panda_jungle_h7/bootstub.elf | Bin 123936 -> 123936 bytes panda/board/obj/panda_jungle_h7/main.bin | Bin 78372 -> 78356 bytes panda/board/obj/panda_jungle_h7/main.elf | Bin 376648 -> 376648 bytes panda/board/obj/panda_remote.bin.signed | Bin 68312 -> 68312 bytes panda/board/obj/panda_remote/bootstub.elf | Bin 100768 -> 100768 bytes panda/board/obj/panda_remote/main.bin | Bin 68176 -> 68176 bytes panda/board/obj/panda_remote/main.elf | Bin 332484 -> 332484 bytes panda/board/obj/version | 2 +- 38 files changed, 76 insertions(+), 68 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carcontroller.py b/opendbc_repo/opendbc/car/hyundai/carcontroller.py index 3f7e43540..10c9dbb80 100644 --- a/opendbc_repo/opendbc/car/hyundai/carcontroller.py +++ b/opendbc_repo/opendbc/car/hyundai/carcontroller.py @@ -19,7 +19,6 @@ MAX_ANGLE = 85 MAX_ANGLE_FRAMES = 89 MAX_ANGLE_CONSECUTIVE_FRAMES = 2 CANFD_BLINDSPOT_STATUS_STALE_NS = 200_000_000 -IONIQ_6_LANE_CHANGE_UI_MIN_SPEED = 20 * CV.MPH_TO_MS def process_hud_alert(enabled, fingerprint, hud_control): @@ -213,7 +212,8 @@ class CarController(CarControllerBase): # steering control can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled, - apply_steer_req, apply_torque, apply_angle)) + apply_steer_req, apply_torque, apply_angle, + CS.stock_lfa_msg)) # prevent LFA from activating on LKA steering cars by sending "no lane lines detected" to ADAS ECU if self.frame % 5 == 0 and lka_steering: @@ -222,10 +222,7 @@ class CarController(CarControllerBase): # LFA and HDA icons if self.frame % 5 == 0 and (not lka_steering or lka_steering_long): - can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled)) - - if self.CP.carFingerprint == CAR.HYUNDAI_IONIQ_6 and self.long_active_ecu and CC.enabled and CS.out.vEgo >= IONIQ_6_LANE_CHANGE_UI_MIN_SPEED: - can_sends.append(hyundaicanfd.create_ioniq_6_lane_change_status(self.CAN, self.frame, CC.leftBlinker, CC.rightBlinker)) + can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled, CS.stock_lfahda_cluster_msg)) # blinkers if lka_steering and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index faf563ff8..717ea89c7 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -86,6 +86,8 @@ class CarState(CarStateBase): self.buttons_counter = 0 self.cruise_info = {} + self.stock_lfa_msg = {} + self.stock_lfahda_cluster_msg = {} self.blindspots_rear_corners = {} self.blindspots_front_corner_1 = {} self.blindspots_rear_corners_ts = 0 @@ -361,6 +363,10 @@ class CarState(CarStateBase): if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING: self.lfa_block_msg = copy.copy(cp_cam.vl["CAM_0x362"] if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT else cp_cam.vl["CAM_0x2a4"]) + if cp.ts_nanos["LFA"]["CHECKSUM"] > 0: + self.stock_lfa_msg = copy.copy(cp.vl["LFA"]) + if cp.ts_nanos["LFAHDA_CLUSTER"]["CHECKSUM"] > 0: + self.stock_lfahda_cluster_msg = copy.copy(cp.vl["LFAHDA_CLUSTER"]) ret.buttonEvents = [*create_button_events(self.cruise_buttons[-1], prev_cruise_buttons, BUTTONS_DICT), *create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise}), @@ -397,6 +403,10 @@ class CarState(CarStateBase): msgs.append(("FR_CMR_02_100ms", 10)) else: cam_msgs.append(("FR_CMR_02_100ms", 0)) # optional: not all non-LKA CANFD cars have this on CAM bus + msgs += [ + ("LFA", 0), # optional: may stop once OP takes over, but preserve stock UI fields when present + ("LFAHDA_CLUSTER", 0), # optional: carries cluster icon state on some variants + ] if CP.flags & HyundaiFlags.EV: msgs.append(("DRIVE_MODE_EV", 0)) # optional: not all CAN-FD EV variants publish drive mode msgs.append(("STEERING_WHEEL_MEDIA_BUTTONS", 0)) # optional: absent or slower on some CAN-FD variants diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 2bce97953..f2b03d48f 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -91,24 +91,29 @@ def _create_angle_adas_cmd_msg(packer, CAN, apply_angle: float, lat_active: bool return packer.make_can_msg("ADAS_CMD_35_10ms", CAN.ECAN, values) -def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_torque, apply_angle): - common_values = { +def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_torque, apply_angle, lfa_base_values=None): + control_values = { "LKA_MODE": 2, "LKA_ICON": 2 if enabled else 1, "TORQUE_REQUEST": 0 if CP.flags & HyundaiFlags.CANFD_ANGLE_STEERING else apply_torque, "LKA_ASSIST": 0, "STEER_REQ": 0 if CP.flags & HyundaiFlags.CANFD_ANGLE_STEERING else (1 if lat_active else 0), "STEER_MODE": 0, - "HAS_LANE_SAFETY": 0, # hide LKAS settings - "NEW_SIGNAL_2": 0, - "DAMP_FACTOR": 100, # can potentially tuned for better perf [3, 200] } - lkas_values = copy.copy(common_values) + lkas_values = copy.copy(control_values) lkas_values["LKA_AVAILABLE"] = 0 - lfa_values = copy.copy(common_values) - lfa_values["NEW_SIGNAL_1"] = 0 + if lfa_base_values: + # Preserve stock UI/status fields and only override the actuation-relevant signals. + lfa_values = {k: v for k, v in lfa_base_values.items() if k not in ("CHECKSUM", "COUNTER")} + lfa_values.update(control_values) + else: + lfa_values = copy.copy(control_values) + lfa_values["HAS_LANE_SAFETY"] = 0 # hide LKAS settings + lfa_values["NEW_SIGNAL_1"] = 0 + lfa_values["NEW_SIGNAL_2"] = 0 + lfa_values["DAMP_FACTOR"] = 100 # can potentially tuned for better perf [3, 200] if CP.flags & HyundaiFlags.CANFD_ANGLE_STEERING and CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT: lkas_values["ADAS_StrAnglReqVal"] = apply_angle @@ -188,36 +193,15 @@ def create_acc_cancel(packer, CP, CAN, cruise_info_copy): return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) -def create_lfahda_cluster(packer, CAN, enabled): - values = { +def create_lfahda_cluster(packer, CAN, enabled, base_values=None): + values = {k: v for k, v in base_values.items() if k not in ("CHECKSUM", "COUNTER")} if base_values else {} + values.update({ "HDA_ICON": 1 if enabled else 0, "LFA_ICON": 2 if enabled else 0, - } + }) return packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values) -IONIQ_6_LANE_CHANGE_UI_ADDR = 0x120 -IONIQ_6_LANE_CHANGE_UI_TEMPLATE = bytearray.fromhex("0000000000000005ffd9671f46454645d90200000000000000000a0000002040") -IONIQ_6_LANE_CHANGE_UI_BASE = (0x45, 0xD9) -IONIQ_6_LANE_CHANGE_UI_RIGHT = (0x45, 0xDA) -IONIQ_6_LANE_CHANGE_UI_LEFT = (0x46, 0xDD) - - -def create_ioniq_6_lane_change_status(CAN, counter: int, left_blinker: bool, right_blinker: bool): - dat = bytearray(IONIQ_6_LANE_CHANGE_UI_TEMPLATE) - dat[2] = counter & 0xFF - - state = IONIQ_6_LANE_CHANGE_UI_BASE - if left_blinker: - state = IONIQ_6_LANE_CHANGE_UI_LEFT - elif right_blinker: - state = IONIQ_6_LANE_CHANGE_UI_RIGHT - - dat[15], dat[16] = state - dat[0:2] = hkg_can_fd_checksum(IONIQ_6_LANE_CHANGE_UI_ADDR, None, dat).to_bytes(2, "little") - return CanData(IONIQ_6_LANE_CHANGE_UI_ADDR, bytes(dat), CAN.ECAN) - - def create_blindspot_status_messages(packer, CAN, rear_values, front_corner_values, left_blindspot=False, right_blindspot=False): # Reuse the last known-good payload but regenerate the rolling counter/checksum. rear = {k: v for k, v in rear_values.items() if k not in ("CHECKSUM", "COUNTER")} diff --git a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py index f42be0d18..1d961afa9 100644 --- a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py @@ -232,6 +232,49 @@ class TestHyundaiFingerprint: msgs = hyundaicanfd.create_steering_messages(packer, CP, CanBus(CP), True, True, 1.0, 12.3) assert [(addr, bus) for addr, _, bus in msgs] == [(0xCB, CanBus(CP).ECAN)] + def test_ioniq_6_lfa_helper_preserves_stock_ui_fields(self): + CP = CarParams.new_message() + CP.carFingerprint = CAR.HYUNDAI_IONIQ_6 + CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.CANFD_LKA_STEERING) + CP.openpilotLongitudinalControl = True + + packer = CANPacker(DBC[CP.carFingerprint][Bus.pt]) + can_bus = CanBus(CP) + parser = CANParser(DBC[CP.carFingerprint][Bus.pt], [("LFA", 0)], can_bus.ECAN) + + stock_lfa = { + "CHECKSUM": 1234, + "COUNTER": 42, + "LKA_MODE": 6, + "NEW_SIGNAL_1": 3, + "LKA_WARNING": 1, + "LKA_ICON": 1, + "TORQUE_REQUEST": 17, + "STEER_REQ": 0, + "LFA_BUTTON": 1, + "LKA_ASSIST": 1, + "STEER_MODE": 5, + "NEW_SIGNAL_2": 2, + "NEW_SIGNAL_4": 7, + "HAS_LANE_SAFETY": 1, + "DAMP_FACTOR": 0x77, + } + + msgs = hyundaicanfd.create_steering_messages(packer, CP, can_bus, True, True, 123, 0.0, stock_lfa) + lfa_msgs = [msg for msg in msgs if msg[0] == 0x12A] + assert len(lfa_msgs) == 1 + + parser.update([(1, lfa_msgs)]) + + assert parser.can_valid + assert parser.vl["LFA"]["NEW_SIGNAL_1"] == 3 + assert parser.vl["LFA"]["NEW_SIGNAL_2"] == 2 + assert parser.vl["LFA"]["HAS_LANE_SAFETY"] == 1 + assert parser.vl["LFA"]["DAMP_FACTOR"] == 0x77 + assert parser.vl["LFA"]["TORQUE_REQUEST"] == 123 + assert parser.vl["LFA"]["STEER_REQ"] == 1 + assert parser.vl["LFA"]["LKA_ICON"] == 2 + def test_ioniq_6_blindspot_status_helper_regenerates_counter_checksum(self): CP = CarParams.new_message() CP.carFingerprint = CAR.HYUNDAI_IONIQ_6 @@ -283,31 +326,6 @@ class TestHyundaiFingerprint: assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR_ALT"] == 0 assert parser.vl["BLINDSPOTS_FRONT_CORNER_1"]["NEW_SIGNAL_3"] == 1 - def test_ioniq_6_lane_change_ui_helper_regenerates_checksum_and_state(self): - CP = CarParams.new_message() - CP.carFingerprint = CAR.HYUNDAI_IONIQ_6 - CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.CANFD_LKA_STEERING) - - can_bus = CanBus(CP) - - base_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x12, left_blinker=False, right_blinker=False) - right_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x34, left_blinker=False, right_blinker=True) - left_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x56, left_blinker=True, right_blinker=False) - - assert base_msg[0] == 0x120 - assert base_msg[2] == can_bus.ECAN - assert base_msg[1][2] == 0x12 - assert right_msg[1][2] == 0x34 - assert left_msg[1][2] == 0x56 - - assert hyundaicanfd.hkg_can_fd_checksum(base_msg[0], None, bytearray(base_msg[1])) == int.from_bytes(base_msg[1][:2], "little") - assert hyundaicanfd.hkg_can_fd_checksum(right_msg[0], None, bytearray(right_msg[1])) == int.from_bytes(right_msg[1][:2], "little") - assert hyundaicanfd.hkg_can_fd_checksum(left_msg[0], None, bytearray(left_msg[1])) == int.from_bytes(left_msg[1][:2], "little") - - assert (base_msg[1][15], base_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_BASE - assert (right_msg[1][15], right_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_RIGHT - assert (left_msg[1][15], left_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_LEFT - def test_ioniq_6_blindspot_radar_state_decode(self): assert decode_ioniq_6_blindspot_radar_state(0x02) == (False, False) assert decode_ioniq_6_blindspot_radar_state(0x0A) == (False, True) diff --git a/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h b/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h index 08b8339dd..ee50b824f 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai_canfd.h @@ -289,7 +289,6 @@ static safety_config hyundai_canfd_init(uint16_t param) { HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(1) HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(1, true) HYUNDAI_CANFD_BLINDSPOT_DASH_TX_MSGS(1) - {0x120, 1, 32, .check_relay = false}, // IONIQ_6 lane change UI {0x51, 0, 32, .check_relay = false}, // ADRV_0x51 {0x730, 1, 8, .check_relay = false}, // tester present for ADAS ECU disable {0x160, 1, 16, .check_relay = false}, // ADRV_0x160 diff --git a/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py b/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py index d01d04679..9929bae0a 100755 --- a/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py +++ b/opendbc_repo/opendbc/safety/tests/test_hyundai_canfd.py @@ -450,7 +450,7 @@ class TestHyundaiCanfdLKASteeringAltEV(TestHyundaiCanfdBase): class TestHyundaiCanfdLKASteeringLongEV(HyundaiLongitudinalBase, TestHyundaiCanfdLKASteeringEV): - TX_MSGS = [[0x50, 0], [0x120, 1], [0x1CF, 1], [0x2A4, 0], [0x51, 0], [0x730, 1], [0x12a, 1], [0x160, 1], + TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0], [0x51, 0], [0x730, 1], [0x12a, 1], [0x160, 1], [0x1ba, 1], [0x1e0, 1], [0x1e5, 1], [0x1a0, 1], [0x1ea, 1], [0x200, 1], [0x345, 1], [0x1da, 1]] RELAY_MALFUNCTION_ADDRS = {0: (0x50, 0x2a4), 1: (0x1a0,)} # LKAS, CAM_0x2A4, SCC_CONTROL diff --git a/panda/board/obj/body_h7.bin.signed b/panda/board/obj/body_h7.bin.signed index 14720ca7b05480aaca2a6dcc52eaed71363dd8ec..845fa42156207f5096aec49621a74e0b6df442af 100644 GIT binary patch delta 1127 zcmZ9KZ%oZm7{`C-bmMoqsdh_Ra&N0kS2wy@(p)v``nMX|DCVL~r582x#u!st$g-u5 zf18RsUZ`%8L;sMXVH1)`vs=qZwl49aVP$+zzizCvJ^P;LbDnda^E~IcdQ{FH6>-*+ zXO!gg=d>||^s?h&No0t<3QP3-d5_9!7H9|}{yfHTRppgNIvrjv ztbms;F81^-!t^|>0#*WR;*n8@=@foFiAQ*I^kM2b8^@@5T+Ev##D{rj9QSwCP`Se@ z=}pyCcEv&A-{VyoD^*0|gV{lgg5$AeTqmvQZ>#NJi1|osZGS3MlBnFqgU^f+^J|B2 zr6}q1cipJS0GsI}MR|Z3A5eK8{7bNhuvf4-d_!3cB`f*p*+xpzSnY*pXvU$7KUBoT z_E%_EjWC}@f~Zc};IG-hJHc9GU#kC2ItrBvY^YX9r+X642XFn1s3 zZ&WUn1Lm&G%}m^06-0PvwT0yQOr{bNjxR1M{(M*I-F2vV>$Ya)jBNOR@Sj3ODPd4i z?8g@6wXQ+E;Y(1_7%Nl@73T&(RfzY3W`GAluQb!G6Q5)~7D50zupnwLfI}> zK6Ea$5bJ?ZJ=7mM0PYKwk-)kpH8R#56TKoUBZfO276UoM%-sRxHaB;d7)Us8{}Hh) z&(9DY|Fu8&bi)@z@0vdz`PE4uDmoq?$n-zDdhNOsPu_;yUHbBfrosC}aZ;w-5WeTz zj!lsX5o7OL3XTPs4-E&t*k@1e`n}ttKFDdxa6)L|Bd-ACoUHhv`o32FFqr9V8?&sx g7Sw%;+*KM{WgTtodpFQ^%5EAv8LeNgDI}}7(I+i$P63Qx&2(lE*!q+eD3+(bI-ZI_tUcI zv=ho;qffLYyA&`rNh z=rUM4bL8BRE1cjy0P};n!6sRr$%g;p*=78T1-99+Tm#3bnPo>LA1P>BZOhtNFDB!A z1YK?qCQ*x^6Cn;UZ|zPQN@sJ8nk^g3;ggtFD4u!YpD6_YOVB@44=Mg3WjmfxhO*- zJ#$yND>Z-#eEetS)(g5M@WdyWBquN*FuuoEJg`;&-r?3Oe3R6c}1QL9CIo%ji|N5@oSY_X=cu&oEiDoDfn;qwo!4l9Irn z?Jni6=ny9SDfo(KTL&;nmC#={(vQi?1SV32hnF>Ywi47tE4=Uy5C5C*LFvXL{(p1G zDwi&F30SC*zKQ{wZ1^KH%&jHtfJ`UijKflWn*w6!b3mbe2 zPKdKWo1w54v<-9}Xb0@8K~11*LB9g$4P-)rJ$tM3EQQNK&9{>OgIaNAESHxk7X)rvP>Q2K#^=p#T5? diff --git a/panda/board/obj/body_h7/bootstub.elf b/panda/board/obj/body_h7/bootstub.elf index 004514eeedf1f4a0019601b776c39cff40d2d824..c65ad8f7214fa959c3c1a1a8cdcbe17706d3baba 100755 GIT binary patch delta 27 jcmdn;fo;nNwhgW}9Oj0mMiyx)rp>-K+kI^qpH~9_m=g*^ delta 27 jcmdn;fo;nNwhgW}9F}HAsRk+LCe6M!+kI^qpH~9_n5hav diff --git a/panda/board/obj/body_h7/main.bin b/panda/board/obj/body_h7/main.bin index 3f0d6861d3081117713ffe4ba308e7645e4f05a2..90b45c93974f46b7f1b8c4cad829fa76dd1a96c8 100755 GIT binary patch delta 994 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 Bx}yL9 diff --git a/panda/board/obj/bootstub.body_h7.bin b/panda/board/obj/bootstub.body_h7.bin index 45b1cab77c81a927941f988d62bdb63a7ecde1dd..13e9cd2a09e3007102d3c635d453c8499be7bb1a 100755 GIT binary patch delta 21 ccmaEo^dxD6s}6^`p{bEYT8imrUmbB)09_*o1ONa4 delta 21 ccmaEo^dxD6s}6^ynNg}iin+;VUmbB)0A0NY0{{R3 diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin index 3a4ab4f0a0036a03de0676034f67f27dd1c2e434..7f6480e86497051ddc13b37457d9e4d55234b240 100755 GIT binary patch delta 34 qcmdlJwkK?ZubQB_p{bEYT8gQzi>p(pJ3|A*Zo9oo}u>b(Zqzd%_ delta 34 qcmdlJwkK?ZubQBxnNg}iin)odi>p(pJ3|A*Zo9oo}u>b(aF$(km diff --git a/panda/board/obj/bootstub.panda_h7.bin b/panda/board/obj/bootstub.panda_h7.bin index 8cb038c5b6fbb32936ed260dd34b4cc1b30e6b9a..f9e181c3d9b559579e08c0b4bd38956a1c1910ed 100755 GIT binary patch delta 23 fcmaDbiSfZC#tog$9Oj0mMiyx)rkf`^pJxRCaDWKR delta 23 fcmaDbiSfZC#tog$9F}HAsRk+LCYvWZpJxRCaT*BA diff --git a/panda/board/obj/bootstub.panda_h7_remote.bin b/panda/board/obj/bootstub.panda_h7_remote.bin index 8cb038c5b6fbb32936ed260dd34b4cc1b30e6b9a..f9e181c3d9b559579e08c0b4bd38956a1c1910ed 100755 GIT binary patch delta 23 fcmaDbiSfZC#tog$9Oj0mMiyx)rkf`^pJxRCaDWKR delta 23 fcmaDbiSfZC#tog$9F}HAsRk+LCYvWZpJxRCaT*BA diff --git a/panda/board/obj/bootstub.panda_jungle_h7.bin b/panda/board/obj/bootstub.panda_jungle_h7.bin index 697c26a718e9e93b60126c882544023a3416c459..f067cdbf56e2912e756060dcb9b9d437c2eec641 100755 GIT binary patch delta 21 ccmZq4ZOPrR*MP&^(A3BxEyZ;6QG@-g09w5V`Tzg` delta 21 ccmZq4ZOPrR*MP&)%qZ0$#oT1`QG@-g09#iF`2YX_ diff --git a/panda/board/obj/bootstub.panda_remote.bin b/panda/board/obj/bootstub.panda_remote.bin index 3a4ab4f0a0036a03de0676034f67f27dd1c2e434..7f6480e86497051ddc13b37457d9e4d55234b240 100755 GIT binary patch delta 34 qcmdlJwkK?ZubQB_p{bEYT8gQzi>p(pJ3|A*Zo9oo}u>b(Zqzd%_ delta 34 qcmdlJwkK?ZubQBxnNg}iin)odi>p(pJ3|A*Zo9oo}u>b(aF$(km diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h index a4c4b2f69..c4feac96f 100644 --- a/panda/board/obj/gitversion.h +++ b/panda/board/obj/gitversion.h @@ -1,2 +1,2 @@ extern const uint8_t gitversion[19]; -const uint8_t gitversion[19] = "DEV-962e0d74-DEBUG"; +const uint8_t gitversion[19] = "DEV-71528fd5-DEBUG"; diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed index 666e45822d146e7c812c5fc0c6d6761d791ddab0..8db84850d67b64f0b9f411d6871f14eae8068ce1 100644 GIT binary patch delta 153 zcmV;K0A~M$mIQ>B1hCMX2sbe`GB{>rHM7{8tZsjxW6$u+>{SVM?5)sH)`nRVW08r zQf=ROQ^<2Hf6Y6w*nULJHq)o@KHMBhAxx5lQouf$lC(vgWnAm{hkh0Mklv79rq%*U HXr%!Ox86*N delta 153 zcmV;K0A~M$mIQ>B1hCMX2st(~WiVtnG_%;7tZsjwICoP?CH{O|k#V(*w7;srrMVBY zgy3Z8J5O!?S1A=ye+w@UXog)JTrCIZl%rp!!80%CddCKFEovsZaYs=uM2Rzb5iZK} z7S(?)xJcX_Vl!bQ^bSBth7F%6neIUxXAi1Twec}cIw7K>U$#Svb*`7Vta9KVrKFVs HhlBw-J+ngB diff --git a/panda/board/obj/panda/bootstub.elf b/panda/board/obj/panda/bootstub.elf index d1860cb0a5c55be994268a3c71c15db08d876b55..5977fa60ac3e54cb6ec3a75d32bcd6456694a56c 100755 GIT binary patch delta 40 wcmbO+nQg{owhg{!g64*%Miyx)rn)Y!PND7$4GfbfnkqEcnQgB#W0VR800W8)N&o-= delta 40 wcmbO+nQg{owhg{!f|h1RsRk+LCb}-JPND7$4GfbfnkqEcnQgB#W0VR800a{ZNdN!< diff --git a/panda/board/obj/panda/main.bin b/panda/board/obj/panda/main.bin index b4c22183ca1c0f07f00bc5674393efca2162a8ce..7d38328d06f3bbb9c23dcecc5cd66137d7ceb451 100755 GIT binary patch delta 23 fcmew}h2_r_mJJtXbC?^N8d;>Jm~Or?dr2MufyxSs delta 23 fcmew}h2_r_mJJtXb6A=gr5dD|n{2)@dr2Muf@BJb diff --git a/panda/board/obj/panda/main.elf b/panda/board/obj/panda/main.elf index 4b79a41b4bba7e90c07d18f0e86b10c5dde29da4..2422a74ff27c8c8e6757916843e4bd6f1b764e2d 100755 GIT binary patch delta 39 tcmbQURAkOlkqsACbC?^N8d;>Jm^R;7-F{;=BM>tIG4u8tt67eu0RUil5_SLp delta 39 tcmbQURAkOlkqsACb6A=gr5dD|n>628-F{;=BM>tIG4u8tt67eu0RUkF5_JFo diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed index 20b43b004c876581091a0d20501a7447c5a13a77..a9890dad7d6dcd9236c78ed1fefdb0c6bcfb588d 100644 GIT binary patch delta 1261 zcmZXTe@xV69LJyMx%=LINip0hKZM{5wL^xsJBhgTP#h3Plwzfoc~gt%+-yXv77-Ce zi*iWrfpweyQ9&C65?~LCmJNwUvSsn<>zl!2VtC?vD(}gi{$(3d{#s7TApWC^PQLBi4G9g`wNo)Hn#51e%sgYMy zZI7NDWa_JhMDuPYnkM{JSw=QLDCTO)2JT`CaZL1g zPK?5z`L1)q{0mbFVQSY9Q-?ThUr5uSd{a!c9B?w9Xgk2t8lr`e@gaQNF!|)))E;wD zt|T@RnoWrt*SlkmAvOcF63mYw*AJV5-G zUS_IUmzK2#zN^oY;X#CjBlCOoYzMT+eVx0*JMhN77jgD1*2JTkG`wcmt;gTGa(7Kc zbBT>-4V0?f?z7|uuQ62?F2{*Adcoddrrx7V%UV1%`BZX5@)~%Z&yo?k`u}Xt^}7v- zWV?jl_fb@?_YzZ$`aUF3N;Fx&1KM(L!&(T{MEcdWL%&!%uN$yXk7yZ4q@w?Vlh($B zcakW>FDC1M0F=F(8r5rG#GA?!+b~}P8WESJ9Kc+bu7UEkCVyh;y`U3Z1-=JbK)G)m zn1{S*@N?*i;P?pJedpTs2&6(FpzK=!Oaf2f;1uv27z_4eVFI`hTni?FtHA;sP*AvM zV~#z0lcT&WTU;ITK0(WR4#mbKK=d6i-&f8axhTQZ4Q_Uo;`f7>)X$kijOqkI%qYGZf#VrweYR~ zyb)Vd8X8L8ydtk6e*c+M)5TvscKG4SXPUJe$2S}~aC?g_^R@L&Up`;&T-bYb`=1>b GXyU&MEMs8+ delta 1271 zcmZXTe@xV69LJyMxgUHlJc1oc3VPqe1zbWM%0wG5-9es;K`II+HA<ljyY$` zG|}7x^IR@-*V?gU6CW6dC&U&MKcpZb$doz%sH@TV5jgA@y`R2!*w(XszOT>o{(PPv zpU-o5tHv-^W1wRVw3pG7qK^fZ(;9v}X*2cmp(LlVafB(6H~F&UC3HZnP4?=|b5Jbb zOO+|V@t;?CO$nIUVL75UHC}JXgNT8O_)~@}}rBlSFlh*2-0SrtcC{RpoJpomgEVN^3Vn8Qy^#5Ov;6y=@NepH{MFw7q`x zC-~!S^`mh=Foh7NbaXLggj3%ii4G{2HWGCMc*jZ9=fJ`$qRt|t7CvsctnMC7SG(m( z;vm6EYw|6vI}y>up@a4;<`L`jFY(L)a9j%Q5&eQB9!hKUzmQQH{{t zJl$_u82p+kawbPO;^QU$OghWY;Jb!*dCkM0X|dSdh_Fy(dWV+nf)>7SR#9jNUfuE{&Yr}Y6f~2D)(n3tO;wy zBJHY<(nolDz>*#OmMOAuInKvw1^Wh>@{lIYYbns=Q^^s|^Y9}9i+#5L|Jm*v4;m28 zE*7nUW2S6h4^#BoKBS|NsIq<+wE5nKv{_UW?pNc}+Qt0*NT-FmMQvw1HL0jomaB@o zFP-#oOlVJugZQ(_PzETwI6bU&VZnFW*^QXTLXSmU7PTL9*#rkD-)#bU4}MxEJO>CN)x!0Z+cyw?7{ruN#XWxD$ znnW7?-3Q)0HTThN>ZN7A)bSH-{kcnXfAP#jmTfTw-_6hOEc89rF<^fq=SuIXZ9Q!( z?-pEn>&L41uMKSSKJJN#8vi)({0muspF4Tmn-XqGeG+kzI($ zK^Wvkp%+>S#!1v{VW4TH5jku2A&b0N7h#%pqe1`UyRD!D&-;7M|9Q^G^Bmr3t^~N! zHOlBEF~<7W&};l=UIpcRBF`Du7G&zeBwwAMNuP>s`K`vp87PKHsWSBo|GK_4J^@|^ zY@=x2kY!Z1z}+Fbiwp_0O!PU%4fL33D76}rFCtJ6YlPLo?h3!Nmc`_ui2PaX*;UKp zeq*{YDPFj8O>yb(m;AZ?nT+O%!~+@miaEFKXPB?|I;oML@$O6v4Kwv@InjLEiKYp^ zce9br4~x0WHEGIjtgaT-&AXG7^KkEpj@Dvh&J5f|E3r=vbWXj4Kl7w>%JhM$gfR8t z2vbKmZC}XMpxoa>v|=#iB-%c(@-orF$hZz4H(cHEi`vZ3RE; zR)KjFa{aJr*bi8dD8JXkXtns=33x?!R}WL}AaR(V6BT#~zi6a6-yzsOG1UdDg2|o- zdlj2d@-M2iRQ|7e3XM2myw;kI5&O7Im^VDXp(ZckLX(PB~wkh6w~T?RiCB6g9wX6 z<`3!Fc4*Q2Iu1s5;0=8zarP|Mq@$TMvL;Zi$1jZiT@%$@qVSP{QkC2KEhWJ>OqGSp z(Xvu6*cV{xGF^&k>Cog;$q~(~=XL#-g7EAAvpwT~8xYNQ34i~M_!8d>rW*Bq$Y3SW zWc_w%vED|sFsh06>)}5AV(q+c$U;4$c_@pDfoBeS#T?m5!i`@{*1r~%y_! z1Om#w4T9NV3l6q|kHJ)M01Gp~qhJb{4JLzSIH0WjP+_rc>n3}Rd#iXo;@eBzJ*QG> G?dCtL!Xyg- delta 1138 zcmZXTZAg<*6vywq+cTeKD`l3Y)*cO4!v0X{dy7hIM=QTK~%8xg!w@g1|>WMO~-?JQ0?rbL7Ch(1uXa~T`CZa`<;f9YJE^Yfp3$;PHk~m0s#%6z|cPAl~;^M_2Oqc&?34!dYICQz;k|5Y{5$e#U+|aUNdz)tQK|7Xv4%Jgh#y+Ac@N1z-%2BsR*TRpOnxIQ@&BJ%}T60~9uxMnq zM$ayX7Q1grb#w>b+It9R&tOdsnn|N;Li_dj`H{bCVp^>z=rd5dh!+N|rQxScm4(Z3 zJw-3r7h>uhU5aZt(BxCe5zF)N=72RfGWvhEYwT|WV%fDK7&vDx^$juAsP9AiD~TrS zFNYTIZB&b(npnTOw(A%3^XB_j>Jskz>C~*DR#~nl+8#LRndIo65~uNJlcANM?BeWm zy$f@n>1TIgo&r4uaaq&}%w-cCpnSJ!nptoly@ zR}sjBkOayOhQJK)4t`cPa2Q+&j$+|r@EEuN%m-xwRXAWnSxv#}Rm%@M>WWs1djpF^%F8}}l diff --git a/panda/board/obj/panda_h7/main.elf b/panda/board/obj/panda_h7/main.elf index 37e8f1b21b2fe3a105044f3a2d8c86185a7a1b42..621228e5682bd3d5fdd2a40e2d8c0635f6fe0111 100755 GIT binary patch delta 3445 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 diff --git a/panda/board/obj/panda_h7_remote.bin.signed b/panda/board/obj/panda_h7_remote.bin.signed index 3b8bd98cb0e137e52b0bab30e1e7121efda1dbfa..fc45a8102f5be226658af728dccfb633180c7cb0 100644 GIT binary patch delta 1262 zcmZ9Le@xV69LJyMx$hUgB8Nu@7@l=^Dk4GakTI}9Lgx<{n72yPip7i(Iaa8DF=W(= zl9jW1)L~jNxlPKWU3;)QcG244k^>BXfRQGhTW;5~0tb@IjouGmPBxzH^L>Aw*YkOv z&*$?zcU?zS_feI)zoCPSZW0$*U^Ol0Eo;l@OMG;#Q>`6iS}%Vj-9lT$hV*vD=mQv( z@E4|?<$q+h$Bkfi6Lxn@9M4*zsQ2N=igOM_JdGFK1y>9-T^ug58WNwz78mRVSSf73 z=y5i%2l((j{!)}~X<%v)(_RrOSskl}=iJHd7DoRT#%EL0Rnsc>bcAQtJE_9otS>fp zoM&3yW@2l7lGq}mr#?ra--*e_Czh+rt}!i5q#fIupccSAAojKADRv*+`&N=a{zK>Z z7x4f2zH@vSN(j>q_A~7x9y;@%Jp$q>CAL{;*hy?D*U>;Dv3U`(4Suh<)iFcYk6}s( zagfNQ^*4!8Zmfwo3}EJ8nYJ6O8RmfnVEluOspZ-yq8H z49(&Qwfh0?!Av)pmI{-{j`>w`%Zqe>k?><8_uNTF9sH8dTu4TlhJ16QubS9mWI;cn zjzz2uOs>fhjjQB#e;)Pn-S|%6Yvo@5!x?oKn5O7~WaZ1mroyirV%pM0%)}@C=EAnY zgd`JRxl0buE}c2Rn2yNQPMr~6+-;_9d`I`I856k6Xx6DRVw3fU!RY*+kqUiJ z5xIhB0k=Tiqio0A&!QX)c7T2?$lgE1d?mCBiLKCgp()TqSWktnfhI$L2Tz2?Bf+N4 zJ0H)>&Rw5hU6m_Z`&+lsEMImCeJ7{MbG7*N+vguDD%`WNCi4wt#Z!JuN-%c&-if`{ zwJpxAOD8^aymu`WnQ5}mhGTj^e$<$gZ5-Y+Gf)!OaO2Ld1Al%Vc`I>b=yb&gJ$GD2 z<&&5-C%$&qB=5J*=7a-xLnjAbyS(n$M(@3bQ26$Vr01R=9JhY@)hk<0HChtO^AC1S H)2aUft|VZp delta 1277 zcmZ9L4@}f$7{}lDz5D48;o8+ z@CH*u{P*0h_+Jr4VJmKkV-MYHRuYg&7v1@$1Zoq(l8A}A#9MB=DRmnXb+BEqD%b&W zsjP+lhd)@vL9yxa7N(3KjEI5qtd+{lf*XC(%IM!Baa(4NlKQ}zJ2O1Dxs0lOPqQac z?_+AiMxu3YAljU`)LdYuS4FfnFI}JCVqqx!qhkWnR=2Be0ZXqOu zlXCX*XPQTO|dy7~1UOKHjoQ_*i>U3s2pE8w|@ zaE=(}2a`Fumg*X~LwC_Ie@D0TCOw0ZAzrQD&;5FabN@A_nvH5=t09^Kzu_uVSH&=m zM|Df7e{i{BeYH_t2PSvPb#8~j++fT=WVX^^DclpZP(R-u-036(%Ux%^M3Y0z;F9U$ zp5asSxWX8QX+xIMnF!t?CR2BvsR=PG{0&p% zW0;#ahGg6J&>L~98@^gT>y--QtSQ{lYjK7##nR+~t;T`&|8KG-<`%WRRvM>aIys;w z8ow-~`%)L1N-4p=OQz<(H}35sR6h1F9$mi9Uc_n8ai|<>Jyec8_nq-lIy4z^8dP4< z4yXkxznc!tKz$;#3ET<|jIiwszmggx8~~$8$Xhsp*am$WjqT75=o)Az@|n;==xXRJ zxE#QS29Is5TwDC`y65uiU4`OMf9Doj(&Jb|+Y0uj9~^Yvwa%Za{3S|m`xMU~r;opu z7ysx>Q|CSZoUN7JNC%aQ&nr*FTY;0_2#Sf-3Jn$ z)qL-o(hgM(m7D*x6(98OS>;haDx4T9Kb={A&nue?2F5<^$h$o4ZQJsjYv&g=yOUjq M^|yol;~wh$7gnuby8r+H diff --git a/panda/board/obj/panda_h7_remote/bootstub.elf b/panda/board/obj/panda_h7_remote/bootstub.elf index d0461d5a5681ee77d54a7aaae913d3d17767fdbc..2b25b4db4c494dc1a743c7a274d5af376f09af79 100755 GIT binary patch delta 31 ncmZ3ml5@dI&JCTx9Oj0mMiyx)rp*(B+b0GyZl4&;#Lox-yYdRZ delta 31 ncmZ3ml5@dI&JCTx9F}HAsRk+LCe0Ir+b0GyZl4&;#Lox-yo3tA diff --git a/panda/board/obj/panda_h7_remote/main.bin b/panda/board/obj/panda_h7_remote/main.bin index 0d5c78cabcbafeafd58ebb9548c1aae662eb8737..fddc4d30a3e8d722a0f0b94e9bc89bf7ae54044a 100755 GIT binary patch delta 1129 zcmZ9Le@K%-7{~8!d-E!_#mcf3dsmrRMzatz6f*lIW=UXWKR`&LAV}*kG3lQqg~H${ zgoFkP8BKWMs!diA=t|47Qp>VzLcxN5IIv$N)c1Th1rMJ0``qWAyXSfCHm}f{gl6*{RLe1RuZ?1>Z1!Q+!_CJgXnG5!lZ` zc_n?3RU3yNCvUqg@ibnx=k!@njTZ&=(UlRX(+flT~>Mt&bS5*h=)qjYJR2dsXYL z^sbE5tX-hZdCPc;Ou4*0QOkjQT2?k^SzSK3<4&?+_(9w7HTd7}w+;6~31R$97vq;i z_w~Q7Fo?H+=>MRhe4-}}p@ABr8;B@^-yuJ>{-Wy!F(rh!NjT#CpfJjfvk|ui%>It? zQm|T>7Z!m19+HVS?=YGogKa)W^JI{Dz|@)=vA8nf@@G*)l;S&z zuTvQQg=rN}8Mm5&Wbq-QYw*i@7@s|j*+j%|&-FZ+%2j^Aj4lRKyVUURH<=rZnTU+- zH5n0k?RM%BCGAJjMsb(1tYd{lSM`U$Xmn5iVRO$WF@ild`J>%J)1LP-o)`^inrAle zdCB<9X$*}9?75*n#?^bN5sNNvrOm)fp!+ zp9k%Ms#aD)RkPt&=KHil=U{Gys*BkHwL{gp3!ohF3D9HU4rt2&E1CFN?8Jf#pbHDC z_Y0UWhL$6-6M7Ds1g*n*GITj~KJ+8_TxdKJY}vYZO;$$cx(!FmGi75}V-ZdFWhBw+ G_5T4P79cJF delta 1144 zcmZ9LYe-Z<6vt;~_tt1WS@V(B-c3@LibOLXD6DK&Vh@Xo5(ObEq7NzbAyFxcsGx|L z3?rk!pdh7%(Y(uA?1xM(d#;w1nL$E*h+HrdlITBP&Dep%|D4}BbI+Wa-4>y>3C%OW z=uY{J`BG_xIG0vR4~wBRx7IMsct9*oPo`I8UV5uFvKQckg6|mjiEk@g!@nR3!WO)f zS5_^tY7xjJ$j%H)1Wl3Nf`EnQ$O|sJC3XiARj`Awy|9z=fxDjl!`ElASC(w3XW9_L zfb8Ftx=@>#af92E8T}(8cO<22vCD7$oDeJP+?0zWbw!azFXJ`EL~qU~`jmW7mt~~` zGT68#L9@SSJX@}4+8Cv6hI>lZw&qwJy>O@PBzM%`K6(%SkB9A}pP+;=e!h?Ko1*{r zZ^sl!TM5ylKQKP#CVCpQtdZz`R8+zb$niVBXy#XhgpdsKHE92#Fpj%0hGba4Qb!m+ z1l9!WhCPMx5gB#&KBL*Pr@f2O?XuC+#k4w9-Vk}R6wh#4UZjpbfUu8@>o6xweRkN; z$hZgXzLT+hncaDfQI~ktWh;ysVjTTu)}sSNUjWbb9OnpO9x#dM(sB_JZ-K z*@Bih^9DSxafKla)B0?M69K$KNT%u);}Idu|B~_W5atrKKGpWL?@ZX@nkVyTeN<+i zHAXmkY)(I>n47#~t9hUk|4lZ>T(Yt!nTF|@P7SEb+Q)8sJa)FJk^=m@RBHOId2iiN z_1J@WboDw7h~uCmP&HI8RE<6L#(XIQ8jUy(s;+1c)CN`GO@Jn%J`#EiJQ>6zn{TbCcYvtL# O<}I|K%MnlOv;G3V6C@S@ diff --git a/panda/board/obj/panda_h7_remote/main.elf b/panda/board/obj/panda_h7_remote/main.elf index f1a9b7544f5ae7f0e3bad9b4713e781aa1b36ad5..751ffbe20c5a07d0e5216cc8b845899f76f56471 100755 GIT binary patch delta 3447 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 delta 3458 zcmZ8k4OG-s7Jnb}*C9t{h9Ulps57IXlBFgBYMSHmtAsUFG&DTW2b%4v#nN3m;gL

hgQA+*O75F$M`Jn=uny$ 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 delta 1371 zcmZWoe@s(X6u$TJIv);%rY)$D^_8$_6|!QKADfM2bZ%}{)P!%@y9k9Lbc%6As8#6UM;LuR5b{vOeNm)An#ZgTRS^PO|g zz302{wM;1|rWBeJqN9vP#RYcvDO%3Y*KVDCb>#uW^YFZ4ojsizYNX3Ot4a-xb7T;n;Y+y3 z`2A--HnhVt@kU3f@wD{Nx;x0!Nm#p>aug&OM?wDvi^9fW|BBqTd)Pdkh8>b#Bl_~| zm|+V-w{RA<+NqIGywzy=^dwWie}QO`PNv>?mS`8dm|8C0uUM_nHWA$Mww_KR{XjyP+8AQ$Arayk z)N%=w@-oq8fO0!UyRi7Z={n7eqKXjWkR3;2rz}b(js$QI5xZbDux8jX*cCyWdl^j? zeTUC7n!{^bhVV|#BY#o*)^kk#9M%ErfypOv?IPN?Jxo21Se`tM;~K=~qeq#=HON$) zGPiQ7h?WS?%&FgGcl9!LQ7n_WgJ@5{?*=DPt~lr8PJaO%<{f@3Z}Kl?N-yv9=R5cH zU|PMB_`F0j!1tYE>XVOg+2CYOu7Nl7x^8X@n4Fc}3mK(M&$z%by_mRP(>XJ^_y|qg z;vL=zR5+Dy7VhA76HShD3$xQ$hnzR{>aDnIyhEJJ7RI&&>YNNSbxEwe#T--NTc%2# zje9~X)uQ}0+Z~k!Yehq7?`B0F z+WTrU4bxK*>dmYBWMuXJYoB?4sJ~j_&)5+39IxKk_EUP#-fIUhKX-F*!%SY_!`%Mc zGn3Zs;oYxqdX%*MVZ$$9A6Rz3db#b=LI31~;&nAY-ncqDR$Cl$H93b?{rS<)MJMfd wN!ojFfALRUe$~C)yq9*R-0_BY{-GF`+(~{gQr3R)g7&-v9sr diff --git a/panda/board/obj/panda_jungle_h7/bootstub.elf b/panda/board/obj/panda_jungle_h7/bootstub.elf index 584f570b1c938e6146ec34f80e23d6e4fdaf82d2..0f19924d5f7935f41dba4b17cc87ce09d314543f 100755 GIT binary patch delta 27 jcmZ2*f_=dW_6>U-ILr-AjV#hqOq-87Y(MJ27`+$(o1O~Y delta 27 jcmZ2*f_=dW_6>U-I4sSKQVmkfO`4B7Y(MJ27`+$(oHPpD diff --git a/panda/board/obj/panda_jungle_h7/main.bin b/panda/board/obj/panda_jungle_h7/main.bin index d0b2689c80abe75ebd006f0d58ab1cf5730a5a50..6be7740928d129c50e10ca50acec427f63df5ca9 100755 GIT binary patch delta 1229 zcmZXTT}V_x6vt=AdvhvHm)*@m(W?+@8LhEuhTDtQLv5&_gb}5=WPuL}`cNVUAq5qE z%%X@!_^}a@U(K4C8;eY0L&YYQZ?rwKb^9Hs4 z7mNnvOZGF77K!QP1N4}%q~zXEk;;n^x-4gV{(=Wko7Qc2}(A(feh$cs&rAK)v z?e{Srgtf^9M^1!g1o#;&0Got;mfM~6Y#Fb?358SSaCRfp_h6eRUAZ0UG*-Mn-ef=5 z&-lzx^ztD9$WU5z|=>lU*+M=@GltyabwZhCJT%9@0|3LJ1CJJxoCiX+Q*{<3LXxB_7wMU4d!}km_zJ3+6fvK2U zj}M!9-6FZm>MHTCM6@z9;sj%6GI1X=nFbc_!CM-xP}5cE`hiBnZ*aSbq527e(NKkq zqh@vi-WskDW;SW*j-al$4;kMON^iG?#xTOT8kAaL=6S;SIuk9kpeXjCjYo_}t%~@E z|Ic%h2v1{gg9f1Lx0(S}Gx#!QzWN?C273-w z^KwJ2P*pb$8io95Xf=2|^v)>TxAguZ1d;(>AfN_#4f_P>NnD%+y$Ib1y^Q!~Xd2WG o{RD1-#)^u8G@g^0wR6`APnNtsaQ>jCE*&b5rVr_0fR<$b1A&Gj6aWAK delta 1238 zcmZWoYe-Z<6rLIH&CxVnb~g(puVSQSv_<)d79zKx+Oh>B3JFO=f*^wpiV~HSpg#p; zSfrGz+aK}OXg>0>rBY-;*q?&Xjf|vzSYT8X)i>T<1sgbg=X~ePnK|FwTRW{aPiq~| z84b!8?E4y8B*s$q(=)=7nx|JjV%#l`rY6z`c`mg{iya3srN|M+hsD};P0=%mzQLj& zi-~p5^!UeWM`QXmeHXk!xh*4s>Sf9mp7r^9%{=Lcr{9KqPyF0;MQ?#;6*Z20%b@bm zy35b_G^|B_aAZeV#zDV<1z{7gUvlHti)?{ji5-gGBKxu`n0^qUTRL+aGpI#Oov5*2 z?_m7tZej%582_@J7%$ryFOnCEH)yn3`b$6CqfTK<@NXP1k+;gH?72Ck=7c-Si4n{r z2ATPq96;KKvfs%hXEM+_c@_TbQ0rtrkPyaeIvKwyJ4GV3zXGN0BgQA7+D_4~SH7#A zrJIAOB7`_p$7i8aBIAi80^A?OE?60?4t5XrUedZAM&o7Qtr12uMS1-&-pSeUk!BQ( zF@6Kq3VQ%kPvSaFjKdche}Y(@JcHw^gnWu;m1?1tC-d!+I(5g>IazCtR&t-V(9R_-Hb0^!li*z zIkg6knRQ(vrOE0n=~~QaN6m~295aiF`-sWez=cPsJsj?EwyD^u-Cw+e+f58L&Kzc^ zp$?hH&FTW&HQXW0rAbS31a(gLGQJ{IUT+Jj@Q`t(lUiZUJBV-Hq!ze2;qhaPe#T># zWJde`uXYVAiWBadCL8^E-078zb0m4pIc(q-o+8AJV&1TpG5O|Yt3^tiRd*>R>O2~? zN_U$^qYOx(R50Y;_B>i)3EfY@PW-j=0s)oOfq*H_YkVo{K`Rm4fI*=8Xmycj#%mLbgKftR24B_ca=eb#1PC81mx5}!{%Lg=dXwRWo+Dp3wv|#f;#N;Hd diff --git a/panda/board/obj/panda_jungle_h7/main.elf b/panda/board/obj/panda_jungle_h7/main.elf index a369a4962585873aae9cc7d4b6fb276b3611520a..34700e05e75f1f59219516f0e52304bdf62b0d75 100755 GIT binary patch delta 3441 zcmZWr4{(&l72mh}eQ?3UyCau7Fqj-DLQ1SjI3S^k0gOOOB%#DVu@wSb2?Ue`68Tq5 zfB}Na2p+Nmq9DNrO-#rImJlTYWC{+|w5BRr{@4iv9TB3#j1${xe|z^G%;?SRz3=_@ z?c4X>zI|^`|L8gWqi0Lt?#@$;>0vVboQ#pCm-HX=b#7ggNbZAsM-HIQ&|e39pFjn{ zQ>jyFR?wC9kXd$|+cJYiY4Nl9>566RlAN!%n zPUsbT(_b>v@Rb)Do#7?3SbqkmkIOeJ!{B~=nJ?gTd$2cqqqz%TBDj8hzN8OqAtn?%mw#U<$sRAEV=ZP!&VsDvH4gC^p)`h;Ry+Ns+kV4o~w8o>>E`6OWMF6`F-j7j?u@PfC#wQ{Av*N@;tp`qW8XR0* z-;Q(2YPdp4Ij6X7J;rW~w=ndP^Yy`ZEig^>FNy_%S(&O{W&J9;xOEe zh_Z@5FrQAdz#(qC<7b!~SU3fNzxQNBt~NL%6q{Apa(l)oip={;E-dnrXMqgT$4btp}b=Tg^JrVsS20=)-MH@RfnagBNE^y zP#u!fNDv*uGVpHDPEehz$)Gw0*V-di*MmC1+dy@^@<3xjwO%i%9rFD_7Xgn4tvkji zh3zlE#1H^yF`)yv1^i&p`PeuSvbZ;7oN(PqgM^dJj6Px-`Ai|wI3xv?Q3vx2Dtn8-h+xQmOR6Jo>34RPy#U>8jk~9tmYQU zvQq4pC%2UHfiy)PDCPB&b<{j_A>uy_5q(IW#o#<$;B+KC5-xb}1$SC=Rp16DfveNp zMo13Y4X#GMwvcDXw!q%`dg5F%WAP*JFhxLJU&#LzLzU`pm2jNO)zoFYN=(w#h#A{< zb6fIMVpsFgWoWu7bb(^VPQdeq68k9(7nnlVEN1MnU{8UT2K<(Eu7X3EGG!GXM@lVR z#d8IXkcXb*uME`1ml@qJM^w!(wAQSYbEN95{sOT?dYP75+Sq;x}<;L{-0MELDS*v4h{&kG83i`}lKq9OK)KeDLu5$@|C# zeHLZtAKrVWGIp1rymP{kZY3j@{IP=FHC2Ao2m_``M-%rAe~dgOVFBH5yc@=0&680m zJp<6|_X3(JAA>M#Uk2h{N1l!0HR;(9n7Q*O?@GFAfJgDAzk2^)It_*fI1-UTB+r3pgRG~g<=l6(MT}|vS zJdK>Ody`+)Glnuw@*GY9m3xYJ5!I@MzwjzfhJ5`D|DOD6`-l8X8mkMpefdJhT%UTK zZ|a4$8d?22AYWQh(`Da2r3A<&@362;K-Hb)yZgqvQHj^5SLdiFy7*EN zt6PeF^H9bdUs@w|w!-gzJ2&yBj6lyCelO>$tb)1Fa^YR$u3r?QR42$LqwM?l+k%H~s3_|L~)u z=|P#AD(<69^+c+8k?5$roF>rU<^ECP99@@He&L}{f8CH;iX1}xTr5k zcePkg#j@ipy|^VWeAYV$g=)J26G=@p^q72`^)OTS1E zF+4{FYeRet**ncl9HLLQ%!2<1SRZS##ScPz4akgq^8sp+3qX(%a%aBzYpRfE^36n- zes?rk!a3+dZrQ70ot06Y8vqx|qyjUM{4!S)LoU#yR&D~peUWb$mi&7I^(u=&<-|@H!9oSiA(U z-w07hLf~~aM)jX^F!kAVlW;xdxf!rgzYvP8#XHc8TVzZj;0j#p@fQ3YV86^LG)LX7 z-~T%1&!fxh`W01s7<_@;q*v-^s_y+-EItlLqgo5i>=+z)?^EV1S|p2Rn(eMSNR5D$ z3sS>zSyNQfEVGJ`2nUKG)hT0U29>EZ^UcLXr)5SdmNv;1rPy_f>@9^% zvPxQLRvE4uBv*91H%FnwsMf{WwmO+njK11n3ZPR1p1RY)n={}{|BP~Q$GLz delta 3446 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 H7jprMml{bc delta 153 zcmV;K0A~N#l?2$81hAx=2st(~WiVtnG_$OmtZsj|il&s*ZhQBBFw8a|x*Jr2@r)qi zU#Q@HG;s6ks(4Zc=%NOlHGge-ongNAYTP7lngIEv-()=edgt+CTH~I$Z(`7Mu|0vu ztk&Y?om6H}z7p!E;jCO5GJm~LJ(dr2MucJ>L{ delta 23 fcmcaGh2_E&mJLg0b6A=gr5dD|n`~Y)dr2MucaRC$ diff --git a/panda/board/obj/panda_remote/main.elf b/panda/board/obj/panda_remote/main.elf index 4973e6cb9e70bb131e7288e119dab29064d36503..9375095bd3de819ce91c04dc76d7442c19c43517 100755 GIT binary patch delta 39 scmX@IROHA~kqt{$bC?^N8d;>Jm^QCj-M(fuBM>tIG4u8{t63z{0a{rR6951J delta 39 scmX@IROHA~kqt{$b6A=gr5dD|n>4Rk-M(fuBM>tIG4u8{t63z{0b1h`5&!@I diff --git a/panda/board/obj/version b/panda/board/obj/version index e5159e20e..707f297ef 100644 --- a/panda/board/obj/version +++ b/panda/board/obj/version @@ -1 +1 @@ -DEV-962e0d74-DEBUG \ No newline at end of file +DEV-71528fd5-DEBUG \ No newline at end of file