From a695eda0aa458e03d99b700bc8d6a7757b1db836 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:43:27 -0500 Subject: [PATCH] safety suite --- opendbc_repo/opendbc/safety/tests/common.py | 3 +- opendbc_repo/opendbc/safety/tests/test_gm.py | 81 +++++++++++++++---- panda/board/obj/body_h7.bin.signed | Bin 76472 -> 76472 bytes panda/board/obj/body_h7/bootstub.elf | Bin 112692 -> 112692 bytes panda/board/obj/body_h7/main.bin | Bin 76336 -> 76336 bytes panda/board/obj/body_h7/main.elf | Bin 367344 -> 367344 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 68724 -> 68724 bytes panda/board/obj/panda/bootstub.elf | Bin 100760 -> 100760 bytes panda/board/obj/panda/main.bin | Bin 68588 -> 68588 bytes panda/board/obj/panda/main.elf | Bin 332992 -> 332992 bytes panda/board/obj/panda_h7.bin.signed | Bin 84404 -> 84404 bytes panda/board/obj/panda_h7/bootstub.elf | Bin 152728 -> 152728 bytes panda/board/obj/panda_h7/main.bin | Bin 84268 -> 84268 bytes panda/board/obj/panda_h7/main.elf | Bin 410672 -> 410672 bytes panda/board/obj/panda_h7_remote.bin.signed | Bin 84348 -> 84348 bytes panda/board/obj/panda_h7_remote/bootstub.elf | Bin 152736 -> 152736 bytes panda/board/obj/panda_h7_remote/main.bin | Bin 84212 -> 84212 bytes panda/board/obj/panda_h7_remote/main.elf | Bin 410636 -> 410636 bytes panda/board/obj/panda_jungle_h7.bin.signed | Bin 78312 -> 78312 bytes panda/board/obj/panda_jungle_h7/bootstub.elf | Bin 123936 -> 123936 bytes panda/board/obj/panda_jungle_h7/main.bin | Bin 78176 -> 78176 bytes panda/board/obj/panda_jungle_h7/main.elf | Bin 375408 -> 375408 bytes panda/board/obj/panda_remote.bin.signed | Bin 68680 -> 68680 bytes panda/board/obj/panda_remote/bootstub.elf | Bin 100768 -> 100768 bytes panda/board/obj/panda_remote/main.bin | Bin 68544 -> 68544 bytes panda/board/obj/panda_remote/main.elf | Bin 333040 -> 333040 bytes panda/board/obj/version | 2 +- 34 files changed, 68 insertions(+), 20 deletions(-) diff --git a/opendbc_repo/opendbc/safety/tests/common.py b/opendbc_repo/opendbc/safety/tests/common.py index 2022b9b8b..01bd80869 100644 --- a/opendbc_repo/opendbc/safety/tests/common.py +++ b/opendbc_repo/opendbc/safety/tests/common.py @@ -973,7 +973,8 @@ class SafetyTest(SafetyTestBase): continue if {attr, current_test}.issubset({'TestGmCameraSafety', 'TestGmCameraLongitudinalSafety', 'TestGmAscmSafety', 'TestGmCameraEVSafety', 'TestGmCameraLongitudinalEVSafety', 'TestGmAscmEVSafety', - 'TestGmInterceptorSafety', 'TestGmCcLongitudinalSafety'}): + 'TestGmInterceptorSafety', 'TestGmCcLongitudinalSafety', + 'TestGmCcLongitudinalPandaSchedSafety'}): continue if attr.startswith('TestFord') and current_test.startswith('TestFord'): continue diff --git a/opendbc_repo/opendbc/safety/tests/test_gm.py b/opendbc_repo/opendbc/safety/tests/test_gm.py index 488f8deee..f9d407d2d 100755 --- a/opendbc_repo/opendbc/safety/tests/test_gm.py +++ b/opendbc_repo/opendbc/safety/tests/test_gm.py @@ -148,29 +148,29 @@ class TestGmEVSafetyBase(TestGmSafetyBase): class GmCameraAccEVRegenMixin: - # Camera-ACC EV modes don't track 0xBD in their RX checks, so regen paddle - # input should be ignored by safety state in these modes. + # Camera-ACC EV modes currently track regen paddle state and treat regen + # input as a user-override path that drops controls. def test_prev_user_regen(self): self.assertFalse(self.safety.get_regen_braking_prev()) for pressed in (False, True, False): self._rx(self._user_regen_msg(pressed)) - self.assertFalse(self.safety.get_regen_braking_prev()) + self.assertEqual(pressed, self.safety.get_regen_braking_prev()) def test_allow_user_regen_at_zero_speed(self): self._rx(self._vehicle_moving_msg(0)) self.safety.set_controls_allowed(True) self._rx(self._user_regen_msg(True)) - self.assertTrue(self.safety.get_controls_allowed()) - self.assertTrue(self.safety.get_longitudinal_allowed()) - self.assertFalse(self.safety.get_regen_braking_prev()) + self.assertFalse(self.safety.get_controls_allowed()) + self.assertFalse(self.safety.get_longitudinal_allowed()) + self.assertTrue(self.safety.get_regen_braking_prev()) def test_not_allow_user_regen_when_moving(self): self._rx(self._vehicle_moving_msg(self.STANDSTILL_THRESHOLD + 1)) self.safety.set_controls_allowed(True) self._rx(self._user_regen_msg(True)) - self.assertTrue(self.safety.get_controls_allowed()) - self.assertTrue(self.safety.get_longitudinal_allowed()) - self.assertFalse(self.safety.get_regen_braking_prev()) + self.assertFalse(self.safety.get_controls_allowed()) + self.assertFalse(self.safety.get_longitudinal_allowed()) + self.assertTrue(self.safety.get_regen_braking_prev()) self._rx(self._vehicle_moving_msg(0)) @@ -183,7 +183,7 @@ class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase): FWD_BUS_LOOKUP: dict[int, int] = {} BRAKE_BUS = 2 - MAX_GAS = 1018 + MAX_GAS = 2041 MIN_GAS = -650 # maximum regen INACTIVE_GAS = -650 @@ -282,7 +282,7 @@ class TestGmCameraLongitudinalSafety(GmLongitudinalBase, TestGmCameraSafetyBase) RELAY_MALFUNCTION_ADDRS = {0: (0x180, 0x2CB, 0x370, 0x315), 2: (0x184,)} BUTTONS_BUS = 0 # rx only - MAX_GAS = 1346 + MAX_GAS = 2698 MIN_GAS = -540 # maximum regen INACTIVE_GAS = -500 @@ -401,6 +401,9 @@ class TestGmCcLongitudinalSafety(TestGmCameraSafety): class TestGmCcLongitudinalPandaSchedSafety(TestGmCcLongitudinalSafety): + FWD_BLACKLISTED_ADDRS = {2: [0x180, 0x370], 0: [0x184, 0x3D1]} + INTERCEPTOR_GAS_PRESSED = 596 + def setUp(self): self.packer = CANPackerPanda("gm_global_a_powertrain_generated") self.packer_chassis = CANPackerPanda("gm_global_a_chassis") @@ -417,14 +420,58 @@ class TestGmCcLongitudinalPandaSchedSafety(TestGmCcLongitudinalSafety): ) self.safety.init_tests() - def test_3d1_feed_frame_blocked(self): - self.assertFalse(self._tx(self._pcm_status_msg(True))) - self.assertFalse(self._tx(self._pcm_status_msg(False))) + def _interceptor_user_gas(self, gas): + return interceptor_msg(gas, 0x201) - def test_paddle_feed_frames_blocked(self): + def test_prev_gas(self): + self.assertFalse(self.safety.get_gas_pressed_prev()) + self._rx(self._user_gas_msg(self.GAS_PRESSED_THRESHOLD + 1)) + self.assertFalse(self.safety.get_gas_pressed_prev()) + self._rx(self._interceptor_user_gas(self.INTERCEPTOR_GAS_PRESSED)) + self.assertFalse(self.safety.get_gas_pressed_prev()) + self._rx(self._interceptor_user_gas(0)) + self.assertFalse(self.safety.get_gas_pressed_prev()) + + def test_no_disengage_on_gas(self): + self._rx(self._interceptor_user_gas(0)) self.safety.set_controls_allowed(True) - self.assertFalse(self._tx(common.make_msg(0, 0xBD, 7))) - self.assertFalse(self._tx(common.make_msg(0, 0x1F5, 8))) + self._rx(self._interceptor_user_gas(self.INTERCEPTOR_GAS_PRESSED)) + self.assertTrue(self.safety.get_controls_allowed()) + self.assertTrue(self.safety.get_longitudinal_allowed()) + self._rx(self._interceptor_user_gas(0)) + self.assertTrue(self.safety.get_longitudinal_allowed()) + + def test_buttons(self): + self.safety.set_controls_allowed(0) + for btn in range(8): + self.assertFalse(self._tx(self._button_msg(btn))) + + self.safety.set_controls_allowed(1) + for btn in range(8): + self.assertEqual(btn == Buttons.CANCEL, self._tx(self._button_msg(btn))) + + allowed_btns = {Buttons.UNPRESS, Buttons.RES_ACCEL, Buttons.DECEL_SET, Buttons.CANCEL} + for enabled in (True, False): + self._rx(self._pcm_status_msg(enabled)) + for btn in range(8): + self.assertEqual(enabled and btn in allowed_btns, self._tx(self._button_msg(btn))) + + def test_3d1_feed_frame_allowed(self): + self.assertTrue(self._tx(self._pcm_status_msg(True))) + self.assertTrue(self._tx(self._pcm_status_msg(False))) + + def test_paddle_feed_apply_frames_blocked_after_stock_sync(self): + paddle_apply = common.make_msg(0, 0xBD, 7, bytes([0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])) + prndl_apply = common.make_msg(0, 0x1F5, 8, bytes([0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00])) + + self.safety.set_controls_allowed(True) + self.assertTrue(self._tx(paddle_apply)) + self.assertTrue(self._tx(prndl_apply)) + + self._rx(paddle_apply) + self._rx(prndl_apply) + self.assertFalse(self._tx(paddle_apply)) + self.assertFalse(self._tx(prndl_apply)) if __name__ == "__main__": diff --git a/panda/board/obj/body_h7.bin.signed b/panda/board/obj/body_h7.bin.signed index 3deaaf70ea89537b0adf7416aa5030d36c4796f7..72b290d68be02b3e9d6d8416d59cde50c5ef732e 100644 GIT binary patch delta 152 zcmV;J0B8TW)daZJ1h6ow2x4MoV>mT6IHNeKfPX$V4x3%Ewt#`|_5NKXm_yBGE(Q{B ziOrduAOGccbhi(w&>sNDVA`bI|8&>uy=C3&J?9AL0~Df_cV0AqO>@GY{{EC(9Hzc* zCP8a{`Fm`LS#a}6bNd3F4v{@vLeyUqr_NQf*jOnYXLn4^GH&bxmpNZ*h+gZ#!az!f GcmaqdMM?bt delta 152 zcmV;J0B8TW)daZJ1h6ow2st@qIAUTpWurK%fPZZav9A>CjB@+~iw5=~&{-UD@p&7_ z!N0RV{TAhCdwAD9`L?p?S~PkoUzIKOpau0YGyfKY_;M*T-Xj5UfAqSEIcN{5cjcTG z?h|ha_;w%}lwuVNc!C)Z1_hcf2L^rV!?rUkoGfWJ6TqD-2;HuVxzoogNH1ETB1oIG GTLE0@`9o^} diff --git a/panda/board/obj/body_h7/bootstub.elf b/panda/board/obj/body_h7/bootstub.elf index 7cd3422ffbf6f8896b9811a5b06ebbe4e56f41ab..ea483bf0a20b5e7f51ca558dfbcfa76f8de7a30d 100755 GIT binary patch delta 27 jcmdn;fo;nNwhgW}97##3$rh%j7R|mk+kI^qpH~9_pGgX% delta 27 jcmdn;fo;nNwhgW}9F~?T7D-8Fsm;DN+kI^qpH~9_ouUe= diff --git a/panda/board/obj/body_h7/main.bin b/panda/board/obj/body_h7/main.bin index 30fce1179be6c841054436427bb540fa340c9871..432db51f656ccec05c07205f890653a9c321800f 100755 GIT binary patch delta 23 dcmdmRg=GT}8LZ++N=i+(Fg3Nb%7 diff --git a/panda/board/obj/bootstub.body_h7.bin b/panda/board/obj/bootstub.body_h7.bin index 2220e6ec9ab9c4f0099a6cacb84600250567db49..88af1466ead51c703df9aec08af62e3d6ab9b3e1 100755 GIT binary patch delta 21 ccmaEo^dxD6s}4s}Qfjh=sj0pF delta 21 ccmaEo^dxD6s}6^yWr{^ol3D6zUmbB)0AUsfYXATM diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin index 164c0b1e8415ef53787b3a25c509f0b2cd6e5126..f2322a6653f314db295045c42d8737fb02f1ba49 100755 GIT binary patch delta 34 qcmdlJwkK?ZubN;|Qfjh=si}poi>p(pJ3|A*Zo9oo}u>b(kItx_* delta 34 qcmdlJwkK?ZubQBxWr{^ol3A**i>p(pJ3|A*Zo9oo}u>b(i(hFPw diff --git a/panda/board/obj/bootstub.panda_h7.bin b/panda/board/obj/bootstub.panda_h7.bin index 3af13ab7c7f8510144f61f22554e2d43a8a12e98..76336ad58225d38928c3138593d79c3dfab558bf 100755 GIT binary patch delta 23 fcmaDbiSfZC#tog$97##3$rh%j7MmwJpJxRCb~Xtt delta 23 fcmaDbiSfZC#tog$9F~?T7D-8FshcM{pJxRCbaM$a diff --git a/panda/board/obj/bootstub.panda_h7_remote.bin b/panda/board/obj/bootstub.panda_h7_remote.bin index 3af13ab7c7f8510144f61f22554e2d43a8a12e98..76336ad58225d38928c3138593d79c3dfab558bf 100755 GIT binary patch delta 23 fcmaDbiSfZC#tog$97##3$rh%j7MmwJpJxRCb~Xtt delta 23 fcmaDbiSfZC#tog$9F~?T7D-8FshcM{pJxRCbaM$a diff --git a/panda/board/obj/bootstub.panda_jungle_h7.bin b/panda/board/obj/bootstub.panda_jungle_h7.bin index 7fb5fa5754f46dd1c8e8d609b02d3d868eef1d87..4c6f82487f9c6b933bf99498240471df3c189d37 100755 GIT binary patch delta 21 ccmZq4ZOPrR*MK7_DK*)`)YM}0QG@-g0AONVE_OC diff --git a/panda/board/obj/bootstub.panda_remote.bin b/panda/board/obj/bootstub.panda_remote.bin index 164c0b1e8415ef53787b3a25c509f0b2cd6e5126..f2322a6653f314db295045c42d8737fb02f1ba49 100755 GIT binary patch delta 34 qcmdlJwkK?ZubN;|Qfjh=si}poi>p(pJ3|A*Zo9oo}u>b(kItx_* delta 34 qcmdlJwkK?ZubQBxWr{^ol3A**i>p(pJ3|A*Zo9oo}u>b(i(hFPw diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h index da7e7b6a0..e1e7307ca 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-99d8bb6e-DEBUG"; +const uint8_t gitversion[19] = "DEV-bbec8558-DEBUG"; diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed index e518c51ce6801e62341a4de8f7f5f69ec141d8c8..5b993b34b34bebbebb8640a0220f5053e7e87da6 100644 GIT binary patch delta 153 zcmV;K0A~O6m<05g1h5dB2x4MoV>mT6II|d=+;D%f*b+EPXnXK^QYr9Yhcq&S#xQs1Td^Fs&`R<@Z?Zri)m3&_fSOtO>akWuG!=)(v4^Fw9ti>9;ymcSz}MRDgGy_ HJ>LOZt~N;t diff --git a/panda/board/obj/panda/bootstub.elf b/panda/board/obj/panda/bootstub.elf index 25687a7083419aee1d1ca2cf02e2aa3e1a3c6a3b..1f7f06056aab5432daea53590499fc87f7adb7c9 100755 GIT binary patch delta 40 wcmbO+nQg{owhg{!f=NlK$rh%j7P>C3PND7$4GfbfnkqEcnQgB#W0VR801u!HssI20 delta 40 wcmbO+nQg{owhg{!f|iyk7D-8Fsk$z%PND7$4GfbfnkqEcnQgB#W0VR801i|Pu>b%7 diff --git a/panda/board/obj/panda/main.bin b/panda/board/obj/panda/main.bin index 16db3dd87c820ca0f83aa2b6847c1b48c2b04faf..b73ff6285f024cff9424ad45476baebf93ece541 100755 GIT binary patch delta 23 fcmaDeo#oARmJI^4Ig*l6lPye5EjCNczES`HcC875 delta 23 fcmaDeo#oARmJI^4IV>$xERvGUQa4M?zES`Hbm|F- diff --git a/panda/board/obj/panda/main.elf b/panda/board/obj/panda/main.elf index 767381b9e6b508fce1dba73dc8bc9a846ad2bb16..541d6c5cf64a16570c8005c38f32d0f62a9404c4 100755 GIT binary patch delta 39 scmX@GQslr&kqrW?Ig*l6lPye5Et(}(w@a*M1Y#y2X5KEbnq@^M057QyjQ{`u delta 39 scmX@GQslr&kqrW?IV>$xERvGUQkx}Kw@a*M1Y#y2X5KEbnq@^M04`PzlmGw# diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed index 5490f3197eba6deef3a1c3f3efcb0f3d04a8006d..1bb894ebf2d2a03d26bcdafaa50b1ab9ae57a21a 100644 GIT binary patch delta 153 zcmV;K0A~NRlLfSs1+XB-2x4MoV>mT6II}3m41<3-wMb;er<`ytIeBFZ(Z_|3T7s6+ zP1b^lU;&)@Z!zW4(~h>OZn%A!hjeVxG`l6^#jjHMGi$sTn5+72NSh?gOOk6$!%ZFv z1C6_6&{k2iv`1O-P-iD>UnaY~?}5yd&;Z&};lvWt3iwglHVNA;XI(w%kV&HAOpL8e HYp4NO^utPP delta 153 zcmV;K0A~NRlLfSs1+XB-2st@qIAUTpWwR*841<3*^D+6H;jNE`L^0lfp1h0Lj?KJB z{jvi~o%^_?L7)i0i<5GNQrGh7!{jbaADQKD!I zWvWZ*mZ`yaphW_V3+M>y4U6Uy=-#K6h97I529N(zL|P)mT6IJ5A@41<4hnp{ZM;@w8KyIA9au&LrK?PG&m z;xu{0GdKg7mdd>e$OGL2%+x#;$a9U_@? zz`OXM_h*gpmrZAa+;nrT18ZKb7@z!Z#@?j`3gJ#&9=TrAvSEG@jtL?`bp=$cIBe;$sK3C-QI+?kZgD9Qg$ie-%laD+XC_$$HNMKOJC~Ja4&{e HkpTfK^~z0n diff --git a/panda/board/obj/panda_h7_remote/bootstub.elf b/panda/board/obj/panda_h7_remote/bootstub.elf index 6108b45be6acfa6ccde4d4bd4f9e011188adfa98..65d30202ac5daf2866a6b3a1c3209886ed6d9a01 100755 GIT binary patch delta 31 ncmZ3ml5@dI&JCTx97##3$rh%j7R?ib+b0GyZl4&;#Lox-#Hb4& delta 31 ncmZ3ml5@dI&JCTx9F~?T7D-8Fsm&9E+b0GyZl4&;#Lox-!yOAI diff --git a/panda/board/obj/panda_h7_remote/main.bin b/panda/board/obj/panda_h7_remote/main.bin index bf1446c615925c8ad483d21f2b6587cd8b769556..26c9cd09f4a931de15635b003e8ed1aaaf84de1a 100755 GIT binary patch delta 23 fcmew|k@d?&)(tO?awH|CCR>=AT5SGsl%*K}iG2#s delta 23 fcmew|k@d?&)(tO?a#&iXSR^HxrEdOkl%*K}hq?;Z diff --git a/panda/board/obj/panda_h7_remote/main.elf b/panda/board/obj/panda_h7_remote/main.elf index 507ed0c1cc636541a8dda4d3556a3dc3846d31b7..1d35db64f86bfd9c3557e6764e3b1d184f451bde 100755 GIT binary patch delta 43 ucmeC_knHJ@-0mT6IJ4cZi-LcsX$Rx)HN!q-Z@nAAbALAtO~HH& zjgt>Ynurx=bjSGKbff$Xr##ylW;_txkPp4oL`>_s%~U#&_xtm3(Yh51F|bl=O1su( zq`RR8T_6@ffa-zxj&^%@%!asAQ48B5Ttep?v=HW{eZUw@Oeck6El4pM--SU-R^?3m HrQ88kiV#Vc delta 153 zcmV;K0A~N_;{@pA1hCbv2st@qIAUTpWwYI`i-LciG2_JAZXn-DDZCTXqZot8~CKh)46*<-afC=^jP(L>{C2n@bJ&;roYH zr8+U%<3ABc(%E(Rg_+$(_c@;~P$~(TdXM7AW3M=$kPi7K3q(oO7}O|0+{T`YATWyW H$o2u3!}Ct> diff --git a/panda/board/obj/panda_jungle_h7/bootstub.elf b/panda/board/obj/panda_jungle_h7/bootstub.elf index 3f6125f41c1d2d6c3c9ad15c8b41f8d4ffcd7c38..b797d530212f11dc0a81417af4e217bb210bf906 100755 GIT binary patch delta 27 jcmZ2*f_=dW_6>U-IFgc5lPye5Et-!yY(MJ27`+$(qSOmL delta 27 jcmZ2*f_=dW_6>U-I4mtwERvGUQk#!DY(MJ27`+$(p)CtU diff --git a/panda/board/obj/panda_jungle_h7/main.bin b/panda/board/obj/panda_jungle_h7/main.bin index d4abb33e58d32788434ffffe8ba034454f8f9695..464344a9af4cbdb72db4fa1f9b6b1f1c6dc18a9d 100755 GIT binary patch delta 23 fcmaFxh~>c}mJL_eaU>=AT5P_%uDJ;Skk$)v delta 23 fcmaFxh~>c}mJL_eaadZWSR^HxrEb2vuDJ;Sj}r@c diff --git a/panda/board/obj/panda_jungle_h7/main.elf b/panda/board/obj/panda_jungle_h7/main.elf index e1e51f6963036fb629d96098d59edd5092cc37d6..f101b14b15a1d2bcfc9c0e90998245921665a0ab 100755 GIT binary patch delta 39 tcmezHMeM^Du?<)EaU>=AS~TC?*M4^&BM>tIG4uAj`&cIb1^}d>6%+sf delta 39 tcmezHMeM^Du?<)EaadZWSR^Hxr8eK)*M4^&BM>tIG4uAj`&cIb1^}Z?6&nBm diff --git a/panda/board/obj/panda_remote.bin.signed b/panda/board/obj/panda_remote.bin.signed index ae56eb12c2368b9bfd80e35149e3ad9d9b0b97cc..8b3447760e4c990b353de03123d861417dbb6ae6 100644 GIT binary patch delta 153 zcmV;K0A~Nlm;}g}1hC|q2x4MoV>mT6IJ4}U+;D%oV|3?#GSM?&@!)cn%RW1&YqQvC z-`8?#>O(~+uuI2M5P+DOUTicj;=??i2J>Fy|IGd(j`+dJ6~V@@3(#38Amnimrru6N z(WW#5X2xTOEjpkt-D@Dti-+;D%pp@eyV7_o9IC3PND7$4GfbfnkqEcnQgB#V^j(T01_As!Two#nuEmJLs4aU>=AT5NtZ>q-Ftf5!^Y delta 23 fcmX>wo#nuEmJLs4aadZWSR^HxrEY#R>q-Ftegq2F diff --git a/panda/board/obj/panda_remote/main.elf b/panda/board/obj/panda_remote/main.elf index d7e4b6054c87c619cccc8b6de6b02a0aed902c72..d825fff3542a1eda9002c83f34ba0d2a5b471690 100755 GIT binary patch delta 39 scmeycQsl!*kqu8)aU>=AS~R~|)&6D`BM>tIG4u8}t5{gF0E?ItJOBUy delta 39 scmeycQsl!*kqu8)aadZWSR^Hxr8d7=)&6D`BM>tIG4u8}t5{gF0E$HuLjV8( diff --git a/panda/board/obj/version b/panda/board/obj/version index 7c759d735..7f4b0f547 100644 --- a/panda/board/obj/version +++ b/panda/board/obj/version @@ -1 +1 @@ -DEV-99d8bb6e-DEBUG \ No newline at end of file +DEV-bbec8558-DEBUG \ No newline at end of file