Compare commits

..

1977 Commits

Author SHA1 Message Date
firestar5683 28ec3ccb80 squeak squeak 2026-08-23 10:41:13 -05:00
firestar5683 5f65219aed name 2026-08-21 20:26:21 -05:00
firestar5683 1d9fdc25ca toy 2026-08-21 19:16:28 -05:00
firestar5683 05db925e93 sentry 2026-08-21 18:44:11 -05:00
firestar5683 2bd080821b Zoom default boot logo 2026-08-21 18:37:21 -05:00
whoisdomi 651726bbb5 Joystick Mode Refresh
OP Long: Left stick horizontal steer
	            Right stick vertical gas/brake

AOL:  Left stick horizontal steer

Controller profiles added:
Google Stadia Controller added
Xbox Controller has its own profile
Dual Sense has its own profile

joystick_probe.py tool allows people to discover their own controllers.
2026-08-21 17:19:46 -05:00
firestar5683 6eabec436d Update starpilot_boot_logo.jpg 2026-08-21 14:43:55 -05:00
firestar5683 56d6a6ee47 leaf 2026-08-21 14:19:34 -05:00
firestar5683 e9f4c6316c b is for build 2026-08-21 14:04:30 -05:00
firestar5683 284dbddd8a book 2026-08-21 14:03:08 -05:00
firestar5683 0068d7a698 build 2026-08-21 13:23:15 -05:00
firestar5683 f63ee3375a Comover 2026-08-21 13:21:20 -05:00
firestar5683 05e9dfd5d0 Require matching blinkers for navigation turn desires
Cherry-picked Feature Request 1267242 from ab98ae54bb. Prevent sharp or ordinary navigation turn desires from being issued unless the corresponding turn signal is active, and add regression coverage for missing and opposite signals.

Co-Authored-By: Prabhaav Pillai <prabhaav@msu.edu>
2026-08-21 12:04:11 -05:00
firestarsdog 269562e73a Polish favorite picker 2026-08-21 04:54:35 -04:00
firestarsdog 3cefd789e5 Uppies 2026-08-21 01:24:53 -04:00
firestarsdog d477735c92 Radial Menu Squishfest 2026-08-21 01:24:53 -04:00
firestar5683 66893b27ae build 2026-08-21 00:13:48 -05:00
firestar5683 e0d9e05f9f sub 2 2026-08-21 00:12:30 -05:00
firestar5683 73f64ac754 pra 2026-08-20 19:55:35 -05:00
firestar5683 5130168067 frumpy 2026-08-20 19:35:48 -05:00
Prabhaav Pillai 04a2530ace Add traffic border color to C4
Cherry-picked Feature Request 745053 from 371f063362.

Co-authored-by: Prabhaav Pillai <prabhaav@msu.edu>
2026-08-20 19:17:57 -05:00
firestar5683 297358741a Nosferatu 2026-08-20 19:08:35 -05:00
firestar5683 41b10d0184 ack 2026-08-20 18:18:57 -05:00
Prabhaav Pillai 49f061eee4 Fix image rendering position in C4 and C3 preview functions 2026-08-20 17:23:01 -04:00
firestar5683 d8090be19d fotos glo glo 2026-08-20 15:31:44 -05:00
Prabhaav Pillai d78902d73b Add C4 side camera support with curved rectangle rendering
Cherry-picked corrected Feature Request 510203 implementation from 8768e08341f2d4044776f5ba846e606dc9cd3f1d.

Co-authored-by: Prabhaav Pillai <prabhaav@msu.edu>
2026-08-20 14:07:11 -05:00
firestarsdog a0cf285394 Dough 2026-08-20 03:53:52 -04:00
firestar5683 a531309e4f build 2026-08-19 23:08:20 -05:00
firestar5683 459d7c4099 but you have heard of me 2026-08-19 23:06:33 -05:00
firestar5683 d47be80928 Create tests 2026-08-19 19:49:32 -05:00
firestar5683 25903a0d1a Lite Brite 2026-08-19 15:04:21 -05:00
firestar5683 75bd7ea3a0 docs2 2026-08-18 22:24:03 -05:00
firestar5683 74a2d0119e Update CARS.md 2026-08-18 21:48:45 -05:00
firestar5683 4f0264d07e Crocs Marathon 2026-08-18 21:17:45 -05:00
firestarsdog c201bef873 Offroad Start Navigation Guards 2026-08-18 18:59:44 -04:00
firestar5683 8e10e6adc1 build 2026-08-18 17:30:40 -05:00
firestar5683 4078e6fcfa Zone 5 2026-08-18 17:28:05 -05:00
firestarsdog 80c97d0e80 Mari Gangbanger Biscuit isn't "OK" 2026-08-18 17:49:52 -04:00
firestarsdog 525e57a26e override speed fix 2026-08-18 15:44:11 -04:00
firestar5683 def1979aca build 2026-08-18 14:15:24 -05:00
firestar5683 5d9b55adcb greased lightning 2026-08-18 14:15:11 -05:00
firestar5683 21805a5454 build 2026-08-18 12:11:44 -05:00
firestar5683 50e1c1d376 what a mornin 2026-08-18 12:10:14 -05:00
firestarsdog ef956fb54e jitterbug 2026-08-18 03:28:48 -04:00
firestarsdog 944f0f087d Domi's Olo Biscuits 2026-08-18 01:57:20 -04:00
firestarsdog 68c6a1f189 sound panel overlap 2026-08-18 00:40:27 -04:00
firestar5683 c4ef78afc9 build 2026-08-17 23:30:50 -05:00
firestar5683 526f8e0075 oleoleole 2026-08-17 23:28:52 -05:00
firestarsdog a62e7b50d7 maybe this is olo 2026-08-18 00:27:12 -04:00
firestar5683 e33213187e Create FUNDING.yml 2026-08-17 22:44:41 -05:00
firestar5683 bbbb4d1cf6 teeny slider 2026-08-17 22:34:58 -05:00
firestar5683 17c1499100 ntfy 2026-08-17 22:03:47 -05:00
firestar5683 00772a6aeb BB GORL 2026-08-17 21:35:09 -05:00
firestarsdog 76c930e33b firestar's baby girl just don't know 2026-08-17 22:32:17 -04:00
firestar5683 7177b312f4 rolos 2026-08-17 20:50:35 -05:00
firestar5683 d3cfea6a8a build 2026-08-17 16:36:21 -05:00
firestar5683 6e7b197e8a Weevil 2026-08-17 16:36:21 -05:00
firestar5683 3719f97866 cleanup 2026-08-17 09:59:08 -05:00
firestar5683 161ecbc1ab Here a we go 2026-08-17 06:36:55 -05:00
firestar5683 b567d9fc90 optimize 2026-08-16 21:09:58 -05:00
firestar5683 33744deb61 I'm goin to sonic 2026-08-16 19:11:14 -05:00
firestar5683 225dfb6678 yo yo yo zik 2026-08-16 19:04:30 -05:00
firestar5683 0593e53b04 fargo levy 2026-08-16 17:32:22 -05:00
firestar5683 4c3b2e9206 build 2026-08-16 17:04:58 -05:00
firestar5683 230ed14ece Nuts 2026-08-16 17:03:51 -05:00
firestar5683 5c00729cfe fresh build 2026-08-16 14:32:28 -05:00
firestar5683 f95dbf83c4 done 2026-08-16 14:30:12 -05:00
firestar5683 f6ab7849e8 fix 2026-08-16 14:24:32 -05:00
firestar5683 6d52355bdd fix 2026-08-16 14:11:52 -05:00
firestar5683 757c82c1e7 revert 2026-08-16 14:08:30 -05:00
firestar5683 1a56ccbd9e Update card.py 2026-08-16 13:56:11 -05:00
firestar5683 f15e6f86c7 Update sentryd.py 2026-08-16 13:50:06 -05:00
firestar5683 5e8e40c5c3 lateral regress 2026-08-16 13:38:38 -05:00
firestar5683 13d0973528 Do not moo 2026-08-16 12:53:47 -05:00
firestar5683 b10afc8379 Fix external GPU model handoff 2026-08-16 12:53:04 -05:00
firestar5683 00fdbd9c6f Update sentryd.py 2026-08-16 12:30:59 -05:00
firestar5683 17cef8f164 build 2026-08-16 11:33:39 -05:00
firestar5683 730ba6e14d sentry things 2026-08-16 11:29:41 -05:00
firestar5683 604a5ec3d1 build
Refresh tracked runtime artifacts after Rivian safety hardening.

Co-authored-by: TonyJOM <anthonyorta20@icloud.com>
2026-08-16 11:27:09 -05:00
firestar5683 f2e6fddee9 Harden Rivian angle and bridge safety
Keep Rivian angle commands below 4 m/s², exercise the common angle-safety coverage, and prevent generic firmware management from overwriting unverified external Black Pandas.

Original safety work based on PR #90 by TonyJOM (Anthony Orta).

Co-authored-by: TonyJOM <anthonyorta20@icloud.com>
2026-08-16 11:26:25 -05:00
firestar5683 cb4ebf85a6 Merge PR #90: Rivian Angle Support
Original PR by TonyJOM (Anthony Orta).

Co-authored-by: TonyJOM <anthonyorta20@icloud.com>
2026-08-16 11:23:08 -05:00
firestar5683 60e1615553 Update sentryd.py 2026-08-16 11:07:24 -05:00
firestar5683 83e8064044 build 2026-08-16 10:53:26 -05:00
firestar5683 a143e6ee93 Squilliam Fancyson 2026-08-16 10:45:56 -05:00
firestar5683 6f57861420 Extend external GPU load watchdog 2026-08-16 10:10:36 -05:00
firestar5683 5ef9fbda99 yaas 2026-08-15 23:35:50 -05:00
firestar5683 1fe6a5011a it's CarniVAl 2026-08-15 22:30:04 -05:00
firestar5683 14b2e4dbc8 Warm up external GPU model before activation 2026-08-15 22:26:54 -05:00
firestar5683 42d164f285 build 2026-08-15 21:37:59 -05:00
firestar5683 032bf899e0 h8ters 2026-08-15 21:34:32 -05:00
firestar5683 1f470c8da5 build 2026-08-15 20:04:25 -05:00
firestar5683 3f6ccd104e Ford Stuff
Huge thanks to BluePilot guys!
2026-08-15 20:00:42 -05:00
firestar5683 4ccfc1c00c Fun Dip 2026-08-15 18:52:33 -05:00
firestar5683 7a54b630fc Restore Models branch manifest lookup 2026-08-15 18:28:59 -05:00
firestar5683 22ee337762 Fix v24 manifest path 2026-08-15 18:26:37 -05:00
firestar5683 d84a6a95c1 Add GPU model gating and v24 manifest support 2026-08-15 17:39:46 -05:00
firestar5683 ddf95f3e45 build 2026-08-15 12:18:39 -05:00
firestar5683 008958360c Oops 2026-08-15 12:16:08 -05:00
TonyJOM c0e9507313 Rivian Angle Support 2026-08-15 13:04:12 -04:00
firestar5683 d54b6b0794 Make it make sense 2026-08-15 11:56:53 -05:00
firestar5683 ec485d078a sentry test push 2026-08-15 11:48:39 -05:00
firestar5683 d97a4fdd65 Sentry Side Bar 2026-08-15 11:32:04 -05:00
firestar5683 12e9e1982c BUMP 2026-08-15 11:24:23 -05:00
firestar5683 f73af2211d The Saturday Threshold 2026-08-15 11:22:14 -05:00
firestar5683 603f9b56f9 BURN THE WITCH 2026-08-14 22:36:56 -05:00
firestar5683 101c354f3e nisswan 2026-08-14 21:38:20 -05:00
firestar5683 c2e2c24e8c nisswan 2026-08-14 21:38:09 -05:00
firestar5683 21ba6ab7cd build 2026-08-14 20:56:24 -05:00
firestar5683 23a8240688 Wind in the sails 2026-08-14 20:56:23 -05:00
firestar5683 fa8616b7ce Fix Capn Proto image version detection 2026-08-14 20:56:23 -05:00
firestar5683 d1b4bfe8e9 build 2026-08-14 20:55:47 -05:00
firestar5683 8526563cf6 Wind in the sails 2026-08-14 20:55:10 -05:00
firestar5683 c3ad1ba7dc Fix Capn Proto image version detection 2026-08-14 20:54:11 -05:00
Matt Goldstein e245ac8332 Use current traffic conditions in navigation via mapbox API
Matches galaxy navigation

(cherry picked from commit b36533855b)
2026-08-14 20:33:49 -05:00
joeruhe 74ff7bdf97 Update trax tuning.
(cherry picked from commit cbe1c9ee8d)
2026-08-14 20:33:49 -05:00
joeruhe 096dbfb701 Initial changes for trax tuning.
(cherry picked from commit 7e44c641ed)
2026-08-14 20:33:49 -05:00
firestar5683 ad2382da53 build 2026-08-14 20:16:08 -05:00
firestar5683 2118eb17e0 This Ain't The Armory 2026-08-14 20:12:51 -05:00
firestar5683 8a5cef0f86 Update GitHub Actions for Node 24 2026-08-14 19:42:28 -05:00
firestar5683 6ed117a131 render 2026-08-14 19:26:13 -05:00
firestarsdog e78537c4aa Big UI NoUploads NoLogging Fixes 2026-08-14 15:16:21 -04:00
firestar5683 cdfd5d1d66 Sentry and Tunes 2026-08-14 12:05:45 -05:00
firestar5683 8e1caf8fe4 Ich bin müde. 2026-08-14 09:53:06 -05:00
firestar5683 c3ee472b19 skyrim 2026-08-13 16:02:05 -05:00
firestar5683 16521d354e if you're not first, you're last 2026-08-13 15:02:17 -05:00
firestar5683 5ffa73368a FASTER 2026-08-13 14:52:52 -05:00
firestarsdog b290167194 A Quickie 2026-08-13 15:43:43 -04:00
firestar5683 ebdb85ff06 Double trouble 2026-08-13 14:30:14 -05:00
firestar5683 ede63179c1 wubba 2026-08-13 14:07:01 -05:00
firestar5683 ada0ce8855 The Queen's Gambit 2026-08-13 12:08:12 -05:00
firestar5683 682b4b5c92 Tubular 2026-08-12 23:29:46 -05:00
firestarsdog 1bf2717626 Quick Nav 2026-08-12 22:19:42 -04:00
firestarsdog cbf7f35c85 Switcharoo 2026-08-12 20:32:29 -04:00
firestarsdog 8c41d92e89 Improve speed limit source bubble readability 2026-08-12 19:49:39 -04:00
firestarsdog 097c6e4eb1 Curve Widget Cleanup 2026-08-12 19:17:54 -04:00
firestar5683 e1c3d1e929 Zik's Request 2026-08-11 22:31:20 -05:00
firestar5683 bd9d65e92c Bionic Commando 2026-08-11 21:13:15 -05:00
firestar5683 decf859858 subuwu 2 2026-08-11 19:39:32 -05:00
firestar5683 dcde24f667 The biggest, the largest 2026-08-11 18:52:27 -05:00
firestar5683 4f471fc38c everythings black 2026-08-11 16:15:01 -05:00
firestar5683 ca737c0d40 UI 2026-08-11 15:56:38 -05:00
firestar5683 f1f065a77a Pink Lady 2026-08-11 15:10:52 -05:00
firestar5683 f64d6e6a73 build 2026-08-11 14:52:07 -05:00
firestar5683 c56f7d0c20 KERCHEW 2026-08-11 14:51:20 -05:00
firestar5683 a367ee458c build 2026-08-11 11:32:06 -05:00
firestar5683 187318b500 Shazam 2026-08-11 11:31:13 -05:00
firestar5683 acf32365be model stuff 2026-08-11 09:30:46 -05:00
firestarsdog d7ef213792 OnStar Navigation : Always There. Always Ready. 2026-08-11 01:07:02 -04:00
firestar5683 6bd48c28e8 The smallest promotion 2026-08-10 23:17:21 -05:00
firestar5683 d938c9daa6 new dm 2026-08-10 14:07:24 -05:00
firestar5683 1d3cd32e56 SLC break my kneecaps 2026-08-10 11:48:22 -05:00
firestar5683 61f5c9e7ef build 2026-08-10 10:52:45 -05:00
firestar5683 0315fe483a Uptown Funk 2026-08-10 10:52:01 -05:00
firestar5683 7f6adc7a7f build 2026-08-09 21:12:47 -05:00
firestar5683 d4d06e5561 Subuwu 2026-08-09 20:54:41 -05:00
firestarsdog 98f856a548 BigUI : Nav on device, maybe? 2026-08-09 19:30:35 -04:00
firestar5683 d8528595b3 New DM 2026-08-09 16:20:18 -05:00
firestarsdog 0e5a5c527e Amish Bubble Butter 2026-08-09 05:38:01 -04:00
firestarsdog 2c9b8a8a2f All glows to the back 2026-08-09 03:24:29 -04:00
firestar5683 47ba1544d3 ev6 2026-08-08 22:43:47 -05:00
firestar5683 425ba0faf4 I thought you said weast 2026-08-08 22:30:34 -05:00
firestar5683 5485e275fc fix: skip EGMP ECU disable in ready state
Co-authored-by: otaku <696343+otaku@users.noreply.github.com>
2026-08-08 22:25:17 -05:00
firestar5683 724e3b200c Build 2026-08-08 21:47:33 -05:00
firestar5683 a59f46c7b2 Leafy Greens 2026-08-08 21:46:49 -05:00
Prabhaav Pillai 3fe7d9b90a Update side labels and instructions for clarity in PipSideCamera 2026-08-08 18:26:54 -04:00
firestar5683 9e3ab90bdd hey 2026-08-08 16:47:01 -05:00
firestar5683 8e69eb32fd fla 2026-08-08 16:35:20 -05:00
firestarsdog 7ec6fa5c0e Plain Biscuits 2026-08-08 17:06:14 -04:00
firestar5683 83444c3499 build 2026-08-08 14:44:17 -05:00
firestar5683 57ac82d148 Mr. Sir 2026-08-08 14:42:00 -05:00
whoisdomi 89d8b1cb1b Gear select bug fix 2026-08-08 08:57:41 -05:00
firestarsdog 6eba716ff8 Biscuit tweaks 2026-08-08 05:04:34 -04:00
firestar5683 42d3cf42d8 build 2026-08-07 23:38:44 -05:00
firestar5683 06f6ff66a8 Carbon Rods 2026-08-07 23:35:12 -05:00
firestarsdog cd1d13e456 Some more biscuit dough, needs more yeast tho 2026-08-07 22:28:30 -04:00
firestar5683 b02a10b4de build 2026-08-07 16:18:13 -05:00
firestar5683 518b0f0345 Barfday Push 2026-08-07 16:00:13 -05:00
firestar5683 3c9721be9b pandad: guarantee SPI slave turnaround time
Co-Authored-By: Adeeb Shihadeh <adeebshihadeh@gmail.com>
2026-08-07 15:04:42 -05:00
firestarsdog a9b20d2c32 @Madam Mari Bisquik, pls review biscuits 2026-08-07 16:02:37 -04:00
firestar5683 01b606b92a new new 2026-08-07 12:34:04 -05:00
firestar5683 32117d43bc Keep Redneck Cruise in Galaxy developer settings 2026-08-07 11:36:15 -05:00
firestarsdog 332dfdf099 Dango Unchained 2026-08-07 11:34:28 -05:00
firestarsdog f7634ec761 Dingo 2026-08-07 11:34:28 -05:00
firestar5683 98a913693d The Velvet Night 2026-08-07 11:27:59 -05:00
whoisdomi 2250920c8a MP4 speed export 2026-08-07 10:42:26 -05:00
firestarsdog cdd8a0b2df & DJ Khaled 2026-08-07 00:33:13 -04:00
firestar5683 d326365ee4 feat Pitbull 2026-08-06 23:22:57 -05:00
firestarsdog bc413a844f Wrapped Biscuits 2026-08-07 00:04:47 -04:00
firestarsdog 76e5806575 Feet Biscuits 2026-08-06 23:36:28 -04:00
firestar5683 a527614604 Make lateral tests pass 2026-08-06 21:47:43 -05:00
firestar5683 63817ce7db Fix lateral test initialization 2026-08-06 21:46:25 -05:00
firestar5683 eac56eea22 smooth center 2026-08-06 20:57:29 -05:00
firestar5683 8f95c92891 build 2026-08-06 20:11:39 -05:00
firestar5683 dd870ef29c Better Lat 4 U 2026-08-06 20:08:43 -05:00
whoisdomi a149d2624a Mp4 wsl export tweaks 2026-08-06 19:59:41 -05:00
firestarsdog 06adeb71fd add csc to demos 2026-08-06 20:45:46 -04:00
firestar5683 bbbfc46601 Daz Alot of Toggies 2026-08-06 18:25:47 -05:00
firestar5683 48d6adab46 build 2026-08-06 17:40:41 -05:00
whoisdomi a611653837 MP4 Export for Raybig on WSL 2026-08-06 17:38:14 -05:00
whoisdomi 8b3ce51325 Close Gap on Lane Change Tweaks 2026-08-06 17:38:13 -05:00
whoisdomi cee5cf4471 Force Stop: more prebrake 2026-08-06 17:38:12 -05:00
firestar5683 d51bd65695 Actuator Door 2026-08-06 17:36:20 -05:00
firestar5683 5d5a04416a fix: IONIQ_5_PE Enable Long and fix Check Driver Assistance alerts
Co-authored-by: otaku <696343+otaku@users.noreply.github.com>
2026-08-06 16:38:23 -05:00
firestar5683 9798511e2e Gate PiP side camera behind Galaxy developer mode
Keep the PiP side-camera contribution from PR #83 opt-in and off-road configurable. Credit to Prabhaav Pillai for the original implementation.
2026-08-06 16:20:50 -05:00
Prabhaav Pillai b5223b6e23 add PiP Side Camera 2026-08-06 16:18:26 -05:00
Filipe Castro 1f33a35c5b Wire preAlert sound to Distracted Driver volume control
The driver monitoring sound refactor introduced AudibleAlert.preAlert
for the driverDistracted1 pre-warning, but it was never added to the
alert volume controller's volume_map. Unmapped sounds fall through to
the 1.01 auto-volume sentinel, so setting Distracted Driver volume to
Muted silenced promptDistracted but the pre-warning kept playing at
auto volume.

preAlert is only used by driverDistracted1, so it follows
PromptDistractedVolume like the rest of the distraction alert chain.
2026-08-06 16:18:25 -05:00
dirwin31 4c2acfc55c Add 2026 Honda Civic Hybrid firmware fingerprints 2026-08-06 16:18:25 -05:00
firestar5683 73eac7d282 time to get closer 2026-08-05 16:42:25 -05:00
firestar5683 2a38c61f10 traefik 2026-08-05 16:10:40 -05:00
firestar5683 38abe7704e ice breakers liquid ice 2026-08-05 15:57:29 -05:00
firestar5683 474c4ff01e DA SMOKIN GUN 2026-08-05 14:23:59 -05:00
whoisdomi d50e0ebd4f Less curb cutting lefts 2026-08-05 13:41:48 -05:00
firestar5683 dc8d47bb50 oopsie 2026-08-05 08:01:59 -05:00
firestar5683 3e63820cc0 GV70 2026-08-04 22:47:17 -05:00
firestar5683 d21e13ba8f Enemy of Hex Wrench 2026-08-04 22:33:51 -05:00
firestarsdog 6334045800 gradients... 2026-08-04 22:04:06 -04:00
firestar5683 c82952da4c My Mower Died 2026-08-04 12:40:37 -05:00
firestar5683 dad4f928cd Update stock engage and disengage sounds 2026-08-04 12:30:58 -05:00
firestar5683 0d3330c501 ui(galaxy): add guided E2E override slider
Add a 0.05-step range control with plain-language guidance for lane-centering E2E authority. Descriptions group the same behavior across five practical levels, from rigid centering to immediate hazard response.

Co-authored-by: jc01rho <4989674+jc01rho@users.noreply.github.com>
2026-08-04 12:28:26 -05:00
firestar5683 ab447ef306 fix large ONNX staging 2026-08-04 00:38:08 -05:00
firestarsdog 62afc81810 The CUPRA MAN forgot his GMC SEAT 2026-08-03 23:25:19 -04:00
firestar5683 934c484896 Outsourcing the work 2026-08-03 21:36:18 -05:00
firestar5683 290efba471 NavJuncture 2026-08-03 20:27:40 -05:00
firestar5683 3aa1436ff4 Pause LaneCenter On Turn Signal 2026-08-03 12:37:16 -05:00
firestar5683 034992a3e8 lactate threshold 2026-08-03 12:21:03 -05:00
firestar5683 8de5f51971 long 2026-08-03 00:59:12 -05:00
firestar5683 a8af7ad960 sienna 2026-08-03 00:42:32 -05:00
firestar5683 9affcc8378 modelsmooth 2026-08-02 22:30:33 -05:00
firestarsdog a6a7475e7a Big UI : Stopped Timer Fix 2026-08-02 22:53:46 -04:00
firestar5683 22463e8323 Update flm_workspace.py 2026-08-02 21:12:13 -05:00
firestar5683 ac56cce888 f 2026-08-02 20:53:49 -05:00
firestar5683 6dd4d74ca0 Update flm_workspace.py 2026-08-02 20:26:23 -05:00
firestar5683 428d47c918 Update flm_workspace.py 2026-08-02 20:19:22 -05:00
firestarsdog 1b9d7c5cd7 Big UI: Slightly darken bottom of camera view 2026-08-02 20:38:08 -04:00
firestar5683 2691ee89e5 Update latcontrol_vehicle_tunes.py 2026-08-02 19:09:24 -05:00
firestar5683 2833fdc54d oh jonny boi 2026-08-02 18:05:56 -05:00
firestar5683 dbe927c629 Gene Parmesan 2026-08-02 14:19:54 -05:00
firestar5683 4ef68730a2 lies 2026-08-02 12:55:19 -05:00
firestar5683 2175217e9b Let it drink the water from the stream 2026-08-02 12:41:25 -05:00
firestar5683 d89371c518 WUMBO 2026-08-02 12:20:20 -05:00
firestarsdog 6d4089feb7 Fix desktop raylib replay synchronization 2026-08-02 03:24:23 -04:00
firestarsdog 686f09658e Paint onroad rendering below widgets 2026-08-02 02:26:23 -04:00
firestarsdog 517a07d1de Big UI Adj Lane Paths for All 2026-08-02 01:48:25 -04:00
firestarsdog 493f377d21 Big UI Remove Dark DM Gradient 2026-08-02 01:19:00 -04:00
firestar5683 10c1e61ffc rav4 2026-08-01 23:22:40 -05:00
firestar5683 7b9b7461bc teste 2026-08-01 22:57:01 -05:00
firestar5683 165c960e52 seggs 2026-08-01 18:43:53 -05:00
firestar5683 a44635ea6b mofongo 2026-08-01 18:32:41 -05:00
firestar5683 e8959fa3b7 support current eGPU USB ID 2026-08-01 18:30:18 -05:00
firestar5683 56a47318a0 require custom eGPU firmware 2026-08-01 18:20:05 -05:00
firestar5683 7de5bdc557 fix TinyEnclosure transport 2026-08-01 18:07:21 -05:00
firestar5683 7e9e6c9f67 fix eGPU USB transport 2026-08-01 17:52:27 -05:00
firestar5683 d304d14342 Time Warp 2026-08-01 17:28:44 -05:00
firestar5683 b5753daa17 fix 2026-08-01 15:36:57 -05:00
firestar5683 b55a55e4b4 reboot 2026-08-01 15:36:10 -05:00
firestar5683 c9184018de build 2026-08-01 15:36:10 -05:00
whoisdomi 6e454d801b Force Stop tweak 2 2026-08-01 15:36:10 -05:00
whoisdomi 300bdcaf16 Close Gap on Lane Changes 2026-08-01 15:36:10 -05:00
whoisdomi fa02a2baa8 Model Manager & Compiler Update
Model Manager allows for local driving models.

Compiler process for adding local driving models faster
2026-08-01 15:36:09 -05:00
whoisdomi 32e2f0bccc Force Stop Tweaks 2026-08-01 15:36:09 -05:00
firestar5683 8436e41731 HE'S BACK 2026-08-01 15:36:09 -05:00
firestar5683 205e4b3a43 fix USB handle initialization 2026-08-01 13:35:49 -05:00
firestarsdog 042cdeda03 optimize radar point test 2026-07-30 19:01:47 -04:00
firestarsdog 6277ecee4e Road name update 2026-07-29 01:52:23 -04:00
firestarsdog 0078eb477c SLC Sources Bubble Size + DASH -> Dash 2026-07-29 00:18:36 -04:00
firestarsdog c8a1fb3895 Bigger Radar Points 2026-07-29 00:03:07 -04:00
firestarsdog f65be7b584 Faster Bats 2026-07-28 23:24:24 -04:00
firestarsdog 7fbab917fa Performance Enhancing Rugs 2026-07-28 23:24:24 -04:00
firestarsdog a4a1d98f14 Revert "Big UI: Not your Papaw's Cached Params"
This reverts commit 640187f350.
2026-07-27 23:17:38 -04:00
firestarsdog 122672cd45 Revert "Papaw visits MICI... for science"
This reverts commit eaa5a9ad83.
2026-07-27 23:17:35 -04:00
firestarsdog fb1bfd16eb Revert "Big UI: More optimization"
This reverts commit 515f28fcbd.
2026-07-27 23:17:27 -04:00
firestarsdog 2eb88f4b6e Revert "Param Wrapper"
This reverts commit 34ca49517f.
2026-07-27 23:17:08 -04:00
firestarsdog 5b06fb4968 Revert "Comments... because Ill never remember this"
This reverts commit 07adabd70d.
2026-07-27 23:17:04 -04:00
firestarsdog f8c251001f Revert "Scribble is less scribbley"
This reverts commit a0dc562f9a.
2026-07-27 23:17:01 -04:00
firestarsdog 28d03e95d3 Revert "Faster Bats"
This reverts commit e8f526f6b8.
2026-07-27 23:16:58 -04:00
firestarsdog 762ced4157 Revert "Faster faster bats"
This reverts commit b9a83f5873.
2026-07-27 23:16:52 -04:00
firestarsdog b9a83f5873 Faster faster bats 2026-07-27 20:07:38 -04:00
firestarsdog e8f526f6b8 Faster Bats 2026-07-27 19:45:00 -04:00
firestarsdog a0dc562f9a Scribble is less scribbley 2026-07-27 18:59:33 -04:00
firestarsdog 07adabd70d Comments... because Ill never remember this 2026-07-27 17:23:25 -04:00
firestarsdog 34ca49517f Param Wrapper 2026-07-27 16:03:27 -04:00
whoisdomi 749235cda2 SLC override with -/+ bug 2026-07-27 13:55:32 -05:00
firestarsdog 515f28fcbd Big UI: More optimization 2026-07-27 13:58:08 -04:00
firestarsdog eaa5a9ad83 Papaw visits MICI... for science 2026-07-27 13:04:11 -04:00
firestarsdog 640187f350 Big UI: Not your Papaw's Cached Params 2026-07-27 12:46:49 -04:00
firestarsdog 3932dd9fe2 Big UI : Conditional Drive Update 2026-07-25 18:18:06 -04:00
firestarsdog f0e3414d1f Big UI: Conditional Drive oopsie 2026-07-25 18:03:59 -04:00
Dom ba9f216931 Merge pull request #77 from prabhaavp/vasm-bug-fix-2
Fix V-ASM snapshot capture without stored footage
2026-07-24 23:58:32 -05:00
Prabhaav Pillai 4e711173e0 Enhance VASM annotations: clarify button labels and add retry snapshot functionality 2026-07-25 00:48:32 -04:00
firestarsdog 8f945fb6fe Big UI: Remove transition 2026-07-24 16:42:00 -04:00
firestar5683 ec6bf08a65 build 2026-07-24 15:05:17 -05:00
firestar5683 0351e7d817 No Tweak 2026-07-24 15:02:07 -05:00
firestar5683 7eae0e9670 BUMP 2026-07-24 14:37:33 -05:00
firestar5683 8ef7e55e74 tune 2026-07-24 14:17:48 -05:00
firestar5683 0d2f0b6825 tune 2026-07-24 13:15:10 -05:00
firestar5683 6370abd73a G90 2026-07-24 12:46:29 -05:00
firestar5683 8640f06054 fix socket 2026-07-24 01:03:13 -05:00
firestar5683 779b42d8ea 11.8 2026-07-24 00:24:13 -05:00
firestar5683 f5f846f5b6 Pause vision inference while parked
Co-Authored-By: Prabhaav Pillai <143428353+prabhaavp@users.noreply.github.com>
2026-07-24 00:08:26 -05:00
firestar5683 d8b6e43a0d Fix vision CPU throttling with offline cores 2026-07-23 15:20:05 -05:00
firestar5683 b72042042f Sip-smiling away 2026-07-23 14:37:54 -05:00
firestar5683 bd6dced538 Update device_settings_layout.json 2026-07-23 14:13:44 -05:00
firestar5683 66245a5a2e flm update 2026-07-23 10:58:17 -05:00
firestar5683 d4a3bc0f5c offroad alert key 2026-07-23 09:15:19 -05:00
firestarsdog fcc5cc359e Big UI : Aethergauge cleanup 2026-07-23 01:20:47 -04:00
firestar5683 aa381d4d97 BUMP 2026-07-23 00:12:31 -05:00
firestar5683 bc3f215764 build 2026-07-23 00:11:05 -05:00
firestar5683 daf0f84bc9 What If You Lived On The Bottom Of A Rubber Duck? 2026-07-23 00:10:19 -05:00
firestar5683 b945d4c021 Add vision adjacent spot monitoring
Integrate V-ASM from PR #75 with Galaxy-only configuration, stale-state safety, conditional SLV coexistence, and OpenCV inference.

Originally contributed by @prabhaavp in #75.

Co-authored-by: Prabhaav Pillai <143428353+prabhaavp@users.noreply.github.com>
2026-07-23 00:05:43 -05:00
jc01rho 9f1066ce83 feat(lateral): add confidence-gated lane centering
Adapt the lane-centering implementation from PR #74 by @jc01rho.

Keep controls in Galaxy developer settings, add confidence and geometry gates, preserve E2E path authority, and reset all related offsets through Safe Mode.
2026-07-23 00:03:23 -05:00
firestarsdog 370654637a Big UI : Map Data update 2026-07-22 21:08:38 -04:00
firestar5683 fb854cecd3 build 2026-07-22 19:36:10 -05:00
firestar5683 713ce294cc revert can ignition 2026-07-22 19:27:37 -05:00
firestarsdog 7450b9de9a Big UI : Speed Racer 2026-07-22 17:12:48 -04:00
firestarsdog 5b2b053afd Big UI Camera Fix - Fix Replay 2026-07-22 16:58:54 -04:00
firestar5683 88be0e6387 beeg 2026-07-22 15:41:34 -05:00
firestar5683 cc5c95705d jwarm 2026-07-22 15:32:02 -05:00
firestar5683 d16d72afc6 mici fallback too 2026-07-22 14:16:16 -05:00
firestar5683 6230d08c0f Stutter in raybig? 2026-07-22 13:55:57 -05:00
firestar5683 48af4d2f7f build 2026-07-22 11:41:19 -05:00
firestar5683 d773ad9025 fixes 2026-07-22 11:38:35 -05:00
whoisdomi 894eae7090 Galaxy radar gate fix
Previously showed radartakeoffs and Human like lane changes to
non-radar cars.
2026-07-22 07:36:41 -05:00
firestarsdog 28fcba8471 Big UI : Quick Vehicle Panel Cleanup Pass 2026-07-21 21:14:32 -04:00
firestarsdog 0cff67bda8 Big UI: Try this Domi 2026-07-21 18:29:12 -04:00
firestar5683 f0eeec955f build 2026-07-21 17:18:00 -05:00
firestar5683 9b28c7bd52 Register vision support params 2026-07-21 17:17:11 -05:00
firestar5683 ef400a9b3f Same Subscriber 2026-07-21 17:15:10 -05:00
firestar5683 d4b3c3c3b0 final polish 2026-07-21 16:51:51 -05:00
firestar5683 c57c05886c panda 2026-07-21 15:21:39 -05:00
firestar5683 80f465616a Tone 2026-07-21 15:20:28 -05:00
firestar5683 4e70755895 tunes 2026-07-21 14:29:34 -05:00
firestar5683 5b41566e4e ev9 2026-07-21 13:39:36 -05:00
firestar5683 2141e5a5b1 cleanup 2026-07-21 13:24:01 -05:00
whoisdomi d51dd02d10 Turn Desire Bug 2 + Force Stop 2026-07-21 13:12:42 -05:00
whoisdomi bb3ed894b1 Lane Change Overshoot Edge Case
Latch entry direction instead of comparing to the command's live sign,
which broke once the command crossed zero during a curve's larger
arrest swing. This will prevent overshoot on curves.
2026-07-21 13:12:41 -05:00
whoisdomi d4c911f58c Turn Desire Bug
Blinker turn desire fed the model a turnLeft/turnRight input below lane-change
speed, inflating model_length so the car rolled past stop lines. Gate it in
desire_helper on prior-frame starpilotPlan.redLight/forcingStop/stopSignConfirmed
until standstill, then release so the model still turns through. "Stop first,
then turn."
2026-07-21 13:12:40 -05:00
firestar5683 fc87af4da1 hotplug 2026-07-21 12:22:47 -05:00
firestarsdog 7cd02e0c40 Big UI: Size up simple download manager 2026-07-21 12:53:42 -04:00
firestar5683 db8d38e85f build 2026-07-21 11:47:36 -05:00
firestar5683 2c7e6e72c5 PID Alerts 2026-07-21 11:45:22 -05:00
firestar5683 85dd1cbe7e Tunes 2026-07-21 11:35:29 -05:00
firestar5683 665f538533 test(hyundai): cover EV9 cluster safety message 2026-07-21 11:35:29 -05:00
LowkeyNEXT 28a4de1c9e safety(hyundai): allow EV9 CCNC angle-long messages 2026-07-21 11:35:28 -05:00
LowkeyNEXT 42eef3f21c feat(hyundai): add EV9 alpha longitudinal support 2026-07-21 11:35:28 -05:00
whoisdomi ce86d9d05a Start Accel bug fix 2026-07-21 11:35:28 -05:00
whoisdomi b70d0941c9 Traffic Mode v2 2026-07-21 11:35:28 -05:00
firestarsdog 8d7ba284d7 Big UI : Favorites + Downloaded 2026-07-21 11:57:51 -04:00
firestarsdog 71b577cbc2 Big UI: Default to expanded while I think 2026-07-21 11:29:18 -04:00
firestar5683 cc40a28562 home cleanup 2026-07-20 23:53:20 -05:00
firestar5683 104ae74901 sped away 2026-07-20 23:22:06 -05:00
firestar5683 2e45e57287 Young Cheddar 2026-07-20 22:49:09 -05:00
firestar5683 10843b2f6e log 2026-07-20 21:59:42 -05:00
firestar5683 eb3eb116eb The Fairlife Milk Out of Stock Ya'll 2026-07-20 21:34:47 -05:00
firestar5683 b34e968f91 But Bigger 2026-07-20 20:51:04 -05:00
firestar5683 3701079265 icon 2026-07-20 20:11:18 -05:00
firestarsdog 1a713fe3e2 Big UI : Enlarge Lead Metrics 2026-07-20 18:00:38 -04:00
firestar5683 6d92a8e5ad no pid 2026-07-20 16:48:50 -05:00
firestarsdog 01df304f88 Big UI: Randomizer Smandomizer 2026-07-20 17:34:17 -04:00
firestarsdog 7a76325e67 Big UI : We can sort models now 2026-07-20 17:19:13 -04:00
firestar5683 c3d1f727c0 yas 2026-07-20 16:02:11 -05:00
firestar5683 94e60c5d70 New Raybig Homescreen 2026-07-20 15:34:21 -05:00
firestar5683 43143e7a1f clarified-moonstone 2026-07-20 15:34:14 -05:00
firestarsdog f2b14c7ac0 Big UI : Model Manager cleanup 2026-07-20 15:25:08 -04:00
firestar5683 d5c0fea948 build 2026-07-20 14:22:32 -05:00
firestar5683 a51b1fd78f Omnioculars V1 2026-07-20 14:07:12 -05:00
firestar5683 8b7c2b5f36 oo buddy boy 2026-07-20 13:18:27 -05:00
firestarsdog 0eab89c8d9 Big UI : A lil Domi proofing 2026-07-20 14:13:17 -04:00
firestar5683 7b124faad2 Anti Burn In 2026-07-20 12:33:41 -05:00
firestar5683 4ac7fcaf5c Refactor 2026-07-20 12:23:38 -05:00
firestar5683 f265aa3f7b Japanese BBQ Sauce 2026-07-20 11:59:49 -05:00
firestar5683 11044975c5 build 2026-07-20 11:26:51 -05:00
firestar5683 27f73a6f08 Kirkland Rotisserie 2026-07-20 11:26:07 -05:00
firestarsdog 3e5bb853cb Big UI: Fix Source Bubble 2026-07-20 10:25:15 -04:00
whoisdomi 2f0864e215 Low Speed Turn Assist update
Slightly higher turn in speeds when possible.

This follows model desires, so if the model doesn't request it or is weak not much can be done.
2026-07-20 07:12:15 -05:00
firestarsdog 8376ba7c97 Big UI : Widget Layout Manager : RIP? 2026-07-19 17:57:33 -04:00
firestar5683 c928e27033 Favorites 2026-07-19 15:45:04 -05:00
firestar5683 5f52120d7a personality 2026-07-19 15:27:16 -05:00
firestar5683 cab8457f47 build 2026-07-19 13:59:44 -05:00
firestar5683 8453f6b4eb 2 2026-07-19 13:59:20 -05:00
firestar5683 03cf613e4c mi mi zu zu pri pri 2026-07-19 13:42:37 -05:00
firestarsdog ce44830b22 Big UI: No flicker 2026-07-19 00:49:23 -04:00
firestar5683 3ae3c5361e Burnt Wasabi 2026-07-18 23:10:00 -05:00
firestarsdog d3dd2545a9 Scale up dm preview in raylib 2026-07-18 23:02:55 -04:00
firestar5683 29cb892e1a Toyota 2026-07-18 19:17:25 -05:00
firestar5683 a106e222ca ez mode 2026-07-18 13:53:48 -05:00
firestar5683 6ccc984dab build 2026-07-18 12:15:43 -05:00
firestar5683 cce803e888 happy saturday 2026-07-18 12:15:09 -05:00
whoisdomi 9427041200 More lane change butter please 2026-07-18 07:07:28 -05:00
whoisdomi 6bae55ac8e Low Speed Turn Assist
When using the blinker coming up to a turn and the car near standstill or stops the model goes blind, but before it does comma will now remember what it was trying to do and continue going that direction. Manually moving the wheel or cancelling turn signal will undo this. Turns will initiate at a lower speed.
2026-07-18 07:07:27 -05:00
firestar5683 d8b9bf5529 build 2026-07-17 22:49:46 -05:00
firestar5683 4c07ea96e7 fixes 2026-07-17 22:49:09 -05:00
firestarsdog fcf1bf2f3c Big UI : Dedicated to Dora and all the Explorers 2026-07-17 22:58:03 -04:00
firestar5683 e3c377df34 ev9 angle 2026-07-17 14:02:38 -05:00
firestar5683 28141e3074 jeep 2026-07-17 13:54:42 -05:00
firestar5683 25c5722372 lat smooth 2026-07-17 13:34:20 -05:00
firestar5683 d699f26ded leedle 2026-07-17 11:59:47 -05:00
firestar5683 9ccd61e8cf Mizuzu 2026-07-17 00:17:41 -05:00
firestar5683 fccd46fef5 build 2026-07-16 23:54:08 -05:00
firestar5683 1863259a58 The Night's Watch 2026-07-16 23:51:45 -05:00
firestarsdog c001d2b184 Big UI: Alerts 2026-07-16 23:11:02 -04:00
firestarsdog 03ebfd2c69 Big UI: Sounds/Alerts Fixes 2026-07-16 23:03:26 -04:00
firestarsdog 94141aebb1 Big UI: Screen brightness 2026-07-16 22:52:39 -04:00
firestarsdog 71ee4ab2a3 Big UI: Clean 2026-07-16 20:08:31 -04:00
firestarsdog dfb5acddf5 Big UI: Cleanup 2026-07-16 19:45:32 -04:00
firestarsdog 33d7e977b4 Big UI : Cleanup 2026-07-16 18:57:57 -04:00
firestar5683 c6708e716f Curves 2026-07-16 14:33:52 -05:00
firestar5683 5a7ec6b154 sleepProb 2026-07-16 12:33:27 -05:00
firestar5683 d935514f78 favs 2026-07-16 11:39:24 -05:00
firestar5683 8f3f9cf6c7 yas 2026-07-16 10:33:59 -05:00
firestarsdog 4013a70e9d Ex Tee Four Cee Cee 2026-07-16 10:29:47 -04:00
firestar5683 3e363cf7a3 build 2026-07-15 23:02:20 -05:00
firestar5683 9f13e71a0a carnivallll 2026-07-15 23:02:20 -05:00
firestar5683 28ea8d0c09 dsu bypass 2026-07-15 22:24:04 -05:00
firestar5683 d0c877f591 update 2026-07-15 22:07:25 -05:00
firestar5683 b5ebc6474e Free Galaxy 2026-07-15 21:35:13 -05:00
firestar5683 cb151bb9aa build 2026-07-15 20:53:21 -05:00
firestar5683 e943d2afd2 Stop It. 2026-07-15 20:43:45 -05:00
firestar5683 8556708cd6 plan stan 2026-07-15 19:32:36 -05:00
firestarsdog 6fa509cc88 Big UI: Nuke 2026-07-15 19:02:57 -04:00
firestar5683 8e7ce87be8 owalawattabotta 2026-07-15 15:57:21 -05:00
firestar5683 5d8137b30a O canada 2026-07-15 14:02:15 -05:00
firestar5683 368cb1a6f6 distilled-moonstone v4 2026-07-15 13:48:19 -05:00
firestar5683 ba460bbb7b patch 2026-07-15 11:32:02 -05:00
firestar5683 a6ffaaa781 build 2026-07-15 11:25:27 -05:00
firestar5683 d4cfd34291 food & stuff 2026-07-15 11:20:09 -05:00
firestar5683 b0334c2ae5 nissan 2026-07-15 08:08:08 -05:00
firestarsdog 6a19e82bb2 Big UI : Biggify 2026-07-15 03:48:07 -04:00
firestarsdog 5693de7d8d Big UI: No balls 2026-07-15 03:28:19 -04:00
firestarsdog 20fa52f5df Big UI: Pagination cleanup 2026-07-15 03:20:44 -04:00
firestarsdog cb540160e4 Big UI: Fix pagination indicator overlap 2026-07-15 01:59:28 -04:00
firestarsdog be1fda1504 Big UI: stats to bottom border 2026-07-15 01:39:16 -04:00
firestarsdog 0c3bd608d9 Big UI: Skinny pill 2026-07-15 01:16:44 -04:00
firestarsdog 258b4c6048 Big UI: Widget show/hide cleanup 2026-07-15 00:55:54 -04:00
firestarsdog 8b23fd8c03 Big UI: Border definition 2026-07-15 00:32:26 -04:00
firestar5683 eb7d4212fd cleanups / BUMP 2026-07-14 22:03:41 -05:00
firestar5683 73485ba76c galaxy 2026-07-14 21:13:47 -05:00
firestarsdog 1ea2143e01 Big UI: Country Roads 2026-07-14 21:35:25 -04:00
firestarsdog 20235f027d Big UI: Distance Button text 2026-07-14 19:57:46 -04:00
firestarsdog 55ad1fd0fd BigUI: Purple Rain 2026-07-14 19:43:43 -04:00
firestar5683 5a2117892c toyboy button 2026-07-14 18:27:08 -05:00
firestar5683 d8e4d75656 build 2026-07-14 18:03:52 -05:00
firestar5683 77db3e506c aol 2026-07-14 17:57:12 -05:00
firestar5683 acd15fcba7 c4 2026-07-14 17:30:59 -05:00
firestar5683 00539e1dc2 writeup 2026-07-14 17:12:55 -05:00
firestar5683 fb98b8cb29 Speed Limit Writeup 2026-07-14 17:01:33 -05:00
firestarsdog fc88f70ebd Big UI: Quick Vehicle Panel Cleanup WIP 2026-07-14 17:47:31 -04:00
firestar5683 6233e7b2c0 camera view 2026-07-14 16:33:42 -05:00
firestar5683 0144a691b9 distilled-moonstone v3 2026-07-14 12:23:32 -05:00
firestar5683 37a6c62e6e Reapply "The Final Kachow" 2026-07-14 11:55:45 -05:00
firestar5683 ca09e50081 Revert "The Final Kachow"
This reverts commit 8098b9fa53.
2026-07-14 11:25:31 -05:00
firestar5683 8098b9fa53 The Final Kachow 2026-07-14 11:16:29 -05:00
firestar5683 5564d133b3 HondaDays 2026-07-14 09:36:22 -05:00
firestarsdog 6e3bf42c97 guess we need these too... cleanup l8er 2026-07-14 03:40:59 -04:00
firestarsdog f94babe509 BigUI WIP: Button Map Cleanup 2026-07-14 02:17:37 -04:00
firestar5683 45eead8dcd nighty night 2026-07-14 01:16:15 -05:00
firestarsdog fcd39be875 BigUI WIP: SLC Bug fixes 2026-07-14 02:08:30 -04:00
firestar5683 a609716520 guess we need these 2026-07-14 00:10:28 -05:00
firestar5683 a0ae06022c cleanup errybody errywhere 2026-07-13 23:59:13 -05:00
firestarsdog c9cf8cfdf6 BigUI WIP: Can we see this? 2026-07-14 00:44:58 -04:00
firestar5683 3d4e1f2d48 raybillywig 2026-07-13 22:39:18 -05:00
firestar5683 ca74743eac Raylib stuff 2026-07-13 22:18:15 -05:00
firestar5683 fb031a3c57 slc raylib fix 2026-07-13 22:12:29 -05:00
firestar5683 4bad6f6f79 yas 2026-07-13 21:58:47 -05:00
whoisdomi 7e1b3769d7 Lane Change Smoothing 2.0
1. Reduced jerk
2. Smoother
3. Improved arrest, reducing chances of overshooting if setting is too low
2026-07-13 15:16:57 -05:00
firestar5683 4a98785aa3 FLM 2026-07-13 14:56:23 -05:00
firestar5683 d305071351 build 2026-07-13 14:01:47 -05:00
firestar5683 653009185e elantra and sped 2026-07-13 14:00:50 -05:00
firestarsdog 57bfc691bf BigUI WIP: Vertical toggletile list? 2026-07-13 13:44:11 -04:00
firestar5683 7e4f8d4154 patch1 2026-07-13 12:41:08 -05:00
firestar5683 361f692d53 lagathy 2026-07-13 10:07:16 -05:00
firestar5683 f81099af79 buttonAOl 2026-07-13 09:55:10 -05:00
firestar5683 1d982da86e distilled-moonstone v2 2026-07-13 09:49:45 -05:00
firestarsdog c306fc7cfd BigUI WIP: 4 Jon: His Eyes Are Saved
Pass 1 of collapsing sidebar, adjustor size increases, onroad bar size increase
2026-07-13 01:44:00 -04:00
firestar5683 b49c21e5aa distilled-moonstone v1 2026-07-13 00:14:02 -05:00
firestar5683 44b2df59da Analytical Techniques 2026-07-13 00:03:37 -05:00
firestar5683 c8c3a814ea build 2026-07-12 23:10:36 -05:00
firestar5683 46c3592563 ftm 2026-07-12 23:09:58 -05:00
firestar5683 6534ce356a build 2026-07-12 21:52:05 -05:00
firestar5683 e4dfbd1a60 Warbler 2026-07-12 21:48:37 -05:00
firestar5683 e9a2c925ed mapd wrap 2026-07-12 20:54:47 -05:00
firestar5683 57292f09bf Robocop 2026-07-12 20:10:01 -05:00
firestar5683 e577502f4b VACATION 2026-07-12 17:53:20 -05:00
firestar5683 7b0c0784ed bump 2026-07-12 01:11:18 -05:00
firestar5683 96dcfa4287 milky time 2026-07-12 01:11:13 -05:00
firestar5683 6046a84e95 rare as trees 2026-07-11 21:38:32 -05:00
firestar5683 1884087590 build 2026-07-11 18:21:07 -05:00
Beartech 637c3c820c gm: route SDGM cam-long friction brake to the correct bus
Send EBCMFrictionBrakeCmd (0x315) where the EBCM receives it: SDGM+SASCM cars
off the SASCM's camera-bus (bus2) leg, bare SDGM on the powertrain bus. Whitelist
0x315 on the camera bus in GM_CAM_LONG_TX_MSGS. Requires a panda rebuild.
2026-07-11 18:20:44 -05:00
firestar5683 4f47f8cb0a twuck2 2026-07-11 16:41:29 -05:00
firestar5683 e38668b3cb Steel Creek 2026-07-11 15:42:44 -05:00
firestar5683 9dbf5db9ec FTMv2 2026-07-11 12:19:35 -05:00
firestar5683 e47a836d2d inference 2026-07-11 11:54:46 -05:00
firestar5683 6c0ee59a3e Dom's Plan 2026-07-11 11:54:34 -05:00
firestar5683 a0f4028aaa sped 2026-07-11 11:36:16 -05:00
firestar5683 beb7e5bf6b build 2026-07-11 10:07:27 -05:00
firestar5683 f88ef7ecc2 FTM 2026-07-11 10:07:27 -05:00
firestar5683 6cc8e9b86a AR0231 2026-07-10 23:21:52 -05:00
firestar5683 a999f28270 build 2026-07-10 22:44:34 -05:00
firestar5683 2a3d2744af Update camerad 2026-07-10 22:22:23 -05:00
firestar5683 804316e40c Eden Falls 2026-07-10 17:41:56 -05:00
firestarsdog bdde8907bf BigUI WIP: Mici Mouseface 2026-07-10 05:04:37 -04:00
firestarsdog 85ab7557e9 BigUI WIP: Pad comma panels 2026-07-10 03:42:38 -04:00
firestarsdog 3d2b959db7 BigUI WIP: Grow up 2026-07-10 03:28:57 -04:00
firestarsdog 889cd3db1a BigUI WIP: Alerts Always on Top 2026-07-10 00:01:39 -04:00
firestarsdog 4916143a5d BigUI WIP: Full screen settings exit + bread margins 2026-07-09 23:50:24 -04:00
firestar5683 1153010f85 Hemmed-In Hollow 2026-07-09 20:13:10 -05:00
firestarsdog 0cbd8013b2 BigUI WIP: Hit me baby one more time 2026-07-09 20:21:55 -04:00
firestarsdog a425a9c11a BIgUI WIP: Fix weird ? trunc on nav card 2026-07-09 19:32:17 -04:00
firestar5683 987de36f54 Float The Buffalo 2026-07-09 17:34:56 -05:00
firestarsdog f2fbd3f97c Bucky the Buick 2026-07-09 09:39:34 -04:00
firestarsdog 30245e7d34 Big Pass 2026-07-09 00:41:32 -04:00
firestarsdog 3aa2801ce7 lead indicator mindblender 2026-07-09 00:18:02 -04:00
firestarsdog bc3c245aa5 BigUI WIP: Kiełbasa Polska 2026-07-08 01:15:02 -04:00
whoisdomi cdb266cba2 Weaving Straights 2026-07-07 07:52:10 -05:00
whoisdomi e4e416bfb3 Notchy Highways 2026-07-07 07:50:46 -05:00
firestarsdog 39414ee2e4 BigUI WIP: Pass B 2026-07-07 04:20:07 -04:00
firestar5683 a08fe79cef fixes 2026-07-06 22:32:54 -05:00
Michael Tawata 33508d42ef 19 buick ascm 26 mph minsteerspeed 2026-07-06 16:06:47 -07:00
firestarsdog 110bd8b295 BigUI WIP: Fix boot screen downloads
BigUI WIP: Fix boot screen downloads
2026-07-06 02:47:58 -04:00
firestarsdog 622720f730 BigUI WIP: Vehicle Panel Pass 2026-07-06 02:04:28 -04:00
firestarsdog 4bdf55f6a0 BigUI WIP: We see? 2026-07-06 00:51:45 -04:00
firestarsdog 9e2448b3d5 BigUI WIP: Shrinky Bread that you can see! 2026-07-06 00:08:40 -04:00
firestar5683 2ccd6e35b7 more smol l8ter 2026-07-05 22:51:46 -05:00
firestar5683 71b5cd8594 twuck 2026-07-05 22:48:58 -05:00
firestarsdog 3bcd062eb7 BigUI WIP: Scaling A 2026-07-05 23:08:38 -04:00
firestarsdog 6a4b508864 BigUI WIP: Chilidog 2026-07-05 22:35:16 -04:00
firestar5683 6e48d7dc12 Panic Nik 2026-07-05 21:19:14 -05:00
firestar5683 d849ac120b something tiny is coming 2026-07-05 19:51:47 -05:00
firestar5683 4243a5b055 SMOOOOLLL 2026-07-05 17:31:32 -05:00
firestar5683 8d9e97fdcd hye 2026-07-05 16:03:37 -05:00
firestar5683 1457b902ac Warn of Agnos 2026-07-05 13:17:18 -05:00
firestar5683 8ab1b723ae The Smallest Yard 2026-07-05 11:33:59 -05:00
firestarsdog 2fb5fbf3ad Raylib Rainbow Road Update (All) 2026-07-05 04:39:52 -04:00
firestarsdog cbe6eb077e BigUI WIP: Fast Update Update...Update 2026-07-05 02:50:57 -04:00
firestarsdog 831a8f27e5 BigUI WIP: Oh lol GM riot prevention 2026-07-05 00:20:55 -04:00
firestar5683 46d19999ce debug 2026-07-04 23:20:12 -05:00
firestar5683 e27badccef Sped 2026-07-04 21:05:32 -05:00
firestarsdog 07cf72d573 BigUI WIP: Cull 2026-07-04 19:24:33 -04:00
firestarsdog 8bda3d5be1 BigUI WIP: This seems nice 2026-07-04 18:42:28 -04:00
firestarsdog cdc2b7a3ed BigUI WIP: Mici the Ticis & Tizis 2026-07-04 18:29:56 -04:00
firestarsdog c7bc46ec8e BigUI WIP: Nav card repel from DM icon 2026-07-04 16:09:57 -04:00
firestarsdog dc1b9fc790 BigUI WIP: Collapse Navigation to right side 2026-07-04 15:54:49 -04:00
firestarsdog 275f8966b2 BigUI WIP: Move nav card to bottom for now 2026-07-04 15:25:15 -04:00
firestar5683 5b1445bb5f SLC 2026-07-04 14:19:45 -05:00
firestarsdog 0b1a94914b BigUI WIP: Simple Download Manager Holdover 2026-07-04 15:08:49 -04:00
firestar5683 3317d545be MOAR 2026-07-04 13:47:48 -05:00
firestar5683 a630533b44 build 2026-07-04 13:46:47 -05:00
firestar5683 cb82059d67 GM 2026-07-04 13:46:21 -05:00
firestar5683 e08745d519 Mango Chutney 2026-07-04 10:40:00 -05:00
firestarsdog 7e76fa9b41 BigUI WIP: + SLC 2026-07-04 08:28:10 -04:00
firestar5683 b72570df40 promotion 2026-07-04 00:53:16 -05:00
firestar5683 95ee3a818b nondefault 2026-07-04 00:14:11 -05:00
firestar5683 72992743a4 that's no moon 2026-07-03 23:50:35 -05:00
firestar5683 8eefbacc48 ./build --params/panda/ui/cereal 2026-07-03 20:53:36 -05:00
firestar5683 4531edad1e build 2026-07-03 20:48:32 -05:00
firestar5683 0af6ca7d37 defaults 2026-07-03 20:43:40 -05:00
firestar5683 ac4ffb4a7e visionpulse 2026-07-03 20:24:09 -05:00
firestarsdog 641f1dc238 BigUI WIP: No place like... StarPilot 2026-07-03 20:55:11 -04:00
firestar5683 650cb03b60 NoDashLeak 2026-07-03 19:39:29 -05:00
firestar5683 cefcc41bca Speed 2026-07-03 19:13:53 -05:00
firestar5683 957fe8af75 pedals in galaxy 2026-07-03 13:43:59 -05:00
firestar5683 d98ae2b94b build 2026-07-03 13:38:57 -05:00
firestar5683 12a984b26d Rats In Alani 2026-07-03 13:34:56 -05:00
firestar5683 9cd81e89f6 Update starpilot_boot_logo.jpg 2026-07-03 12:42:50 -05:00
firestar5683 677545cc23 Reapply "The Power Within"
This reverts commit 2f02c93b3b.
2026-07-03 12:28:00 -05:00
firestar5683 2f02c93b3b Revert "The Power Within"
This reverts commit 7f314d9f28.
2026-07-03 12:24:16 -05:00
firestar5683 7f314d9f28 The Power Within 2026-07-03 12:17:10 -05:00
firestarsdog 6ea41a0329 BigUI WIP: CDM? 2026-07-03 00:57:39 -04:00
firestarsdog c33e8094e8 BigUI WIP: Guess we need more bread... 2026-07-02 23:42:48 -04:00
firestarsdog f0b23a40fe BigUI WIP: Conditional Drive Mode 2026-07-02 23:40:11 -04:00
firestarsdog b65158cd97 BigUI WIP: Bozo's Fight Song 2026-07-02 18:40:41 -04:00
firestar5683 b6794d72d3 sorry ya'll 2026-07-02 17:03:29 -05:00
firestar5683 ea2aa532af I AM SCREAMING 2026-07-02 16:38:13 -05:00
firestar5683 5bbe5f1daf RIP BOZO 2026-07-02 15:50:24 -05:00
firestar5683 1afb6b3978 newnew 2026-07-02 15:27:09 -05:00
firestar5683 9e03465520 blankity blankity blank 2026-07-02 14:42:15 -05:00
firestar5683 06e267cef2 Ultraventure 2026-07-02 14:01:21 -05:00
firestarsdog b79527a217 Fingerprint Catalog more chars 2026-07-02 14:13:52 -04:00
firestarsdog fa85c848f6 BigUI WIP: Moar bread 2026-07-02 13:04:38 -04:00
firestarsdog 0e08829188 BigUI WIP: Visual seperation 2026-07-02 12:57:55 -04:00
firestar5683 1363a5b044 fixes 2026-07-02 11:30:44 -05:00
firestar5683 60406cb982 Memory Hither 2026-07-02 10:44:59 -05:00
firestarsdog 152c39044f BigUI WIP: Didn't like these 2026-07-02 11:32:45 -04:00
firestar5683 6c392185be oopsie 2026-07-02 10:10:45 -05:00
firestarsdog c7a5c880cc BigUI WIP: Try this 2026-07-02 11:07:26 -04:00
firestarsdog 0510e87530 BigUI WIP: Standardize Hubtiles 2026-07-02 03:50:52 -04:00
firestarsdog c9734c9b1a BigUI WIP: Vehicle 2026-07-02 03:37:01 -04:00
firestar5683 66e04d4a45 KA THIS CHOW 2026-07-01 22:59:38 -05:00
firestar5683 c1577d2536 build 2026-07-01 15:04:50 -05:00
firestar5683 23b354d47e Auracast 2026-07-01 15:02:27 -05:00
firestarsdog 5c9888a0d7 BigUI WIP: I can see clearly now (MSAA 4× on PC fix) 2026-07-01 15:35:41 -04:00
firestarsdog 74cf048f94 BigUI WIP: Map Panel Cleanup 2026-07-01 15:32:11 -04:00
firestar5683 0eb8d0cfdc kerchew 2026-07-01 13:45:51 -05:00
firestar5683 9ddf5d31b4 kachow 3 2026-07-01 13:41:33 -05:00
firestar5683 7da4359dd0 Kachow 2 2026-07-01 13:27:44 -05:00
firestarsdog 032b2a1fde BigUI WIP: Cleanup 2026-07-01 13:32:46 -04:00
firestar5683 08df283511 kachow 2026-07-01 11:50:57 -05:00
firestar5683 ae3792c683 build 2026-07-01 11:38:22 -05:00
firestar5683 9d2149d495 queue 2026-07-01 11:32:48 -05:00
firestar5683 5234a121f9 Add HKG EV App Start Climate wake
Add a StarPilot vehicle toggle that selects alternate Panda firmware for Hyundai/Kia/Genesis CAN-FD EVs. The firmware keeps the HKG CAN bus active while Panda is in power save and treats the app climate-active frame, bus 1 address 0x384 with byte 3 nonzero, as a Panda boot wake source without publishing it as CAN ignition.

Wire the toggle through StarPilot vehicle settings, Galaxy device settings, parameter definitions, and pandad firmware selection. Disabling the toggle selects the default Panda firmware again.

Tested on a Kia EV9 and 2023 Kia EV6. EV9 remote climate active used 0x384 byte 3 equal to 0x01; EV6 remote climate active used 0x0a. Both stopped/off states observed byte 3 equal to 0x00. Toggle-off negative testing on EV9 saw the remote climate frame on CAN but pandaStates.ignitionCan stayed false. Toggle-on testing verified the active Panda signature matched panda_h7_hkg_remote.bin.signed. Follow-up testing changed the HKG path to wake-only after remote climate caused partial-car fingerprinting and Dashcam Mode; wake-only firmware was built, flashed, and verified on both devices.
2026-07-01 11:32:29 -05:00
firestarsdog 706c65a70d BigUI WIP: Redudant 2026-07-01 12:26:04 -04:00
firestarsdog 04bee88dd2 BigUI WIP: Size bump 2026-07-01 11:38:55 -04:00
firestar5683 072928ec96 tungsten 2026-07-01 10:08:26 -05:00
firestarsdog 03ec0b2c60 BigUI WIP: Too slow 2026-07-01 10:23:11 -04:00
firestar5683 294e301000 widgety gibbit 2026-07-01 08:50:10 -05:00
firestar5683 74e4dd4c44 All Makes 2026-07-01 08:26:02 -05:00
firestarsdog f40881657c BigUI WIP: Meet The Parents 2026-07-01 01:52:11 -04:00
firestarsdog 4bb15dded4 BigUI WIP: fix breadcrumb 2026-07-01 00:27:17 -04:00
firestarsdog 5eb7e8f02b BigUI WIP: Fixed title 2026-07-01 00:10:58 -04:00
firestarsdog ef5ece17eb BigUI WIP: Star Factory 2026-06-30 23:41:23 -04:00
firestar5683 1339ca02c4 build 2026-06-30 22:11:13 -05:00
firestar5683 d5e40d3bdf Oh What A Night! 2026-06-30 22:03:59 -05:00
firestarsdog 97c20744d3 BigUI WIP: K, we'll start simpler 2026-06-30 18:52:31 -04:00
firestar5683 30786472cb i'm 13 and this is 2026-06-30 16:14:18 -05:00
firestar5683 af185f8491 Mariah 2026-06-30 13:14:37 -05:00
firestarsdog 2a5cb66b9a BigUI WIP: Dedup/remove junk 2026-06-30 02:47:18 -04:00
firestarsdog 82eae95add BigUI WIP: Glow Position 2026-06-30 02:17:24 -04:00
firestarsdog 85b33d8819 BigUI WIP: Onroad Bar alignment 2026-06-30 01:03:44 -04:00
firestarsdog e4fc9b6912 BigUI WIP: Meh 2026-06-30 00:22:27 -04:00
firestarsdog a44cde63a5 BigUI WIP: The Bar Borked 2026-06-30 00:19:48 -04:00
Beartech d93039698c Add BUICK_LACROSSE_ASCM_19US variant with 37 mph minSteerSpeed
US 2019 Buick LaCrosse factory LKA operates only 60-180 km/h. Split it
from BUICK_LACROSSE_ASCM into its own variant so minSteerSpeed can be
raised above the EPS LKA-activation threshold (~12.5 m/s), preventing the
"LKAS Fault: Restart the car to engage" on deceleration. Manual
fingerprint selection only; base LaCrosse platforms unchanged.
2026-06-29 22:18:48 -05:00
firestar5683 3a1ca3fb81 ev6 2026-06-29 20:16:31 -05:00
firestar5683 28e51ebfea build 2026-06-29 20:02:59 -05:00
firestar5683 1c2627e1ae Dead Cow Gully 2026-06-29 19:57:24 -05:00
firestarsdog b4dc28a45e BigUP WIP: Ugly lateral 2026-06-29 19:40:36 -04:00
firestar5683 c8a9eb5464 EV9 the final countdown 2026-06-29 12:55:54 -05:00
firestar5683 11be793c3a Revert "ev9"
This reverts commit ce989294ab.
2026-06-29 12:44:56 -05:00
firestar5683 ce989294ab ev9 2026-06-29 12:03:58 -05:00
firestarsdog a21520fa8f BigUI WIP: Breadcrumb Navigation Cleanup 2026-06-29 12:57:53 -04:00
firestarsdog e5751388d4 BigUI WIP: Boop 2026-06-29 12:28:42 -04:00
firestarsdog 535ae098c6 BigUI WIP: One more 2026-06-29 05:53:57 -04:00
firestarsdog 0b26d1c050 BigUI WIP: Start of Lateral design pass 2026-06-29 05:41:23 -04:00
firestarsdog 7d52c80bf4 BigUI WIP: delete this random blue? 2026-06-29 04:10:55 -04:00
firestarsdog 50630f121c BigUI WIP: System Panel Cleanup 2026-06-29 03:53:12 -04:00
firestarsdog f26c89d6cb SLC: No whammy? 2026-06-29 03:10:59 -04:00
firestar5683 e88854319c PlotWranglerPro 2026-06-28 22:49:08 -05:00
firestar5683 2e53b419d1 sonata hybrid 2026-06-28 22:05:55 -05:00
firestar5683 f4bc8ee6b7 ev9 2026-06-28 20:20:47 -05:00
firestar5683 6daefdc0e1 versioning 2026-06-28 20:04:02 -05:00
firestar5683 96e578fa71 pri pri 2 2026-06-28 16:35:14 -05:00
firestar5683 768a2f324c Mici CSC Icon 2026-06-28 16:22:40 -05:00
firestar5683 f50b8dabbb ev9 2026-06-28 15:52:01 -05:00
firestar5683 d9e0345a2b runtime 2026-06-28 15:51:35 -05:00
firestar5683 8a505e6677 ui 2026-06-28 15:31:42 -05:00
firestar5683 40b5468615 More modeld cleanup 2026-06-28 15:03:09 -05:00
firestar5683 f7418649f8 beeg 2026-06-28 13:30:15 -05:00
firestar5683 5d3b0f4ea9 Update model_compiler.py 2026-06-28 13:17:09 -05:00
firestar5683 7e773e5373 Update model_compiler.py 2026-06-28 13:10:30 -05:00
firestar5683 6d088863a6 no pp 2026-06-28 13:05:58 -05:00
firestar5683 6b515db122 build 2026-06-28 12:50:10 -05:00
firestar5683 bdc1532258 App / Version 2026-06-28 12:44:58 -05:00
firestarsdog afe15a9a80 BigUI WIP: Disablement of more vert scroll 2026-06-28 03:54:02 -04:00
firestarsdog 02060a4b67 BigUI WIP: Hide descriptions 2026-06-28 03:46:39 -04:00
firestarsdog efd25eca90 BigUI WIP: Weird squish fix 2026-06-28 03:01:14 -04:00
firestarsdog b4f17f35f9 BigUI WIP: Toggle tile panel standardization PT55 2026-06-28 02:59:08 -04:00
firestar5683 a0669247e3 ANGEL 2026-06-28 00:56:51 -05:00
firestar5683 be811cbe61 ev9 2026-06-28 00:30:14 -05:00
firestar5683 460b61ebe8 Shenanigans 2026-06-28 00:13:13 -05:00
firestar5683 7411a11f83 pytest 2026-06-27 23:58:18 -05:00
firestar5683 a7ad72489b pri pri 2026-06-27 23:45:56 -05:00
firestar5683 e82a4f034b Konik Tooling 2026-06-27 23:38:32 -05:00
firestar5683 a8ec45ec12 --cem 2026-06-27 22:58:38 -05:00
firestar5683 0df2444e95 mici branch switcher 2026-06-27 22:43:12 -05:00
firestarsdog 32cf065988 BigUI WIP: Nix the Caps 2026-06-27 23:36:11 -04:00
firestarsdog 41c680e60c BigUI WIP: Center Breadcrumb Bar text, was triggering 2026-06-27 23:22:54 -04:00
firestar5683 fac7554cb6 I can be ur angle 2026-06-27 22:17:04 -05:00
firestarsdog 92bc8ee934 BigUI WIP: The Starry Night 2026-06-27 23:12:51 -04:00
firestar5683 9c30fc2387 Plexy 2026-06-27 21:55:44 -05:00
firestar5683 3f5dc27170 FERG 2026-06-27 20:47:54 -05:00
firestarsdog a5fb9a2cff BigUI WIP: Prettier Bread 2026-06-27 21:37:10 -04:00
firestarsdog 201d0c0476 BigUI WIP: Standardize Breadcrumbs 2026-06-27 18:31:33 -04:00
firestar5683 54e722ff00 build 2026-06-27 16:02:53 -05:00
firestar5683 fb1c2ea1c4 spicy 2026-06-27 15:57:38 -05:00
firestar5683 0f43f042fb nope 2026-06-27 15:37:25 -05:00
firestar5683 ee1f0bbe83 nah
pan
2026-06-27 15:23:35 -05:00
firestar5683 b811825b38 slither 2026-06-27 14:36:52 -05:00
firestar5683 ee71b70f24 build 2026-06-27 13:58:30 -05:00
firestar5683 b75b21681d Madlad stuff 2026-06-27 13:51:16 -05:00
firestar5683 562c5eb58d long boi 2026-06-27 13:30:18 -05:00
firestar5683 2798c12c90 build 2026-06-27 13:19:46 -05:00
firestar5683 19d545b22e Operation Bigfoot 2026-06-27 13:06:03 -05:00
firestar5683 36e935c9dc nah 2026-06-27 00:18:18 -05:00
firestar5683 cf89678178 driver monitoring 2026-06-26 21:40:10 -05:00
firestar5683 88e4004c9a Stop The Pain 2026-06-26 16:52:28 -05:00
firestar5683 9f0ae1a495 2019 ascm esv 2026-06-26 16:49:02 -05:00
firestar5683 f5a5b9e141 lat control refactor 2026-06-26 16:32:15 -05:00
firestar5683 057ca874ce Dom's Plan 2026-06-26 16:02:47 -05:00
firestar5683 497eb3f771 build 2026-06-26 15:35:10 -05:00
firestar5683 284bb45c0c that's alot 2026-06-26 15:29:52 -05:00
firestar5683 836b0278eb stuff 2026-06-26 12:53:23 -05:00
whoisdomi 4ce9be2752 Bug Fix: Blinker disregards force stop
Prior commit inteneded for blinker to veto force stop from activating during a turn/curves.
If blinker was on, it was vetoing actual force stops. This tweaks is so the veto only works
on actual turns, or if force stop was already on. So force stop will stop, then allow turn without reactivating force stop.
2026-06-26 06:10:13 -05:00
firestarsdog 24fc6fe4e5 BigUI WIP: More Standarization 2026-06-26 04:16:26 -04:00
firestar5683 297ff1973d Don't Brake Check 2026-06-26 02:18:55 -05:00
firestarsdog 727985697f BigUI WIP: Adaptive Nested Panel 2026-06-26 03:14:11 -04:00
firestar5683 59d1581c0a pedal away from the metal 2026-06-26 01:50:06 -05:00
firestarsdog 3a86dffa17 BigUI WIP: Guess this needs a back button 2026-06-26 01:53:15 -04:00
firestarsdog 9f7dcb68f9 BigUI WIP: Add yeast 2026-06-26 01:27:14 -04:00
firestar5683 6793c1a4f5 build 2026-06-25 23:31:56 -05:00
firestar5683 f351dbac09 Lists A Plenty 2026-06-25 23:26:03 -05:00
firestarsdog 44255d67c2 BigUI WIP: Standarize Breadcrumbs 2026-06-25 22:48:37 -04:00
firestarsdog 1ce49be89b BigUI WIP: Standardize single pane toggle tiles 2026-06-25 18:36:17 -04:00
firestar5683 bdf7bca569 Lite Brite 2026-06-25 10:54:58 -05:00
firestar5683 d8e292dc94 build 2026-06-25 00:00:42 -05:00
firestar5683 f0601e27ec The Plum 2026-06-24 23:54:45 -05:00
firestar5683 cec9f090c4 Bolt Pedal Friction Tune 2026-06-24 22:51:42 -05:00
firestar5683 d08da1ff22 volt opd adjust 2026-06-24 22:31:44 -05:00
firestar5683 58b028cfc8 wumbo 2026-06-24 19:37:49 -05:00
firestar5683 d7f3037c88 build 2026-06-24 14:35:53 -05:00
firestar5683 028ee7b3f5 UpstreamStructs 2026-06-24 14:06:16 -05:00
firestar5683 94aff6faed i6 2026-06-24 13:24:28 -05:00
firestar5683 b63039ce84 i6 2026-06-24 12:55:11 -05:00
firestarsdog aec5590d57 BigUI WIP: New Appearance Icon 2026-06-24 03:07:42 -04:00
firestarsdog abd19df5f4 BigUI WIP: Scale up speaker 2026-06-24 02:33:01 -04:00
firestarsdog b1dae43ea8 BigUI WIP: Bell -> Speaker 2026-06-24 02:25:18 -04:00
firestarsdog 8c32f6d99d BigUI WIP: Add some graphics 2026-06-24 02:13:48 -04:00
firestarsdog f6b51e6742 BigUI WIP: More purples 2026-06-24 01:25:34 -04:00
firestarsdog d3881e6a77 BigUI WIP: Sound Panel Polish 2026-06-24 00:47:06 -04:00
firestarsdog d83b065c53 BigUI WIP: Container Store 2026-06-23 23:50:52 -04:00
firestar5683 16c3d5f48a Tom Bombadil 2026-06-23 21:45:36 -05:00
firestar5683 d6dc906ff8 mica 2026-06-23 20:00:29 -05:00
firestar5683 ea0ef444de The Domi Effect 2026-06-23 18:36:47 -05:00
firestar5683 ea1da70b22 lacrosse test 2026-06-23 18:18:14 -05:00
firestar5683 ad9aa72979 slc 2026-06-23 18:16:06 -05:00
firestar5683 1382200cda plexy and noah 2026-06-23 18:00:13 -05:00
firestar5683 7e8832d672 Pacifica mod support 2026-06-23 13:12:32 -05:00
firestar5683 9cd9a6201c build 2026-06-23 12:09:37 -05:00
firestar5683 6ee00d3f60 Support multipart model artifacts 2026-06-23 12:01:45 -05:00
firestar5683 d97100bd14 tiny my BUTT 2026-06-23 12:01:44 -05:00
firestar5683 bb36fe4287 fartlek 2026-06-23 11:28:17 -05:00
firestar5683 066a0f2520 Tibetan Singing Bowl 2026-06-22 23:37:15 -05:00
firestar5683 c5a6e1da9d Blaze It and Praise It 2026-06-22 19:45:11 -05:00
firestar5683 f8cec6f270 Long Blong 2026-06-22 19:35:51 -05:00
firestar5683 544979d652 EV6 GT 2026-06-22 19:27:43 -05:00
firestar5683 353672fb6a Domi's Steer Max Fix 2026-06-22 17:19:21 -05:00
firestar5683 4101ab9b28 Doms Plan 2026-06-22 17:18:48 -05:00
firestar5683 7fb1d854c6 Revert "Dom(i)'s Steer Max"
This reverts commit ad3bad8b85.
2026-06-22 16:55:53 -05:00
firestar5683 d8587bba31 longy long long 2026-06-22 16:55:49 -05:00
firestar5683 ad3bad8b85 Dom(i)'s Steer Max 2026-06-22 16:42:11 -05:00
firestar5683 c91ac533ef is it hi-yun-dae? 2026-06-21 22:19:04 -05:00
firestar5683 32a6af9ac8 Truckothy 2026-06-21 22:10:37 -05:00
firestar5683 e84c0e44ab The Triple Dipper 2026-06-21 21:19:56 -05:00
firestar5683 d28cd4df8b lil rope a dope 2026-06-21 20:48:27 -05:00
firestarsdog cfd762f0a2 BigUI WIP: Bread 2026-06-21 20:47:11 -04:00
firestarsdog 16d6af490a BigUI WIP: Title Standards 2026-06-21 20:39:13 -04:00
firestar5683 0b37a23c75 new stuf 2026-06-21 17:00:32 -05:00
firestarsdog bf8204e9a2 BigUI WIP: Hänsel und Gretel
BigUI WIP: Hänsel und Gretel
2026-06-21 05:57:30 -04:00
firestar5683 34813dee41 cap'n crunch 2026-06-20 23:04:18 -05:00
firestar5683 d84518b97f AYYYEE TOYOTA 2026-06-20 21:26:46 -05:00
firestar5683 2356823b62 build 2026-06-20 20:52:51 -05:00
firestar5683 ce98b31cbf Tyger Tyger Burning Bright 2026-06-20 20:49:05 -05:00
firestar5683 97881b5c66 The fields speak to me 2026-06-20 18:04:39 -05:00
firestarsdog fc90fcb879 BigUI WIP: Gas/Brake Pass 1 2026-06-20 16:47:05 -04:00
firestar5683 762c54bb2f build 2026-06-20 14:41:37 -05:00
firestar5683 9910651a9d Carl The Witch 2026-06-20 14:38:56 -05:00
firestar5683 42a23508b7 RECOVER 2026-06-20 13:08:23 -05:00
firestar5683 fbb6eb651c twuck 2026-06-20 12:33:29 -05:00
firestar5683 e4809535dc build 2026-06-20 01:26:51 -05:00
firestar5683 63490fe5e6 one pedal update 2026-06-20 01:26:51 -05:00
firestar5683 a7b7148c25 2019 hold 2026-06-20 00:05:25 -05:00
firestar5683 e50874baca dash 2026-06-20 00:00:35 -05:00
firestar5683 ef4f174c8d AHHHH 2026-06-19 23:44:41 -05:00
firestar5683 9c726d99de Revert "THE SMOKING GUN"
This reverts commit 25a50a2ec3.
2026-06-19 23:38:09 -05:00
firestar5683 25a50a2ec3 THE SMOKING GUN 2026-06-19 23:31:38 -05:00
firestar5683 5d3d5a884b a;oiwht 2026-06-19 23:05:28 -05:00
firestar5683 7a3c1ede9a The tone is in the tune 2026-06-19 22:39:05 -05:00
firestar5683 d931d3007b build 2026-06-19 21:13:24 -05:00
firestar5683 05c2a90e16 lacrosse 2026-06-19 21:10:41 -05:00
firestar5683 dc581f6300 Revert "Now Mary's In"
This reverts commit 0bc009f800.
2026-06-19 21:01:51 -05:00
firestar5683 a6c5b43caf Revert "maybe"
This reverts commit d8b715799c.
2026-06-19 21:01:18 -05:00
firestar5683 3ec82de5fc Revert "again"
This reverts commit cd08c87a80.
2026-06-19 21:01:18 -05:00
firestar5683 cd08c87a80 again 2026-06-19 17:33:49 -05:00
firestar5683 d8b715799c maybe 2026-06-19 17:20:32 -05:00
firestar5683 0bc009f800 Now Mary's In 2026-06-19 16:53:59 -05:00
firestarsdog ff49f332b0 BigUI WIP: Shes glowing 2026-06-19 17:25:30 -04:00
firestarsdog f04b561f88 BigUI WIP: Russian Nesting Tiles 2026-06-19 17:16:36 -04:00
firestar5683 1f237019e7 Byte You In The 2026-06-19 14:16:01 -05:00
firestar5683 b47c18426d Steam Your Water 2026-06-19 14:14:07 -05:00
firestar5683 0e5d40fb1b Angler Wish 2026-06-19 13:48:30 -05:00
firestarsdog 496d36f805 BigUI WIP: Font_scale fix 2026-06-19 11:12:39 -04:00
firestar5683 9217bf289c build 2026-06-19 00:44:56 -05:00
firestar5683 2c2d8b86ab Drain The Swamp 2026-06-19 00:39:48 -05:00
firestar5683 c8128d2cde Annie Are You Okay 2026-06-18 23:48:23 -05:00
firestar5683 9c85ebc365 The Triple Dipper 2026-06-18 16:55:42 -05:00
firestar5683 8c510f964c Offroad 2026-06-18 14:04:36 -05:00
firestar5683 35e623c392 Dang Imperials 2026-06-18 13:51:58 -05:00
firestar5683 5eb6fe2dd9 Kachow 2026-06-18 13:36:40 -05:00
firestar5683 64bb95e3cf Applebees 2026-06-18 12:20:17 -05:00
firestar5683 96818d8efc The Time Turner 2026-06-18 10:58:09 -05:00
firestar5683 c23434b947 Is This A Date? 2026-06-18 10:54:25 -05:00
firestar5683 2a0053c046 build 2026-06-18 10:27:12 -05:00
firestar5683 f1a256dac0 Don't Kill Suave 2026-06-18 10:19:06 -05:00
firestar5683 967fb96167 build 2026-06-18 10:09:53 -05:00
firestar5683 bb4f3b74d9 There's Pou in this Tine 2026-06-18 10:07:26 -05:00
firestar5683 7dab3a0ceb build 2026-06-17 23:32:03 -05:00
firestar5683 e6b12d612a Agent Cody Banks 2026-06-17 23:29:00 -05:00
firestarsdog d17a4bd6cb BigUI WIP: Appear 2026-06-17 22:05:45 -04:00
firestar5683 540becea52 Mica's cable shipped 2026-06-17 11:49:14 -05:00
firestar5683 a71be7c47b long plan 2026-06-17 11:24:45 -05:00
firestar5683 7305822e67 leedle leedle leedle lee 2026-06-17 11:16:00 -05:00
firestar5683 6b0e5aed24 I did the backstroke in college 2026-06-16 21:19:57 -05:00
firestar5683 6f907e2060 final plan 2026-06-16 18:58:49 -05:00
firestar5683 29b777f12c fremulon 2026-06-16 18:40:22 -05:00
firestar5683 335d6934fb plimothy 2026-06-16 18:31:36 -05:00
firestar5683 60305edeae niro phev 2026-06-16 10:34:30 -05:00
firestarsdog da305d9da3 BigUI WIP: Lil scrolling cleanup 2026-06-16 03:42:22 -04:00
firestarsdog 624f51aef4 BigUI WIP: Pagination out of bounds dragging fix 2026-06-16 03:10:39 -04:00
firestarsdog ba76832979 BigUI WIP: Pagination/Page Turning UX 2026-06-16 02:54:55 -04:00
firestarsdog 49126f29ae BigUI WIP: Apperance -> Aethergrid start 2026-06-16 02:47:30 -04:00
firestar5683 2ed92c88ae build 2026-06-16 00:00:25 -05:00
firestar5683 a9771a0e85 Supernova 2026-06-15 23:58:00 -05:00
firestar5683 1dcac8cfef Tiny Dancer 2 2026-06-15 22:25:18 -05:00
firestarsdog 18ea1dd170 BigUI WIP : AetherMultiSelect Tile + Dialog 2026-06-15 22:28:44 -04:00
firestarsdog 59336096e7 BigUI WIP: Out with the old 2026-06-15 21:27:06 -04:00
firestarsdog 57d7796edb BigUI WIP: Panel standardization 2026-06-15 21:15:52 -04:00
firestar5683 2dc441d621 build 2026-06-15 16:35:06 -05:00
firestar5683 93ec2a94e6 NudgeMe 2026-06-15 16:32:44 -05:00
firestar5683 56564d55c8 REEEEEE 2026-06-15 16:27:29 -05:00
firestar5683 322364c1ca plan stan 2026-06-15 14:47:21 -05:00
firestar5683 838c7fdc9b fixes 2026-06-15 11:30:41 -05:00
firestar5683 e02d67c153 gaslight2 2026-06-15 01:14:20 -05:00
firestar5683 407e2ea90a refreshing 2026-06-15 01:03:31 -05:00
firestar5683 712256eac4 build 2026-06-15 00:47:13 -05:00
firestar5683 1c2aedcc9a gaslight 2026-06-15 00:45:06 -05:00
firestar5683 9af2969540 My Eyes Are Up Here 2026-06-15 00:40:07 -05:00
firestar5683 8a7946b26c pond 2026-06-15 00:17:25 -05:00
firestar5683 53e0aded4c build 2026-06-15 00:06:07 -05:00
firestar5683 3ecd8be1f1 Raindrops on Roses & Whiskers on Kittens 2026-06-15 00:03:44 -05:00
firestar5683 0262b934c4 dumb 2026-06-14 21:18:13 -05:00
firestar5683 9aeaf593c3 son day I'll get this 2026-06-14 21:02:31 -05:00
firestar5683 00c64ba805 Zikeji Tales 2026-06-14 19:26:56 -05:00
firestar5683 7d939e1c76 planner work 2026-06-14 17:10:32 -05:00
firestar5683 8a4d2b558b radar vs voacc 2026-06-14 17:06:52 -05:00
Jason Jackrel 0508653a29 Volt tune from Thinkpad
Squash merge PR #63.
2026-06-14 16:42:36 -05:00
firestar5683 2e75486d16 planner work 2026-06-14 16:38:10 -05:00
firestar5683 7bd73401cd oopsie 2026-06-13 21:48:35 -05:00
firestar5683 4a107868cf build 2026-06-13 20:50:04 -05:00
firestar5683 53766ff6b7 The Forked Man 2026-06-13 20:47:15 -05:00
firestar5683 4ee6758b9f XCeeding expectations 2026-06-13 20:46:30 -05:00
firestar5683 4c1317e30d Mom's Spaghetti 2026-06-13 20:45:52 -05:00
firestar5683 8a68dec71f Swell Tune 2026-06-13 20:43:51 -05:00
firestar5683 c7efa7fa20 Two is not better than one 2026-06-13 20:42:50 -05:00
firestarsdog bd7394ea33 BigUI WIP: Tile updates 2026-06-13 11:56:21 -04:00
firestar5683 fa7fa6afaf Remove Slow Logic atm 2026-06-12 23:09:31 -05:00
firestar5683 491ec0c0b8 the slow mo guys 2026-06-12 10:50:14 -05:00
firestar5683 87f1334ce9 yes 2026-06-12 10:22:03 -05:00
firestar5683 140b047e7f better raylib 2026-06-12 01:34:58 -05:00
firestar5683 21b1bfd600 THIS DESERVES A BUMP 2026-06-11 23:04:34 -05:00
firestar5683 5da99bc977 build 2026-06-11 22:32:31 -05:00
firestar5683 a30dc40b8a wumbology 2026-06-11 22:30:21 -05:00
firestar5683 96893d9c36 Dingle's got dragonclaw?! 2026-06-11 19:36:18 -05:00
firestarsdog 9be0defc29 The speed of cyan 2026-06-11 18:07:30 -04:00
firestar5683 afc8c6fb4b Mr. Freeze 2026-06-11 11:34:12 -05:00
firestar5683 b559b0f827 Fridge Cigarette 2026-06-11 10:51:05 -05:00
firestar5683 79e31ff241 TRY AGAIN, SPIDERMAN 2026-06-10 22:30:48 -05:00
firestar5683 1e604fd80e loopback 2026-06-10 19:11:02 -05:00
firestar5683 56989a164e update 2026-06-10 19:01:20 -05:00
firestar5683 eaf5d44037 forte he 2026-06-10 15:54:35 -05:00
firestarsdog 93cb562321 BigUI WIP: Larger for the Dads 2026-06-10 15:49:25 -04:00
firestar5683 31d3df673a Kia Xceed 2026-06-10 11:55:20 -05:00
firestar5683 c0aa7a7460 oops 2026-06-10 10:54:28 -05:00
firestar5683 498b7f14a9 build 2026-06-10 10:50:40 -05:00
firestar5683 95b6ecec86 Hello Poppet 2026-06-10 10:48:32 -05:00
firestarsdog 8e6fc9bed3 BigUI WIP: Page flipping is tough... 2026-06-10 02:20:14 -04:00
firestarsdog cf7822180b BigUI WIP: Aethergrid Update 2026-06-10 00:07:00 -04:00
firestar5683 f93c536f7e deeprl3 2026-06-09 22:58:07 -05:00
firestarsdog d555d1f588 BigUP WIP: Style 2026-06-09 23:50:01 -04:00
firestar5683 88e297b183 offsets 2026-06-09 22:21:48 -05:00
firestar5683 37f5c8ca58 Navigation: Breaking Dawn 2026-06-09 21:19:08 -05:00
firestarsdog 7d53bd5af7 BigUI WIP: LED 2026-06-09 21:30:52 -04:00
firestar5683 455a8ec11d XT4 Sigmoid 2026-06-09 17:02:27 -05:00
firestar5683 dac0610a19 build 2026-06-09 16:47:33 -05:00
firestar5683 da5b3f829f black pink in your area2 2026-06-09 16:47:28 -05:00
firestarsdog 02960fc8c2 SLC allow override to persist if within obtained speed 2026-06-09 17:26:25 -04:00
firestar5683 4585938753 build 2026-06-09 15:42:23 -05:00
firestar5683 f777e71c56 Black / Pink in your area 2026-06-09 15:39:56 -05:00
firestar5683 0a698d202b build 2026-06-09 14:13:36 -05:00
firestar5683 63db39082b Mount Wannahockaloogie 2026-06-09 14:11:13 -05:00
firestarsdog 4f48c2ec27 BigUI WIP: Lateral Spateral 2026-06-09 13:13:55 -04:00
firestarsdog 6faf9bd88a BigUI WIP: Weird scrolling 2026-06-09 01:52:23 -04:00
firestarsdog a624cf89bb BigUI WIP: Remove pagenation from system settings 2026-06-09 01:41:27 -04:00
firestarsdog e836ed09c8 BigUI WIP: Optional Pagenation 2026-06-09 01:37:08 -04:00
firestarsdog 8cc9c59330 BigUI WIP: Some panel standarization 2026-06-09 00:00:33 -04:00
firestar5683 a11d064aeb buttan 2026-06-08 22:38:57 -05:00
firestar5683 77c82edb44 sonata hybrid 2026-06-08 20:55:23 -05:00
firestar5683 9a9ac3af77 navstate 2026-06-08 20:30:44 -05:00
firestar5683 ac8511b211 bsm 2026-06-08 20:10:33 -05:00
firestar5683 c3ff2e86db build 2026-06-08 19:57:20 -05:00
firestar5683 98d6a4eac0 chill takeoff 2026-06-08 19:57:20 -05:00
firestar5683 5f413b967e odyss 2026-06-08 19:57:20 -05:00
firestar5683 bdb0da4fa0 suburu sng 2026-06-08 19:57:20 -05:00
firestarsdog cabacda0ad BigUI WIP: mono 2026-06-08 20:48:20 -04:00
firestar5683 d8c79a9712 build 2026-06-08 19:19:19 -05:00
firestar5683 88c259a666 Prioritize Smooth Follow 2026-06-08 19:15:50 -05:00
firestarsdog 796d081fce BigUI WIP: More prints of the finger stuff 2026-06-08 19:16:53 -04:00
firestar5683 6d61feff11 rlonlylat 2026-06-07 21:59:32 -05:00
firestar5683 5d0ab0cfb0 First time in San Juan mi hijo 2026-06-07 21:51:36 -05:00
firestar5683 6c687a9f5c build 2026-06-07 21:16:08 -05:00
firestar5683 7a17c21fab Truck V2 2026-06-07 21:13:52 -05:00
firestar5683 1994a0bd16 build 2026-06-07 20:53:37 -05:00
firestar5683 8a1bfb925c odyss 2026-06-07 20:51:27 -05:00
firestar5683 914411fe06 build 2026-06-07 20:43:19 -05:00
firestar5683 c88bebbc3e Zik is my boss 2026-06-07 20:37:47 -05:00
firestar5683 aba65bf755 build 2026-06-07 20:18:52 -05:00
firestar5683 cf1c99cf78 Haberdashery 2026-06-07 20:16:35 -05:00
firestar5683 9c51a6024e build 2026-06-07 15:21:10 -05:00
firestar5683 bec246c6ef Clear Nav 2026-06-07 15:18:56 -05:00
firestar5683 eeab4b8c85 Build 2026-06-07 15:04:23 -05:00
firestar5683 a6758eb9e6 New stoofs 2026-06-07 15:01:59 -05:00
firestar5683 cdcc8da555 sm 2026-06-07 14:26:14 -05:00
firestar5683 1f9aa83440 buttons 2026-06-07 14:26:14 -05:00
firestar5683 15d218677e build 2026-06-07 14:26:14 -05:00
firestar5683 f8934840da Conditional Chill 2026-06-07 14:26:14 -05:00
firestarsdog a888c5602a BigUI WIP: Prob don't need 2026-06-07 05:04:30 -04:00
firestar5683 4134da76ca volt probz 2026-06-06 20:49:28 -05:00
firestar5683 24b0f37ae7 hda1 2026-06-06 19:31:04 -05:00
firestar5683 559a738fe7 build 2026-06-06 17:52:05 -05:00
firestar5683 f20b1f2a4f mochi mochi mochi 2026-06-06 17:49:41 -05:00
firestar5683 c76b770807 plan takeoff 2026-06-06 14:47:33 -05:00
firestarsdog 3c0dea5747 Raylib UI : Global fingerprint_catalog 2026-06-06 14:53:43 -04:00
firestar5683 e47fbd1cb9 build 2026-06-06 12:08:50 -05:00
firestar5683 efdc48980d defaults 2026-06-06 12:03:35 -05:00
firestarsdog f84f7d4f17 Replay Controls 2026-06-05 23:29:34 -04:00
firestar5683 aa82ae0bd0 build 2026-06-05 22:10:00 -05:00
Michael Tawata 743ff67927 no fun allowed here 2026-06-05 22:06:48 -05:00
firestarsdog 2880189713 BigUI WIP: Pushpop Wires 2026-06-05 18:31:50 -04:00
firestarsdog 2847d0fd8a BigUI WIP: oplong push_widget 2026-06-05 18:20:19 -04:00
firestarsdog c23aeb9fcd BigUI WIP: Remove puke 2026-06-05 15:02:52 -04:00
firestarsdog 980c85cfb1 BigUI WIP: Vehicle Panel state update 2026-06-05 14:58:28 -04:00
firestar5683 826775bb1f Project Hateno 2026-06-05 11:13:24 -05:00
firestarsdog e01d61feb9 BigUI WIP: Good chunk of vehicle settings 2026-06-05 03:17:23 -04:00
firestar5683 fee42e4d7b so that was a lie 2026-06-05 02:00:55 -05:00
firestar5683 038b83ac4a this outta be good 2026-06-04 23:52:55 -05:00
firestar5683 4c27f3cd5e Zikeji's Dilemma 2026-06-04 23:32:57 -05:00
firestar5683 2aaad84ab6 livin off energy drinks and Marlboro Reds 2026-06-04 23:32:16 -05:00
firestar5683 a1d338f35c Been workin all day just to keep my family fed 2026-06-04 23:09:43 -05:00
firestar5683 50bd4f121e Requiem For Rancid Remmy Rental Roadster 2026-06-04 15:16:33 -05:00
firestar5683 3d3f6ea888 build 2026-06-04 13:49:02 -05:00
firestar5683 e5cc74603a defaults 2026-06-04 13:46:40 -05:00
firestar5683 7da3d84053 build 2026-06-04 13:43:16 -05:00
firestar5683 47c2cc9990 stuff and things 2026-06-04 13:40:53 -05:00
whoisdomi 85e3e11c10 Radar for Leads Button 2026-06-04 13:40:53 -05:00
firestarsdog 840e4814d0 No-uh 2026-06-04 14:25:38 -04:00
firestar5683 42bcb717a4 ninininini 2026-06-03 23:31:27 -05:00
firestarsdog b515b285db slc diag script : dirty update to make runnable anywhere 2026-06-04 00:21:58 -04:00
firestar5683 7fb15f97ab v16 2026-06-03 22:14:00 -05:00
firestar5683 b202886c33 tiny dancer 2026-06-03 16:57:44 -05:00
firestar5683 e3e4542ef2 My Collar's Blue & My Neck's Red 2026-06-03 16:04:14 -05:00
firestar5683 3027988a4d Purple Monkey Balls 2026-06-03 15:03:40 -05:00
firestar5683 119fcb15a1 leady speedy 2026-06-03 13:39:40 -05:00
firestar5683 1b4e609b33 loopdy loop 2026-06-03 12:48:57 -05:00
firestar5683 c80365de78 mid day stuffs 2026-06-03 11:01:28 -05:00
firestar5683 3e591f311c i6 2026-06-03 07:50:13 -05:00
Michael Tawata 3118ff5c52 remove fp references and fix readme tagline 2026-06-02 23:55:39 -07:00
firestar5683 d0598334e4 Microslop 2026-06-02 21:47:09 -05:00
firestar5683 2f13d3846c i6 2026-06-02 21:44:56 -05:00
firestar5683 7558054914 build 2026-06-02 20:30:02 -05:00
firestar5683 71260b52d1 angle cleanup 2026-06-02 20:27:34 -05:00
firestarsdog f55046f6e9 BigUI WIP: Aethergauge 2026-06-02 19:16:34 -04:00
firestarsdog 3cf48ae3c8 BigUI WIP: Some CEM Stuff 2026-06-02 17:49:10 -04:00
firestar5683 e44e612465 build 2026-06-02 14:26:19 -05:00
whoisdomi 78e9b5139c Faster Leads for $300 Trebek, and say hi to your motha
Faster takeoffs after leads and green lights.
2026-06-02 14:12:21 -05:00
whoisdomi d2a8163f32 Human Lane Change ui fix
Toggled on, would show adjecent radar leads, even if that toggle was off.
Now gated to its toggle in developer ui.
2026-06-02 14:12:20 -05:00
firestar5683 9f30661f6d long planner / i5 / sonata 2026-06-02 11:18:34 -05:00
firestar5683 5632559e5a fcw 2026-06-02 10:31:16 -05:00
firestar5683 ae2f502767 g90 long 2026-06-02 00:29:10 -05:00
firestarsdog 669143a178 BUICK_LACROSSE_ASCM 2026-06-02 00:07:16 -04:00
firestar5683 54cb76ddfd build 2026-06-01 20:52:31 -05:00
whoisdomi fabf122627 Wheel controls qt fix 2026-06-01 20:50:11 -05:00
whoisdomi 3486c695b8 QT StarPilot Logo 2026-06-01 20:50:11 -05:00
whoisdomi 6eb513501d Fire Firehose 2026-06-01 20:50:11 -05:00
whoisdomi 45060a07b7 Add CC Main and LKAS buttons to Wheel Controls
Clean up so all buttons are handled from wheel controls
2026-06-01 20:50:11 -05:00
firestarsdog 7f5e78fd8f BigUI WIP: Delete Stuff 2026-06-01 02:51:51 -04:00
firestarsdog b178e67ae5 BigUI WIP: Scale up dialogs 2026-06-01 02:31:32 -04:00
firestarsdog 026c83fb1b BigUI WIP: Align System Settings, again... 2026-06-01 02:13:23 -04:00
firestarsdog c7b3251918 BigUI WIP: System Settings Bump 2026-06-01 01:46:36 -04:00
firestarsdog 14f94151a5 BigUP WIP: System Settings Pass 2026-06-01 01:19:50 -04:00
firestar5683 6dc473713c i5 2026-06-01 00:10:14 -05:00
firestarsdog 594f525c0c BigUI WIP: System Settings Cleanup Pass 2026-06-01 00:39:18 -04:00
firestar5683 2132a5ceb0 build 2026-05-31 21:06:39 -05:00
firestar5683 5d86b7ac5b IsRHD 2026-05-31 21:03:42 -05:00
firestarsdog 0e7123d632 BigUI WIP: Huh need this afterall 2026-05-31 16:56:39 -04:00
firestarsdog b96c9290f7 BigUI WIP: Settings Cleanup 2026-05-31 16:48:12 -04:00
firestarsdog 416b5e3cd2 BigUI WIP: System Settings update 2026-05-31 15:57:01 -04:00
firestar5683 8a3a872a93 build 2026-05-31 13:45:41 -05:00
firestar5683 6f5690618f param 2026-05-31 13:42:11 -05:00
firestarsdog fad4434104 Expose Python UI Screen Timeout Variables 2026-05-31 14:40:08 -04:00
firestarsdog 86359bacab BigUI WIP: Sounds Default=Auto 2026-05-31 14:00:03 -04:00
firestarsdog a7d8d7a544 BigUP WIP: Sound Polish 2026-05-31 13:53:06 -04:00
firestar5683 86d059bdb4 long 2026-05-31 12:37:09 -05:00
firestar5683 caa5f41b1e radars 2026-05-31 12:26:54 -05:00
firestar5683 fcda700625 nav fixes 2026-05-31 12:14:04 -05:00
firestarsdog cdca40f018 BigUI WIP: Sound Panel Alignment 2026-05-31 04:27:57 -04:00
firestarsdog 736c344cdd BigUI WIP: Sheep > Goat 2026-05-31 02:27:54 -04:00
firestarsdog a28250c81b BigUI WIP: Icons and removal of magic math 2026-05-31 02:14:32 -04:00
firestar5683 b406a1a9d8 nightly roundup 2026-05-31 00:55:43 -05:00
firestarsdog a44e306343 Hm.. XT5? lol 2026-05-30 23:00:45 -04:00
firestarsdog ecbed0f4f8 BigUI WIP: Remove dock lol 2026-05-30 21:31:43 -04:00
firestar5683 04273eefad above 2026-05-30 14:41:03 -05:00
firestar5683 bd5436c55f nav / planner / sonata buttons 2026-05-30 14:26:09 -05:00
firestarsdog 6ca397b840 BigUI WIP: Optimizations 2026-05-30 03:24:04 -04:00
firestarsdog cc2b53a6e9 BigUI WIP: Drop starpilot_icon 2026-05-29 18:10:59 -04:00
firestar5683 6c4717cc39 g90test 2026-05-29 16:07:34 -05:00
firestar5683 6afdc99dd5 redneck 2026-05-29 15:57:20 -05:00
firestarsdog 07fcbbdab8 BigUI WIP: Poof 2026-05-29 16:38:59 -04:00
firestar5683 d55d1bff69 fort hey 2026-05-29 14:42:42 -05:00
firestarsdog a80d3680d0 BigUI WIP: Remove icon code 2026-05-29 15:36:11 -04:00
firestar5683 9673c72d44 bleehhhhh 2026-05-29 14:29:49 -05:00
firestar5683 7051b79674 nav 2026-05-29 14:15:46 -05:00
elkoled e7fa0f51a6 comment
(cherry picked from commit 81fceadb7817b831e47e679a07f515b02950e6e8)
2026-05-29 13:56:21 -05:00
elkoled e9dc540f64 adjust fan setpoint
(cherry picked from commit 269d2189b2383fa5b7c0d5e7cab4fb527f29a636)
2026-05-29 13:56:18 -05:00
firestar5683 e26a91147d build 2026-05-29 13:50:51 -05:00
firestar5683 3de95a341a bokoblin loves mutton; I fix the button 2026-05-29 13:48:07 -05:00
firestar5683 dff6f898a8 done goofed 2026-05-29 12:07:46 -05:00
firestar5683 dfd614c31f build 2026-05-29 12:00:14 -05:00
whoisdomi 5020d33748 ui+selfdrived: pin UI after init, move selfdrived to core 5
Move the UI core-affinity pin to after MainWindow init so startup and
restart recovery can use all cores (pinning before init starved the
restarting UI on the contended little cores, stretching recovery from
~30s to minutes). Move selfdrived off the saturated core 4 onto core 5
so its 100 Hz loop is no longer starved, eliminating selfdrivedLagging.

Verified over a full drive: selfdrivedLagging=0, core4/core5 sustained
>=95% only 0.3%/1.2% of the time, UI restart recovery ~15s with the
device staying engaged, radar tracking unaffected.
2026-05-29 11:56:33 -05:00
firestarsdog bd687f353f BigUI WIP: Sine Bonis P1 2026-05-29 03:40:04 -04:00
firestar5683 ce19d2c5f0 Bat bat come under my hat 2026-05-29 01:18:27 -05:00
firestar5683 29ade037d3 Offer applies with enrollment and triple advantage 2026-05-29 00:55:19 -05:00
firestarsdog 75b1deaf60 BigUI WIP: Try dock 2026-05-28 21:48:23 -04:00
firestar5683 a9930207ba v16 2026-05-28 17:38:14 -05:00
firestar5683 742c104964 on 2026-05-28 15:42:42 -05:00
firestarsdog 4183698fc6 BigUI: Widget Scale 2026-05-28 16:05:59 -04:00
firestar5683 f06c82b2b8 ev6 2026-05-28 14:19:03 -05:00
firestarsdog b23b4384f1 BigUI WIP: Aethergauge offset location 2026-05-28 15:11:44 -04:00
firestar5683 93bad13469 patches 2026-05-28 13:31:59 -05:00
firestar5683 31e0a5b8cc volt bsm 2026-05-28 13:29:45 -05:00
firestar5683 732830b095 g90 radar 2026-05-28 13:18:20 -05:00
firestarsdog 43d42594ef BigUI WIP: Aethergauge Helpers 2026-05-28 13:58:40 -04:00
firestar5683 e61039bb67 DM ruh roh 2026-05-28 12:27:45 -05:00
firestar5683 8e8225b6ae Nav Long 2026-05-28 11:41:05 -05:00
firestar5683 01bd291b78 you used to drive me onto sidewalks 2026-05-28 10:41:46 -05:00
firestar5683 61e28a0ac9 build 2026-05-28 10:23:35 -05:00
firestar5683 c744f66b2a Optimus Prime 2026-05-28 10:21:01 -05:00
firestarsdog 9b177b25b5 Revert "test cycle"
This reverts commit b9d89a3e85.
2026-05-28 11:05:47 -04:00
firestarsdog b9d89a3e85 test cycle 2026-05-28 11:04:09 -04:00
firestar5683 903fd2264e build 2026-05-28 00:37:45 -05:00
firestar5683 0f8142a15c default on 2026-05-28 00:35:16 -05:00
firestar5683 b95b5b1d53 build 2026-05-28 00:12:16 -05:00
firestar5683 3d0c3a8a45 Powers You Never Knew You Had and What To Do With Them Now You've Wised Up 2026-05-28 00:09:41 -05:00
firestar5683 9af23999d1 navgal 2026-05-28 00:09:34 -05:00
firestar5683 74a9bb5a4e build 2026-05-28 00:09:34 -05:00
firestar5683 cf506e59b0 nav 2026-05-28 00:09:20 -05:00
firestar5683 68d7fd09e2 Legion 2026-05-27 23:26:52 -05:00
firestarsdog b70680aa86 Silverado CC 2026-05-27 23:47:46 -04:00
Dom 823ff696ab Merge pull request #59 from Thinkpad4by3/Dom
Dom
2026-05-27 21:55:13 -05:00
firestar5683 9b530d520c XT5 2026-05-27 21:37:23 -05:00
firestar5683 3d35284a49 build 2026-05-27 19:53:14 -05:00
Jason Jackrel f425d86457 update tire stiffness 2026-05-27 16:48:27 -07:00
Jason Jackrel 98a9373346 finally the volt tune 2026-05-27 16:47:18 -07:00
firestar5683 35a7e43045 blocky block 2026-05-27 17:40:56 -05:00
firestar5683 b535c0845e ioniq 5 radar 2026-05-27 17:40:56 -05:00
whoisdomi 0ed821d32d 25hz 2026-05-27 17:35:19 -05:00
whoisdomi 2317057411 50hz poll 2026-05-27 17:35:19 -05:00
whoisdomi dc3b39a198 are we there? 2026-05-27 17:35:19 -05:00
whoisdomi ce5611f24c is this radar data? 2026-05-27 17:35:19 -05:00
firestar5683 f819386399 happy wife happy life 2026-05-26 22:20:19 -05:00
firestar5683 e1812ec3d7 build 2026-05-26 21:59:47 -05:00
firestar5683 e9935624f7 smoosh smoosh 2026-05-26 21:59:46 -05:00
firestar5683 0fec51a5d9 volt 2026-05-26 18:58:11 -05:00
firestar5683 3fa2d370bf i6 2026-05-26 18:19:51 -05:00
firestar5683 0750072ef0 build 2026-05-26 16:05:46 -05:00
firestar5683 fb93198a92 logg 2026-05-26 16:02:58 -05:00
firestar5683 a4789c9f61 i6 2026-05-26 15:53:05 -05:00
firestar5683 7386073c71 build 2026-05-26 11:36:09 -05:00
firestar5683 7d8be7079c I h8 u nudgeless 2026-05-26 11:33:49 -05:00
firestar5683 148929d2f1 i5 2026-05-26 11:09:12 -05:00
firestar5683 13e4f301b9 oopsie 2026-05-26 10:42:59 -05:00
firestarsdog dc91ac13b1 BigUI WIP: Clip lanes 2026-05-26 02:15:52 -04:00
firestar5683 a129d591e7 hkg radar 2026-05-26 00:17:24 -05:00
firestar5683 8aa0cf327a build 2026-05-26 00:00:25 -05:00
firestar5683 b78e44303d CCNC 2026-05-25 23:57:56 -05:00
firestarsdog feba46db30 BigUI WIP: Onroad Path Cleanup 2026-05-26 00:56:31 -04:00
firestarsdog a8d501fcd9 BigUI WIP: Scissor Borders 2026-05-26 00:40:47 -04:00
firestarsdog fb17126f68 BigUI WIP: Consolidated Border Effects 2026-05-26 00:32:31 -04:00
firestar5683 693b1f08a3 color calib 2026-05-25 02:12:44 -05:00
firestar5683 6e81630e49 build 2026-05-25 01:42:33 -05:00
firestar5683 76dbf9412a cameradisableFullDisable 2026-05-25 01:40:01 -05:00
firestar5683 68123093c3 stop UI log 2026-05-25 00:48:26 -05:00
firestar5683 73cbee1b85 tune 2026-05-25 00:48:20 -05:00
firestar5683 0cb613b6ce volt aeb 2026-05-25 00:48:13 -05:00
firestarsdog 7834d15127 BigUI WIP: Curves again 2026-05-25 01:02:08 -04:00
firestarsdog 71ce49a301 BigUI WIP: Useless banner 2026-05-24 23:17:21 -04:00
firestarsdog fd7f75578d BigUI WIP: Remove white border on sign + less steppy movement 2026-05-24 03:59:11 -04:00
firestarsdog 4c8452de78 BigUI WIP: Update Curves Again 2026-05-24 01:48:08 -04:00
firestarsdog 7bebf0ef3c BigUI WIP: Force Stop -> Aethergauge 2026-05-24 01:01:31 -04:00
firestarsdog 56a0c4e0d9 BigUI WIP: Center Bar 2026-05-23 13:24:40 -04:00
firestarsdog 666b9d35d6 BigUI WIP: Curvey 2026-05-23 12:49:27 -04:00
firestarsdog 2ef8f8ebef BigUI WIP: Aethergauge Curvey 2026-05-23 05:41:52 -04:00
firestarsdog b88c886592 BigUI WIP: Aethergauge 2026-05-23 02:19:23 -04:00
firestarsdog e742482175 BigUI WIP: Wow, simpler glow 2026-05-23 01:06:58 -04:00
firestarsdog 8c63451137 BigUI WIP: Glow up
BigUI WIP: Glow up
2026-05-22 23:21:28 -04:00
firestar5683 a30a59331d toyota 2026-05-22 01:30:56 -05:00
firestar5683 95d074eb92 slow lead depart 2026-05-21 23:15:48 -05:00
firestar5683 103c44bfd8 Tůne 2026-05-21 22:35:02 -05:00
firestar5683 bfcd43452e deep 2026-05-21 14:41:38 -05:00
firestar5683 0c5cf54d57 elantra 2026-05-21 13:23:20 -05:00
firestarsdog 3f4f2a1813 BigUI WIP: Onroad Cleaner-er 2026-05-21 13:47:56 -04:00
firestar5683 a94c3b72d3 honda 2026-05-21 11:03:10 -05:00
firestar5683 c848b5f1b4 toyota 2026-05-21 10:03:12 -05:00
firestar5683 55f110351e elantra hybrid 2026-05-21 10:00:09 -05:00
firestar5683 58e7f84627 i6 2026-05-21 09:56:27 -05:00
firestarsdog db769226b8 BigUI WIP: The Trail We Blaze 2026-05-21 04:37:41 -04:00
firestar5683 bfcab984e2 toyota 2026-05-20 23:35:50 -05:00
firestar5683 b33a8dea15 Elantra Hybrid 2026-05-20 22:19:05 -05:00
firestar5683 5e00550c6a avalon surge 2026-05-20 22:00:25 -05:00
firestar5683 329b41a84b op16 2026-05-20 21:58:17 -05:00
firestar5683 5e74861311 genesis 2026-05-20 21:04:59 -05:00
firestar5683 70229486bb toyota 2026-05-20 20:56:39 -05:00
firestar5683 813507267c i6 brake adjust 2026-05-20 16:49:52 -05:00
firestar5683 f55402e033 OP16Deep 2026-05-20 15:22:08 -05:00
firestar5683 f3cf4d6969 build 2026-05-20 11:03:16 -05:00
firestar5683 da88d20b1e Toyota 2026-05-20 11:00:08 -05:00
firestar5683 b17bba7e93 Ioniq 6 2026-05-20 10:59:38 -05:00
firestar5683 c99a999f1a Add lateral resume delay settings surfaces and tests 2026-05-20 10:56:59 -05:00
prabhaavp c5c5253de5 Lateral Resume Delay Feature W/O Testing 2026-05-20 10:49:51 -05:00
firestar5683 1f8652d809 Fix wide camera disable runtime gating 2026-05-20 10:44:10 -05:00
prabhaavp 8846b907d7 Disable Widecam Feature
Disable Widecam Feature

Disable Widecam Feature

Disable Widecam Feature

Disable Widecam Feature
2026-05-20 10:39:06 -05:00
firestar5683 3d6c55962b genesis 2026-05-19 21:26:54 -05:00
firestarsdog 0b0f18399c We represent the Lollipop Guild 2026-05-19 19:23:34 -04:00
firestar5683 5856e77f3b i6 turn in 2026-05-19 16:54:16 -05:00
firestar5683 c80d9ffb99 non hda ioniq 2026-05-19 16:43:55 -05:00
firestar5683 1f84395539 toyota pedal 2026-05-19 12:42:41 -05:00
firestarsdog f3a7620188 StarPilot Tools Auth Cleanup 2026-05-19 10:57:20 -04:00
firestar5683 180b0c6768 g90 revert 2026-05-19 09:10:57 -05:00
firestarsdog 55a93013c7 BigUI WIP: Delete tuning gate 2026-05-19 03:21:58 -04:00
firestarsdog 982e742322 BigUI WIP: Always show developer, hide firehose 2026-05-19 03:19:19 -04:00
firestarsdog 3676191fc8 BigUI WIP: The Grinch 2026-05-19 03:11:43 -04:00
firestarsdog 5b19d38d88 BigUI WIP: Bah Hambug 2026-05-19 02:58:09 -04:00
firestarsdog 32c088ac00 BigUI WIP: Refinement/More Extraction 2026-05-19 01:16:53 -04:00
firestar5683 123adc7edc redneck and g90 attempt lkas 2026-05-18 20:21:22 -05:00
firestarsdog dbecce602c Follow The Yellow Brick Road 2026-05-18 19:16:31 -04:00
firestar5683 2b10dc21b0 2021 2026-05-18 15:22:35 -05:00
firestar5683 51701ecffc build 2026-05-18 13:05:07 -05:00
firestar5683 601b8855f6 redneck Hyundai 2026-05-18 12:58:14 -05:00
firestar5683 f56bfb7d4b build and kia forte 2026-05-18 11:49:28 -05:00
whoisdomi 3f8d368b87 Pending Speed Limit Cleanup
Fixed the speed limit display so it no longer flashes an empty speeds, and now flashes over the current speed for a cleaner look.
2026-05-18 11:19:06 -05:00
whoisdomi 70ccc64831 SLC abbreviated icons
Gives the options to display SLC sources as abbreviated and the option to only show sources with data in them to give a cleaner UI look.
2026-05-18 11:19:06 -05:00
whoisdomi 2f5aef1fb8 Remove Taco Tune Hacks
No longer needed toggle. Values.py do the same now
2026-05-18 11:19:06 -05:00
firestar5683 3581a9ecf0 final piece 2026-05-18 11:10:24 -05:00
firestarsdog ed06aa8920 Yellow Brick Road, Emerald City, Oz 2026-05-18 03:35:51 -04:00
firestar5683 5bb401772a Other edge case 2026-05-16 21:53:04 -05:00
firestar5683 5c30a69e10 final stop 2026-05-16 09:50:21 -05:00
firestar5683 be585f72a3 gen2 bolt 2026-05-15 21:39:32 -05:00
StarPilot Build Bot 309665f63e build 2026-05-16 00:20:57 +00:00
firestar5683 9d8a055a04 build change 2026-05-15 18:40:41 -05:00
firestar5683 45a1d3fa8e volt and old ioniq and new ioniq and honda 2026-05-15 18:34:50 -05:00
firestar5683 473e3efae9 túne 2026-05-15 12:42:50 -05:00
StarPilot Build Bot e2607ea6e8 build 2026-05-15 17:20:46 +00:00
firestarsdog 75dcc0772e Club Penguin 2.0 2026-05-15 12:19:08 -04:00
firestar5683 38ad334e12 Create compile_bluescreens.yaml 2026-05-15 10:22:30 -05:00
firestar5683 5fcc1bc196 delete old actions 2026-05-15 10:00:41 -05:00
firestar5683 5bd1977c89 A440 2026-05-15 01:14:06 -05:00
firestarsdog 3eb5db5b31 Speed Limit Controller : Deletion. Bye Bye. 2026-05-14 22:19:19 -04:00
StarPilot Build Bot aa84176c7d build 2026-05-14 23:54:40 +00:00
firestar5683 f30e540690 buildy build 2026-05-14 18:18:44 -05:00
firestar5683 1729d3cda3 i6 2026-05-14 10:08:41 -05:00
firestar5683 c7c10822fb woahhhhh buddy 2026-05-13 23:24:39 -05:00
firestar5683 6b39e4103e Sonata hybrid 2026-05-13 22:57:57 -05:00
firestar5683 5a90937c52 fixy 2026-05-13 20:48:29 -05:00
firestarsdog 69e7ed3eae SLC Wrong Speed Rejection 2026-05-13 20:40:14 -04:00
firestar5683 01bcb40c50 Longfixes 2026-05-13 13:51:25 -05:00
firestar5683 3ecb73dc8a i6 highway 2026-05-13 11:29:40 -05:00
firestar5683 06c00b0895 long bugs 2026-05-13 10:51:19 -05:00
firestar5683 3f8b47aa91 planner hesitations 2026-05-12 22:17:21 -05:00
firestar5683 dc82e51ef6 peter 2026-05-12 22:17:13 -05:00
firestar5683 2516d13bc5 sonata 2026-05-12 21:59:24 -05:00
firestar5683 2ffb286569 Build 2026-05-12 21:47:15 -05:00
firestar5683 af84c8802b HonDeez 2026-05-12 21:47:14 -05:00
firestar5683 d7e43b7ecc otter 2026-05-12 21:32:20 -05:00
firestar5683 471a33d64d build 2026-05-12 16:21:58 -05:00
firestar5683 334481c78d make banner optional 2026-05-12 16:19:10 -05:00
firestar5683 c2bb8f9c56 tune 2026-05-11 22:51:16 -05:00
firestarsdog c650edd193 speed limit filler test? 2026-05-11 22:56:08 -04:00
firestar5683 3e03917edc test 2026-05-11 21:50:07 -05:00
firestar5683 4d0f65a6d1 F 2026-05-11 21:17:43 -05:00
firestar5683 02717ebe73 build 2026-05-11 19:11:53 -05:00
firestar5683 a67c8f98b7 RIP iPedal 2026-05-11 19:09:47 -05:00
firestar5683 21589861fd huge if work 2026-05-11 17:50:09 -05:00
firestar5683 0ce8161cbf i6 2026-05-11 17:04:43 -05:00
firestar5683 013ecbed97 i6 2026-05-11 15:34:33 -05:00
firestarsdog 4370e9c7a3 BigUI WIP: + newer options 2026-05-11 02:43:06 -04:00
firestarsdog a5dedeb164 BigUI WIP: Accents 2026-05-11 02:17:28 -04:00
Fufs 7b557144b3 Fix catastrophic mistake 2026-05-11 00:55:17 -05:00
firestar5683 4747d26cf6 palisade and gen2 bolt 2026-05-11 00:53:27 -05:00
firestar5683 3c3969b09d exp c4 ui 2026-05-11 00:36:41 -05:00
firestar5683 8bd080b3e0 fcw 2026-05-11 00:36:08 -05:00
firestarsdog 5a044781fc BigUI WIP: Accents 2026-05-11 01:33:31 -04:00
firestarsdog 98480a3018 BigUI WIP: Chips 2026-05-11 01:16:18 -04:00
firestarsdog 5c412cea96 BigUI WIP: Standardize Sliders 2026-05-11 01:09:15 -04:00
firestar5683 ee3d33526b honda 2026-05-10 21:25:30 -05:00
firestar5683 25633be976 log grabber 2026-05-10 20:17:17 -05:00
Fufs cd20d94c7c Add legal stuff after adding mdi icons 2026-05-10 17:16:04 -05:00
Fufs 90fbb74f93 C4 UI Vehicle Panel 2026-05-10 17:16:04 -05:00
firestar5683 867159198a túnē 2026-05-10 16:53:33 -05:00
firestar5683 6c4ae9749d build 2026-05-10 13:02:33 -05:00
firestar5683 4254090cf4 button 2026-05-10 13:00:25 -05:00
firestar5683 006319deff build 2026-05-10 11:36:21 -05:00
firestar5683 9872c5fb4b button 2026-05-10 11:25:58 -05:00
firestar5683 2bc5247dc0 i6 wiggle 2026-05-10 10:48:58 -05:00
firestar5683 2ca5f36590 build 2026-05-10 01:18:49 -05:00
firestar5683 c1e3525929 I cannot stop planning long 2026-05-10 01:18:49 -05:00
firestar5683 ef44741760 build 2026-05-09 21:37:54 -05:00
firestar5683 eebfd509d7 LongyLongNeck 2026-05-09 19:28:03 -05:00
firestar5683 61ca62df5f konik 2026-05-09 19:24:05 -05:00
firestar5683 ba18142718 i6 2026-05-09 16:12:44 -05:00
firestar5683 1714c516ab all the small things 2026-05-09 08:54:04 -05:00
firestar5683 1b2b13881c Lead 2026-05-08 11:37:20 -05:00
firestar5683 7dc26d1a68 angle 2026-05-08 11:01:30 -05:00
firestar5683 fbba97f9a6 build 2026-05-08 10:41:15 -05:00
firestar5683 e969a96c17 Update params_keys.h 2026-05-08 10:35:43 -05:00
firestar5683 930ef6e646 honda 2026-05-08 10:10:16 -05:00
firestar5683 b0bba1917f pedal surge 2026-05-08 01:11:41 -05:00
firestar5683 1fbd6ecdfa pedal long brake bias 2026-05-07 23:59:22 -05:00
firestar5683 888a674675 i5 2026-05-07 23:51:33 -05:00
firestar5683 510e2c2225 build 2026-05-07 23:13:33 -05:00
firestar5683 ffd8f6404b teslurrrr 2026-05-07 23:11:06 -05:00
firestar5683 e0259e191c HERCULES 2026-05-07 21:33:21 -05:00
firestar5683 245a5eaaeb who put the glad in gladiator 2026-05-07 21:30:52 -05:00
firestarsdog 1fb31b2e12 BigUI WIP: Cleanup/uniformity 2026-05-07 19:57:18 -04:00
firestar5683 ea64cc4de3 tune 2026-05-07 17:10:31 -05:00
firestar5683 b038b102d8 teslurr 2026-05-07 17:07:25 -05:00
firestar5683 5e0a1bbec3 cacao nibs 2026-05-07 15:27:39 -05:00
firestar5683 5f3d71798d The Well-Tempered Clavier 2026-05-07 14:07:24 -05:00
firestar5683 c1804b1fd8 kia 2026-05-07 11:03:37 -05:00
firestar5683 86ce0b03ee i6 2026-05-07 10:48:44 -05:00
firestar5683 e5ac0c511d tunes 2026-05-06 22:47:07 -05:00
firestar5683 8c0e8375f4 build 2026-05-06 22:17:17 -05:00
whoisdomi 357d7e545f Force Stop Icon replaces banner 2026-05-06 22:14:10 -05:00
whoisdomi d2bd12e9a1 Honda and Mazda Dashboard signals
Mazda CX-5 2017-21
Mazda CX-5 2022-25
Mazda CX-9 2016-20
Mazda CX-9 2021-23
Mazda 3 2017-18
Mazda 6 2017-20

The Mazda caveat worth noting: unlike Honda (where HAS_CAMERA_MESSAGES was already confirmed per-car), Mazda has no such gate — all six models will attempt to read CAM_TRAFFIC_SIGNS since it's registered with freq=0

Honda: limited to HONDA_CAMERA_MESSAGE_CARS, all radarless Bosch:
Honda Accord 2018-22 (+ Accord Hybrid 2018-22, Inspire 2018)
Honda Civic 2019-21 (+ Civic Hatchback 2017-21)
Honda Civic 2022-24 (+ Civic Hatchback 2022-24, Civic Hybrid 2025-26, Civic Hatchback Hybrid 2023/2025-26)
Honda CR-V 2017-22
Honda CR-V Hybrid 2017-22
Honda HR-V 2023-25
Honda Insight 2019-22

Not included (not in HONDA_CAMERA_MESSAGE_CARS): Accord 2023-25, CR-V 2023-26, Odyssey, Pilot, Passport, Acura RDX 3G, Acura TLX — those are either CANFD or use a different DBC and haven't been confirmed to publish CAMERA_MESSAGES
2026-05-06 22:14:10 -05:00
whoisdomi 300ad3d49c Hide the bodies
User can now hide:
DM Icon
Lane Change Banner
Turning Banner
Distance Profile Banner
2026-05-06 22:14:09 -05:00
whoisdomi be9ab0a7e6 Force Stop bugfix: gap behind leads 2 2026-05-06 22:14:09 -05:00
whoisdomi c71a9aed6e Force Stop bugfix: gap behind leads
Force Stop (cem_path) was missing a tracking_lead guard, causing it to activate behind stopped leads at red lights and stop signs — stopping the car far short of the lead instead of letting ACC handle following distance. Added and not self.starpilot_planner.tracking_lead to cem_path, matching the guard already present on dash_path.
2026-05-06 22:14:09 -05:00
whoisdomi ecf6161f9c Efficiency batch 3: UI
F1 — Toggle cache (starpilot_annotated_camera.h + .cc): Added 25 typed cached members; all 32 starpilot_toggles.value() calls in paint code replaced with the cached versions. All reads happen once at the top of updateState() per frame. The only surviving raw call is in mousePressEvent (intentional — touch is rare, not paint-path).

F2 — HUD gradient hoist (selfdrive/ui/qt/onroad/hud.cc): Header gradient is now a static const built once via lambda, no allocation per frame.

Build, flash, and verify that toggling compass, simple_mode, radar_tracks etc. from settings still take effect live without a restart.
2026-05-06 22:14:09 -05:00
whoisdomi 78d5f71fed Efficiency batch 2
D2 — update() in starpilot_onroad.cc now only fires when at least one overlay (showBlindspot, showSignal, showSteering, showFPS) is active. ~30–60 wasted repaints/sec eliminated when all overlays are off.

E4 — Holiday theme check reordered so current_holiday_theme != "stock" (cheapest) is first. Default is stock, so the rest of the chain never evaluates on a normal non-holiday drive.

E7 — paintSteeringTorqueBorder no longer rebuilds the QLinearGradient and computes lighter(120)/setAlpha/5 setColorAt calls every frame. The gradient is now built once in resizeEvent and reused. The per-frame work is now just the two geometry calculations and fillRect.

E5/E6/E8 — Audited clean: all remaining params_memory.put calls are event-driven (button presses, random events), no hot-path logging exists in the UI code, and all QTimers are event-driven or single-shot offroad dialogs.
2026-05-06 22:14:09 -05:00
whoisdomi c1d3e4540b Efficiency batch 1
Wave A (pure refactors):

A2: nnff toggle moved to front of NNFF check — kills ~100 IPC reads/sec when NNFF disabled
A4: 3 filters now use update_alpha() instead of being recreated — ~60 allocs/sec eliminated
Wave B (write reduction):

B1: CEStatus only writes on state transitions (+ E3 folded in: extracted ce_write_value local at both sites). Reset path added in the manual-override branch. ~19 writes/sec saved during cruise
B2: GPS position only persists when compass is enabled AND bearing shifts >0.5° (+ E1 folded in: json.dumps inside the gate). ~95% of writes eliminated on highway
Wave C (polling throttles):

C1: Onscreen distance button reads at 10 Hz instead of 100 Hz — ~90 IPC reads/sec eliminated. Wheel button unaffected
C2: SpeedLimitAccepted IPC read throttled to 5 Hz via existing _slc_adopt_counter. Wheel accel still instant
C3: Lane width numpy calls at 5 Hz instead of 20 Hz — ~300 allocs/sec eliminated. Counter resets when speed drops below threshold so values are fresh on re-entry
2026-05-06 22:14:09 -05:00
firestar5683 2e7036ab07 cem 2026-05-06 16:18:18 -05:00
firestar5683 cfff7d7cb7 honda 2026-05-06 15:02:41 -05:00
firestar5683 1f68e0deaf plan stan man ban 2026-05-06 14:06:47 -05:00
firestar5683 c79e2b3ad7 i6 2026-05-06 13:54:16 -05:00
firestar5683 49aad9cce3 tůne 2026-05-06 10:38:47 -05:00
firestar5683 8ec27d25c5 up 2026-05-05 21:03:40 -05:00
firestar5683 cd9115b0b2 tesla 2026-05-05 20:50:28 -05:00
firestar5683 7918dab915 build 2026-05-05 20:41:25 -05:00
firestar5683 0913a22dfe poodle 2026-05-05 20:41:24 -05:00
firestar5683 e36a9c6c61 ye 2026-05-05 19:53:18 -05:00
firestar5683 a98bf277c8 oops 2026-05-05 17:57:48 -05:00
firestar5683 c5b12e0a16 dbc 2026-05-05 17:24:55 -05:00
firestar5683 e421eb271e neeneeneeneeneenee 2026-05-05 16:20:53 -05:00
whoisdomi 9b97124f80 Finally, a girl is no one 2026-05-05 15:39:44 -05:00
firestar5683 1a39c51617 build 2026-05-05 12:45:15 -05:00
firestar5683 2f74f93308 peedle 2026-05-05 12:41:05 -05:00
firestar5683 4747792c37 p 2026-05-05 11:59:29 -05:00
firestar5683 5e0447df1e ipedal 2026-05-05 11:11:10 -05:00
firestar5683 d9676ca194 models 2026-05-05 10:48:08 -05:00
firestar5683 026a2eb528 op11 2026-05-05 10:39:52 -05:00
firestar5683 e49cfe44b9 honda/ipedal 2026-05-05 10:29:18 -05:00
firestar5683 2e113835a7 build 2026-05-04 23:17:54 -05:00
firestar5683 5f51e6704d ipedal2 2026-05-04 23:15:38 -05:00
firestar5683 806a210467 build 2026-05-04 20:32:12 -05:00
firestar5683 1ddbc24a14 always I-pedal 2026-05-04 20:30:03 -05:00
firestar5683 aed0b7fdb9 f 2026-05-04 19:30:51 -05:00
firestar5683 7837a3c1aa Tesla 2026-05-04 19:12:20 -05:00
firestar5683 7e4818916b Freshly Caught 2026-05-04 17:48:07 -05:00
firestar5683 32185c0c2e honda 2026-05-04 15:40:38 -05:00
firestar5683 90b05a1d18 i6 2026-05-04 15:29:54 -05:00
whoisdomi 37882e86d5 Don't buy the dip
A slight acceleration dip was felt/seen as PID integrator takes over. Now it will be seeded with a_target, for a smoother transiiton and less dip.
2026-05-04 14:52:10 -05:00
firestar5683 1fd3f2cb9d i6 2026-05-04 13:36:11 -05:00
firestar5683 3f3a63a14b i6 2026-05-04 12:49:37 -05:00
firestar5683 4abda00404 i6 2026-05-04 12:15:57 -05:00
firestar5683 b2ded79155 Revert "STOCK LONG I6 wobble fix?"
This reverts commit 7ea096686d.
2026-05-04 12:05:30 -05:00
whoisdomi 7ea096686d STOCK LONG I6 wobble fix? 2026-05-04 11:44:04 -05:00
firestar5683 847333d536 i6 2026-05-04 11:19:28 -05:00
firestar5683 f132bd7b82 i6 2026-05-04 11:19:24 -05:00
firestar5683 d7ec15bddb planner 2026-05-04 11:19:23 -05:00
firestar5683 41fef69a57 honda 2026-05-04 11:19:23 -05:00
firestar5683 14cde4a64c You could be drivin a honda 2026-05-04 11:19:23 -05:00
firestar5683 abd2721a15 This car b steery 2026-05-04 11:19:23 -05:00
firestar5683 3deb8fbb84 Update the_pond.py 2026-05-04 11:19:23 -05:00
firestar5683 c49b4ec228 hurdy gurdy 2026-05-04 11:19:23 -05:00
firestarsdog 8125fd789a BigUI WIP: Size Queen II 2026-05-04 11:19:22 -05:00
firestar5683 6764db8b3b ain't no test shoooo 2026-05-04 11:19:22 -05:00
firestar5683 24af3405f2 big if true 2026-05-04 11:19:22 -05:00
firestarsdog 6626202ff1 BigUI WIP: Size Queen 2026-05-04 11:19:22 -05:00
firestar5683 261b139bcc honda 2026-05-04 11:19:22 -05:00
firestar5683 da5a028057 honda 2026-05-04 11:19:22 -05:00
firestar5683 b9ab07d7cd leedle 2026-05-04 11:19:22 -05:00
firestar5683 a9d57b521e honda 2026-05-04 11:19:21 -05:00
firestar5683 7f03e2880c yeet 2026-05-04 11:19:21 -05:00
firestar5683 6923c35e7d Update latcontrol_pid.py 2026-05-04 11:19:21 -05:00
firestar5683 48ea42c026 honda 2026-05-04 11:19:21 -05:00
firestar5683 5bc24ff148 Honda Long Tune 2026-05-04 11:19:21 -05:00
firestar5683 8ddf2b4757 longplan 2026-05-04 11:19:21 -05:00
firestar5683 863273edbc build 2026-05-04 11:19:20 -05:00
firestar5683 b8a84d6196 honda 2026-05-04 11:19:20 -05:00
whoisdomi 997c1be7b6 Could this be the last accel chain?
Issue: limit_accel_in_turns breakpoint table started at 20 m/s, causing np.interp to clamp a_total_max to 1.7 m/s² for all speeds below 20 m/s (~45 mph), overriding acceleration profiles during the entire low-speed pull.
Fix: Extended _A_TOTAL_MAX_BP down to 0 m/s with a 3.5 m/s² ceiling, matching the maximum ACCEL_MAX.
Turn protection still works correctly since a_y grows with v² and naturally consumes the budget in actual turns.
2026-05-04 10:28:29 -05:00
whoisdomi 471981f732 Hyundai Unchained 2: Let my people go
PID limits clampping max accel from 3.5 to 2.0m/s2
Sport+ should now work.
2026-05-03 09:08:23 -05:00
firestarsdog 989b69ee92 BigUI WIP: Apperance + Cleanup 2026-05-03 02:50:46 -04:00
firestar5683 650b79941f palisade 2026-05-03 00:19:28 -05:00
firestar5683 f7d79c613e honda 2026-05-03 00:15:15 -05:00
firestarsdog 37c82cc2d4 BigUI WIP: Start of lateral 2026-05-03 00:14:43 -04:00
firestar5683 1c38b731bf Omnifarious Panoply 2026-05-02 20:39:08 -05:00
firestarsdog 5312ce3082 SLC Gods, pls 2026-05-02 21:06:31 -04:00
whoisdomi 3c27a6a273 Fix Domi's rant 2026-05-02 19:44:26 -05:00
firestar5683 d4f73f56c4 honda 2026-05-02 15:54:34 -05:00
firestar5683 5584535842 honda 2026-05-02 15:33:29 -05:00
firestar5683 5607d3d01a i6 2026-05-02 15:29:05 -05:00
firestar5683 5ace618860 Update latcontrol_pid.py 2026-05-02 15:02:44 -05:00
firestar5683 fc4a53c02e update 2026-05-02 13:29:21 -05:00
firestar5683 1a016da5fa i6 2026-05-02 12:20:57 -05:00
firestar5683 0f5ab2f6f6 cem light latch 2026-05-02 09:57:49 -05:00
firestar5683 be88d86b21 patch 2026-05-02 09:19:39 -05:00
firestarsdog d98d1c3432 BigUI WIP: Long + Clean...er..ish 2026-05-02 02:49:47 -04:00
firestar5683 873275374d build 2026-05-01 23:26:21 -05:00
firestar5683 712aa081bc HKG Blended CAN/CAN-FD 2026-05-01 23:20:45 -05:00
firestarsdog 0c39558afb BigUI WIP: Lil cleanup 2026-05-01 21:36:30 -04:00
firestar5683 762146babc tǔne 2026-05-01 18:57:37 -05:00
firestar5683 708af332de build 2026-05-01 18:35:08 -05:00
firestar5683 c612f7a102 tüne 2026-05-01 17:32:30 -05:00
whoisdomi 943a060db2 Developer sidebar fix
Auto-tune off would still display auto-tune values.
Correct chosen values were being used but not displayed.
2026-05-01 15:00:42 -05:00
firestar5683 b77341c804 honda lpf 2026-05-01 14:54:13 -05:00
firestar5683 f69599fabb honda wobble 2026-05-01 14:34:17 -05:00
firestar5683 617aa0a5db honda I6 2026-05-01 14:19:28 -05:00
firestar5683 86f5102158 multiplier 2026-05-01 13:09:43 -05:00
firestar5683 900bb97459 red light stop 2026-05-01 12:40:29 -05:00
firestar5683 86f99b9e1b auto hold 2026-05-01 12:20:42 -05:00
firestar5683 e57d75a3d7 honda 2026-05-01 11:24:47 -05:00
firestarsdog 375a73891c BigUI WIP: Start on Vehicle Panel 2026-05-01 03:43:12 -04:00
firestarsdog ae4c155c6e BigUI WIP: Cleanerish 2026-05-01 02:39:46 -04:00
firestar5683 eedcfe3c56 bumpity 2026-05-01 00:12:31 -05:00
firestar5683 345747a042 more stuff 2026-04-30 23:31:59 -05:00
firestar5683 26e25bf9a8 Errybody wants tuning 2026-04-30 23:11:16 -05:00
firestar5683 8b12ed459f i6 cem 2026-04-30 17:52:50 -05:00
firestar5683 0041a79823 Genesis 2026-04-30 15:29:11 -05:00
firestarsdog b820a3214f BigUI WIP: In-line sliders 2026-04-30 14:28:09 -04:00
firestar5683 f93a4f5adb build 2026-04-30 11:07:47 -05:00
firestar5683 4503811202 DM and volt auto hold 2026-04-30 11:01:46 -05:00
firestar5683 8ec92d12fd toyboi 2026-04-30 10:31:59 -05:00
firestar5683 edc9a9ce60 I6 and CEM 2026-04-30 10:18:17 -05:00
firestarsdog f58b6fc6c7 BigUI WIP: System Settings Parity 2026-04-30 09:43:34 -04:00
firestar5683 d5b8ab3262 build 2026-04-30 08:34:16 -05:00
whoisdomi 609ba6cf63 Slow takeoff possible fix 2026-04-30 07:22:44 -05:00
whoisdomi b9c5a78d16 Prebuilt flag bug fix 2026-04-30 05:42:43 -05:00
whoisdomi a919998872 Unchain me - HKG
Raises max_accel to match sport+ mode of 3.5m/s2
2026-04-30 05:12:03 -05:00
whoisdomi f7fdd7634e CCmain for SLC
CC main button now accepts the current best speed limit source, even if new speed limit source is not flashing.
It snaps cruise speed to match (+ your offset), in either direction.
It works even before engaging longitudinal, so you can pre-set speed limit.
Won't interfere with cars using CC main for Always-On Lateral.
2026-04-30 05:12:02 -05:00
whoisdomi feb9d49c93 SLC Cleanup
Fix three SLC bugs:
1. Auto-accept limits when not engaged to keep previous_target current.
2. Gate Vision out of the limits dict when not a configured priority slot.
3. Replace mapdOut fallback with 0 when filler has no data to prevent stale OSM speed limits from leaking in.
2026-04-30 05:10:48 -05:00
firestarsdog d0c19745c3 BigUI WIP: Extraction 2026-04-30 01:49:24 -04:00
whoisdomi 3adc8592da Acceleration Profile Changes 2026-04-29 23:58:35 -05:00
firestar5683 dcaec4f160 build 2026-04-29 23:44:59 -05:00
firestar5683 b5340a3f3d blinky 2026-04-29 23:44:59 -05:00
firestar5683 b3a2f141d6 updatz 2026-04-29 23:44:59 -05:00
firestar5683 86db8e39c6 patch 2026-04-29 16:41:42 -05:00
firestar5683 749b0d6d79 build 2026-04-29 15:52:46 -05:00
firestar5683 0c7d259e7f sng 2026-04-29 15:50:30 -05:00
firestar5683 f9d6c0d648 Doms plan small update 2026-04-29 15:38:45 -05:00
firestar5683 3e82e773a9 build 2026-04-29 14:25:51 -05:00
firestar5683 04dbd8d0fd HKG 2026-04-29 14:22:52 -05:00
firestar5683 60d6cc4476 i6 2026-04-29 14:22:46 -05:00
firestar5683 91a6df08b0 Plexy 2026-04-29 14:02:42 -05:00
firestar5683 40aff87f88 HKG Long Tune 2026-04-29 11:34:07 -05:00
firestar5683 e19f7d29b4 i6 2026-04-29 11:33:57 -05:00
firestar5683 f27069f2d2 SLC fix 2026-04-29 11:22:58 -05:00
firestarsdog aac395ccd2 BigUI WIP: Mapsssssss 2026-04-29 11:47:46 -04:00
firestar5683 422d92f0ea RL code 2026-04-28 21:14:00 -05:00
firestar5683 d547e3632d rl 2026-04-28 21:06:03 -05:00
firestar5683 ef57854b81 Doms Plan v5 2026-04-28 20:45:13 -05:00
firestar5683 d7a29e6d81 cry more 2026-04-28 20:43:01 -05:00
firestar5683 a68bc7be2e volt 2026-04-28 18:52:55 -05:00
firestar5683 2ed89e4bb7 i6 2026-04-28 18:16:01 -05:00
firestarsdog 145f9d2b19 BigUI WIP: maps are dumb 2026-04-28 19:09:37 -04:00
firestar5683 94c71b8b20 i6 2026-04-28 18:08:41 -05:00
firestar5683 52071db172 i6 2026-04-28 15:13:22 -05:00
firestar5683 66d2a63bcf Patch 2026-04-28 11:33:20 -05:00
firestar5683 53116c29c8 toyota sng 2026-04-28 11:33:12 -05:00
firestar5683 d8fccdb01c build 2026-04-28 10:46:03 -05:00
firestar5683 be77164d8d Bribe Mayhem 2026-04-28 10:42:47 -05:00
firestar5683 0889b3b0c2 Dom's Plan 4 2026-04-28 10:03:38 -05:00
firestarsdog 67c88675da BigUI WIP: Fix callbacks 2026-04-28 03:00:07 -04:00
firestarsdog 65a9fcf3ec BigUI WIP: More map cleanup 2026-04-28 02:14:16 -04:00
firestar5683 cb56102da7 volt 2026-04-27 23:55:25 -05:00
firestarsdog 2e28374fc9 BigUI WIP: Map Panel WIP 2026-04-28 00:35:31 -04:00
firestar5683 9598e47162 build 2026-04-27 21:26:20 -05:00
whoisdomi 40372c63ee Force Stop 2.0
Force Stop 2.0 — Smoother deceleration curve. On cars with the ADAS stop-sign signal, stops are even more confident; cars without dashboard stop sign signal will also benefit from a new deceleration curve and MPC handoff.

Toggle off = stock behavior.
2026-04-27 21:26:20 -05:00
firestar5683 e24520254b Ioniq 6 Long Tune 2026-04-27 21:26:19 -05:00
firestar5683 43a5c09412 Dom's Plan V3 2026-04-27 11:49:39 -05:00
firestar5683 426dbd1718 Dom's plan 2026-04-27 00:35:13 -05:00
firestar5683 8bae6a1063 Dom's Plan 2026-04-26 23:50:48 -05:00
firestar5683 8f7b28deed genesis 2026-04-26 23:20:43 -05:00
firestar5683 4026b6af9b volt 2026-04-26 23:16:42 -05:00
firestar5683 a5dae4669c i6 2026-04-26 23:01:47 -05:00
firestar5683 6b1e11c314 ioniq 2026-04-26 19:28:17 -05:00
firestar5683 e2681b17a4 lane change? 2026-04-26 17:36:12 -05:00
firestar5683 da61e79f2e hud bsm? 2026-04-26 17:14:39 -05:00
firestar5683 31fefd8eb8 bSM 2026-04-26 15:51:16 -05:00
firestar5683 bcf78fec02 i6 2026-04-26 15:40:15 -05:00
firestar5683 71528fd547 ioniq tests 2026-04-26 14:38:27 -05:00
firestar5683 962e0d740a test 2026-04-26 12:37:51 -05:00
firestar5683 1262a2d8f3 Lane change? 2026-04-26 11:03:42 -05:00
firestar5683 a8ba10aac6 ioniq 6 2026-04-26 00:18:31 -05:00
firestarsdog ff67d2eedd BigUI WIP: Finish nuking nav from ui 2026-04-25 23:40:39 -04:00
firestarsdog a2c39aa2ed BigUI WIP: Remove nav junk 2026-04-25 22:10:29 -04:00
firestarsdog a1a781bcf6 BigUI WIP: Tile title and description cleanup 2026-04-25 22:08:38 -04:00
firestar5683 6d0559c6d9 Dom's Plan 2026-04-25 20:51:58 -05:00
firestar5683 330a811114 ioniq tune | blindspot | paddle 2026-04-25 20:51:58 -05:00
firestarsdog ed695fab1b BigUI WIP: Simpleton 2026-04-25 17:17:13 -04:00
firestar5683 a2d51807c7 ioniq 6 2026-04-25 15:58:10 -05:00
firestar5683 df0b6c3e2b YOU WERE THE CHOSEN ONE 2026-04-25 15:39:43 -05:00
firestar5683 636e0d0585 Suppress Dash Faults? 2026-04-25 14:54:33 -05:00
firestar5683 124daf1f51 ioniq 6 2026-04-25 14:26:42 -05:00
whoisdomi e8d0d7bc3a ECU disable fallback stock HDA2 fix
When car is started in "ready" mode now stock acc will work as intended
2026-04-25 10:37:31 -05:00
firestar5683 f074dcc3b5 Revert "Fallback mode HDA2"
This reverts commit 2e4c3f43ee.
2026-04-25 10:37:19 -05:00
whoisdomi 2eb4dfbdc9 Lane Smoothing Tune
Tune to prevent overshoot
2026-04-25 01:15:57 -05:00
firestar5683 2e4c3f43ee Fallback mode HDA2
Revert "Fallback mode HDA2"

This reverts commit 81b2b3584227bd1aa62089770245e50e131e0a3b.

Fallback mode hda2
2026-04-25 01:15:57 -05:00
firestar5683 be87ecec3e ioniq 6 2026-04-24 22:22:34 -05:00
firestar5683 317be3b383 nostalgia 2026-04-24 20:44:12 -05:00
firestar5683 ca5b641b96 Voacc refinement and non-scc cruise check 2026-04-24 18:19:18 -05:00
firestar5683 031ad89851 kia forte 2026-04-24 16:16:25 -05:00
firestar5683 b6374d96b8 build 2026-04-24 14:24:58 -05:00
firestar5683 9d2a80504b I said he a radar boi, I said see you l8er boi 2026-04-24 14:08:14 -05:00
firestar5683 aa089fc64f oopsie 2026-04-24 13:31:16 -05:00
firestar5683 28fb6bc5ef f 2026-04-24 12:22:31 -05:00
firestar5683 41023b71e8 Remember Your Roots 2026-04-24 01:48:49 -05:00
firestar5683 1c85fed7b6 build 2026-04-24 00:59:31 -05:00
firestar5683 0024516f18 Hey Comma 2026-04-24 00:58:57 -05:00
firestar5683 1430c59da9 Volt | Genesis | Ioniq | Kia | Model randomizer 2026-04-24 00:41:11 -05:00
firestar5683 f20d22d62a disable op long 2026-04-23 22:13:44 -05:00
firestar5683 7ede28e8fe build 2026-04-23 21:50:35 -05:00
whoisdomi 49c71e2ecb galaxy toggle? 2026-04-23 21:48:57 -05:00
whoisdomi 0f65be4a06 lane change fix 3 2026-04-23 21:48:57 -05:00
whoisdomi d6e4d3bb05 Lane smooth UI fix 2026-04-23 21:48:56 -05:00
whoisdomi 603190b87f Feature: Lane Change Smoothing
Lane Change Smoothing — single 1-10.
At 10 (default) behavior is stock-identical;
Lower values slow the maneuver toward ~8 s by scaling jerk and lateral accel limits during the lane change state.
Time-max abort window extends proportionally so slow settings can't trigger a mid-maneuver abort.
2026-04-23 21:48:56 -05:00
firestar5683 a6086fa798 VOLT NO CAM | IONIQ | KIA 2026-04-23 21:38:33 -05:00
firestar5683 08f5e15a95 GM HKG 2026-04-23 18:11:32 -05:00
firestar5683 3da859226c HKG And GM 2026-04-23 16:45:12 -05:00
firestar5683 ece5f95765 OPv12 2026-04-23 15:47:42 -05:00
firestar5683 7cd8dd1002 build 2026-04-23 09:38:13 -05:00
whoisdomi 39afadb95f IONIQ
UI Build

LKAS engage/disengage sound

It will now make the same sound as op engage/disengage

Wheel Control fix 2

build

Feature: Model Name on Developer Sidebar

Model Name port and correct DEVELOPER_SIDEBAR_METRICS slot numbering

Wheel Controls button fixes

Mode/Star buttons were not showing on desk
LKAS option was showing even when car was using it for AOL, not it hides it if being used for AOL

MapGears Sync Accel/Decel on UI

MapGears will sync with "Longitudinal Tuning" UI to show chosen accel/decel profile to match with chosen drive mode.

Drive mode -> accel/decel profile mapping.
Eco → Eco
Normal → Standard
Sport → Sport+/Sport

Writes on gear state change, gated on MapAcceleration/MapDeceleration toggles independently

ECU Disable and Auto long/exp check

ECU Disable and Auto long/exp check

compile

Star and Mode buttons to wheel control options

cereal/custom.capnp — Added modePressed @16 and customPressed @17 fields to StarPilotCarState

opendbc_repo/opendbc/car/hyundai/carstate.py — Added STEERING_WHEEL_MEDIA_BUTTONS (50Hz) to the CANFD CAN parser, initialized mode_button/custom_button state, and set fp_ret.modePressed/fp_ret.customPressed in update_canfd()

common/params_keys.h — Added 6 new params: ModeButtonControl, LongModeButtonControl, VeryLongModeButtonControl, StarButtonControl, LongStarButtonControl, VeryLongStarButtonControl

starpilot/common/starpilot_variables.py — Added full short/long/very-long toggle processing for both Mode and Star buttons (gated on HyundaiFlags.CANFD), with has_canfd_media_buttons flag propagated to toggles

starpilot/controls/starpilot_card.py — Added Mode and Star button press counters and short/long/very-long press event handling, mirroring the existing distance button logic

selfdrive/ui/layouts/settings/starpilot/wheel.py — Added 6 new tiles for Mode/Star buttons (short, long, very long each), visible only when cs.isHKGCanFd is true

MapGears for HKG

Add HKG "Drive Modes" button ability to map to eco/normal/sport accel profiles.

Dashboard speed limit reading for CANFD

Add FR_CMR_02_100ms to CAN parsers in get_can_parsers_canfd: on ECAN (freq=10) for LKA_STEERING cars, on CAM (freq=0, optional) for all others
calculate_canfd_speed_limit and fp_ret.dashboardSpeedLimit assignment were already present
CAM bus uses freq=0 to avoid breaking canValid on non-LKA cars that don't have this message

CANFD steering limits

Raises STEER_MAX to 409
Speed-dependent deltas (DELTA_UP=10/DOWN=8 below 15 m/s, UP=2/DOWN=3 above),
Update panda safety ceiling and tests to match.
Removes TacoTuneHacks toggle dependency.

Ioniq 6 toml values update Updated toml values closer to learned values

DBC Update HKG Signals

Added 5 new messages to hyundai_canfd.dbc and hyundai_canfd_generated.dbc:

DRIVE_MODE_EV (0x205):
EV drive mode state with Normal/Eco/Sport (button) values. Can be used to change
acceleration profiles in openpilot based on drive mode.

CAM_0x361 (0x361):
Camera sign recognition with SIGN_TYPE and SIGN_TYPE_2 signals.
Dashboard Speed Limit. Can be used as source for SLC.

ADAS_0x380 (0x380):
ADAS stop sign detection bit. Dashboard stop sign alert.
Triggers 80-90ft before stop sign typically and can be used to help stopping for stop signs.

DOOR_LOCK (0x414):
Not actual command to lock/unlock, but may be used to detect lock state changes.

STEERING_WHEEL_MEDIA_BUTTONS (0x448):
Steering wheel button inputs (voice, phone, mode, next/prev, menu, scroll, custom)
Can be used to assign custom functions to steering wheel buttons in openpilot.

Targets Ioniq 6 but may apply to other Hyundai CAN FD vehicles.
2026-04-23 09:32:13 -05:00
firestar5683 dff758f71b Volt no camera? 2026-04-23 09:25:35 -05:00
firestar5683 ebdface431 throttle hysteresis 2026-04-22 21:58:17 -05:00
firestarsdog 6e69930ec2 Galaxy Webkit Fix? 2026-04-22 22:14:21 -04:00
firestar5683 7f0731b9f5 galaxy 2026-04-22 20:51:34 -05:00
firestar5683 e96a54febd build 2026-04-22 20:38:58 -05:00
firestar5683 489080ca56 webkit 2026-04-22 20:34:15 -05:00
firestarsdog ad0e4c0689 BigUI WIP: Weeee 2026-04-22 20:34:15 -05:00
firestar5683 c36235f6fd add kia sportage hybrid support 2026-04-22 20:34:15 -05:00
Dom 7c71f3c114 Merge pull request #53 from nonokirby/StarPilot
Fix several issues with the settings layout in galaxy
2026-04-22 11:28:16 -05:00
firestar5683 04f52c4ac7 Fix weather settings layout groups 2026-04-22 11:28:16 -05:00
nonokirby 94e28e2708 Fix parent toggle properties for vision speed limit detection 2026-04-22 11:28:15 -05:00
nonokirby 9d075f9885 Fix value steps for SLC offsets 2026-04-22 11:28:15 -05:00
nonokirby 52673ca927 Fix adaptive weather presets layout 2026-04-22 11:28:15 -05:00
firestar5683 9563a0e09a planner 2026-04-22 08:43:15 -05:00
firestar5683 920c6832d3 CEM / NO CAMERA / UI / REDNECK 2026-04-22 00:15:36 -05:00
firestarsdog 4362a2bce4 BigUI WIP: System Settings 2026-04-22 00:47:57 -04:00
firestar5683 e22dba42a5 volt and genesis 2026-04-21 23:03:48 -05:00
firestar5683 8304a7f77b UI 2026-04-21 23:03:48 -05:00
firestar5683 fd1ea78a62 theme 2026-04-21 16:14:02 -05:00
firestarsdog 5e3ceafa5b BigUI WIP: Refinement
BigUI WIP: Sound Panel Touch Sliders
BigUI WIP: Sound Elements -> Aethergrid Extraction
BigUI WIP: More push_widget
2026-04-21 14:54:47 -04:00
firestarsdog 91f587f061 Galaxy WebUI: Unload speed limit panel 2026-04-20 21:23:55 -04:00
firestar5683 bbc1737fbd Coast Toggle 2026-04-20 12:09:36 -05:00
firestar5683 688e0c3fc0 Kia Forte non-acc Port 2026-04-20 00:33:13 -05:00
firestar5683 0f22e7c495 update migration 2026-04-20 00:24:04 -05:00
firestar5683 30f416af73 Volt Lat Update 2026-04-20 00:15:57 -05:00
firestar5683 174bb9f31f fixes and Themes 2026-04-19 21:39:02 -05:00
firestar5683 392d38c589 volt lat 2026-04-19 18:11:18 -05:00
firestar5683 5f2dad82a1 more consistent param syncing 2026-04-19 16:33:22 -05:00
firestar5683 37c8c21420 build 2026-04-19 11:21:23 -05:00
firestar5683 ee3f32ade9 Border WIDTH 2026-04-19 11:20:28 -05:00
firestar5683 f6197651f4 comms error? 2026-04-19 11:10:39 -05:00
firestar5683 37100542e9 SLC 2026-04-19 11:10:33 -05:00
firestar5683 ead3933e8f Reapply "Mici customize?"
This reverts commit 4419e33dca.
2026-04-19 10:49:21 -05:00
firestar5683 4419e33dca Revert "Mici customize?"
This reverts commit 979015cd20.
2026-04-19 01:06:55 -05:00
firestar5683 a2efcb6d52 SLC 2026-04-19 01:06:41 -05:00
firestar5683 979015cd20 Mici customize? 2026-04-19 00:59:39 -05:00
firestar5683 ad19135aa5 fixes 2026-04-19 00:59:31 -05:00
firestar5683 4f41106394 Reapply "Lead catchup"
This reverts commit e79e006e84.
2026-04-18 16:02:18 -05:00
firestar5683 0b2261ce08 revert volt long tune 2026-04-18 16:01:49 -05:00
firestar5683 278c89b1a5 opv11 2026-04-18 15:50:54 -05:00
firestarsdog e79e006e84 Revert "Lead catchup"
This reverts commit 2e53cc45e6.
2026-04-18 16:42:07 -04:00
firestarsdog be6cf8cfc7 Radar Only Lead Delete 2026-04-18 16:02:10 -04:00
firestarsdog ebf1d387de BigUI WIP: Match upstream push_widget 2026-04-18 04:31:30 -04:00
firestarsdog a91a4c11dd BigUI WIP: Extraction into Aethergrid 2026-04-17 17:04:21 -04:00
firestar5683 76bcea3e72 HKG Test 2026-04-17 02:02:18 -05:00
firestar5683 4b746ecbd5 ev6 2026-04-17 01:11:00 -05:00
firestar5683 e4a3e244bf Dm graphic 2026-04-16 22:30:05 -05:00
firestar5683 819e6c497c Volt Long Tune 2026-04-16 15:09:57 -05:00
firestar5683 d0630df075 cem 2026-04-16 13:49:18 -05:00
firestar5683 828460f729 build 2026-04-15 23:40:31 -05:00
firestar5683 8f49c6e13e sonata AOL
Revert "sonata AOL"

This reverts commit 04a30c8cde34400005fa3e139f2fe0df390a624a.

Reapply "sonata AOL"
2026-04-15 23:39:49 -05:00
firestar5683 9c9f88a1e2 cabana darwin 2026-04-15 22:44:30 -05:00
firestar5683 34d8f95a11 Testing Grounds 2026-04-15 22:37:25 -05:00
firestarsdog 00f8b73f6b One more Cabana fix 2026-04-15 20:50:48 -04:00
firestar5683 898c70102a Reapply "offset cluster" 2026-04-15 19:40:11 -05:00
firestarsdog 6cb6bb904c Cabana : Upstream Removed These
Reference upstream commit 3478ac1338
2026-04-15 20:36:37 -04:00
firestarsdog 4985ab8975 Revert "offset cluster"
This reverts commit 29663a3dc7.
2026-04-15 20:30:47 -04:00
firestar5683 9800be7cc9 prius 2026-04-15 15:50:33 -05:00
firestar5683 2d04cc2ea8 plexy 2026-04-15 15:48:52 -05:00
firestar5683 29663a3dc7 offset cluster 2026-04-15 14:37:16 -05:00
firestar5683 faed56973d cem 2026-04-15 13:05:18 -05:00
firestar5683 82b669b4b3 volt 2026-04-15 07:53:41 -05:00
firestar5683 a047547f44 plexy 2026-04-14 22:18:33 -05:00
firestar5683 d4f2cd3e37 prius 2026-04-14 21:29:12 -05:00
firestar5683 3c3a2a6d1a Plexy 2026-04-14 21:02:25 -05:00
firestar5683 e5db022df9 build 2026-04-14 19:18:43 -05:00
firestar5683 8c00f0a33f Galaxy and Konik 2026-04-14 19:17:10 -05:00
firestar5683 93cebacebf galaxy pin and Dm alert 2026-04-14 18:13:03 -05:00
firestar5683 1ce03e79f0 ui 2026-04-14 17:16:17 -05:00
firestarsdog 2e20cd061f BigUI WIP: Sounds/Sliders 2026-04-14 17:28:18 -04:00
firestar5683 19656bd01f build 2026-04-14 13:06:27 -05:00
firestar5683 0ffae39d22 boot logo 2026-04-14 12:57:14 -05:00
firestar5683 ebce2c6853 rollback 2026-04-14 12:51:49 -05:00
firestar5683 0137ad66f8 planner 2026-04-14 12:18:57 -05:00
Dom 5745203dc5 Merge pull request #52 from firestar5683/Dom49
AOL: keep lateral active when braking disengages longitudinal on full OP for HKG with LKAS
2026-04-14 11:40:15 -05:00
firestar5683 c486690f46 Hyundai: scope AOL set-latch to full OP 2026-04-14 11:38:12 -05:00
firestar5683 1fc4b07d4d Revert "silverado" 2026-04-14 11:19:06 -05:00
whoisdomi b51df99f27 aol: keep lateral active when braking disengages longitudinal on full OP
On rising edge of SET engagement, auto-enable AOL so lateral persists
after braking disengages longitudinal. Simplify safety.h aol_allowed
to not require acc_main_on or lkas_on.
2026-04-14 10:59:51 -05:00
firestarsdog 936a50e35d BigUI WIP: Some Sounds 2026-04-14 03:21:25 -04:00
firestar5683 dc54284a3b silverado 2026-04-13 23:08:13 -05:00
firestarsdog 813caad5ca BigUI WIP : Model Manager updates 2026-04-13 23:07:24 -04:00
firestar5683 9c54dcf26f port lock 2026-04-13 19:08:49 -05:00
firestar5683 2e7579e25e build 2026-04-13 18:11:21 -05:00
firestar5683 779557303b ui crashout 2026-04-13 18:10:22 -05:00
firestar5683 2e53cc45e6 Lead catchup 2026-04-13 18:10:10 -05:00
firestarsdog d5b6ec2ef6 BigUI WIP: Some reusable stuff 2026-04-13 18:01:39 -04:00
firestar5683 811c5ac923 Update values.py 2026-04-13 13:11:59 -05:00
firestar5683 105966fb19 csc 2026-04-13 00:18:01 -05:00
firestar5683 b7ccc9116e NIK!!! 2026-04-12 23:10:53 -05:00
firestar5683 7d7d39faca UI Replay 2026-04-12 23:03:57 -05:00
firestar5683 66f064d178 Lateral 2026-04-12 22:31:16 -05:00
firestar5683 7568ab4e3d fixes 2026-04-12 20:51:49 -05:00
firestar5683 541c4d4735 build 2026-04-12 17:30:47 -05:00
firestar5683 4ef2bca38e 1mph undershoot 2026-04-12 17:29:28 -05:00
firestar5683 121b593b3f c4 2026-04-12 16:58:41 -05:00
firestarsdog b755562edb Maybe this can delay the SLC deletion 2026-04-12 17:52:47 -04:00
firestar5683 b9657a688a Mo' Mizu Mo' Problemz 2026-04-12 16:16:24 -05:00
firestar5683 c1420b24bd simple mode 2026-04-12 16:16:24 -05:00
firestar5683 3e203ce3ed Update launch_chffrplus.sh 2026-04-12 16:01:44 -05:00
firestar5683 4ae0e9fe44 autolearn sidebar 2026-04-12 15:46:49 -05:00
firestar5683 6487f9c810 Proposed LocationD Error Fix 2026-04-12 13:45:49 -05:00
firestar5683 d93f446f2e reset dm c4 2026-04-12 02:17:41 -05:00
firestarsdog 0b2c8d70ce BigUI WIP: Just removing auto DL and randomizer for now 2026-04-12 03:15:49 -04:00
firestarsdog 6080819f7d BigUI WIP: Model Manager Alignment + Colors 2026-04-12 01:39:01 -05:00
firestar5683 1d63167ba1 Update home.py 2026-04-12 01:39:01 -05:00
firestar5683 63f417df3a color calibration 2026-04-12 01:39:01 -05:00
firestarsdog eafe46a886 BigUI WIP: Model Manager 2026-04-12 01:21:33 -04:00
firestarsdog b0ebc18285 WIP BigUI: Fixes + Model Manager Stuff 2026-04-12 01:11:17 -04:00
firestar5683 8ead3db292 Galaxy fix 2026-04-11 23:54:52 -05:00
firestar5683 f5aa89b3ff buttons 2026-04-11 23:49:52 -05:00
firestar5683 d43b7d0d3f UI 2026-04-11 23:49:51 -05:00
firestar5683 d2e5f06395 calibration 2026-04-11 19:06:07 -05:00
firestar5683 8c93f6b896 fixes 2026-04-11 19:01:10 -05:00
firestarsdog 7ceb47eb23 not1454 is a liar 2026-04-11 13:21:11 -04:00
firestarsdog 851666e244 BigUI WIP: Some Model Manager Cleanup 2026-04-11 05:06:00 -04:00
firestar5683 161e0e10c8 customaccel patch 2026-04-11 00:51:12 -05:00
firestar5683 87aa15fc33 raybig 2026-04-10 23:00:14 -05:00
firestar5683 b511785e01 Revert "Bigui Launch Fix - Revert in case of emergency"
This reverts commit 87b4f8a287.
2026-04-10 22:22:54 -05:00
firestar5683 8236c530fb op10 2026-04-10 22:09:01 -05:00
firestar5683 692ab16651 build 2026-04-10 20:59:44 -05:00
firestar5683 e0cf4fd988 kp / 2018 lat / 2017 lat / 2022 lat / GM long / trailer mode / 2026-04-10 20:57:30 -05:00
firestarsdog 87b4f8a287 Bigui Launch Fix - Revert in case of emergency 2026-04-10 21:35:20 -04:00
firestar5683 2efb42bc43 Boot Logo 2026-04-10 16:34:06 -05:00
firestar5683 5968f7e6a0 ui 2026-04-10 16:16:45 -05:00
firestar5683 2712642d9d We're not in Kansas anymore 2026-04-10 14:49:48 -05:00
firestar5683 36bc3aa4af show commit 2026-04-10 14:49:48 -05:00
firestar5683 c9e4e6e36c 1e1 2026-04-10 14:49:47 -05:00
firestar5683 93e496d239 whoops 2026-04-10 14:49:47 -05:00
firestar5683 9eb203fb03 standard gas tuning 2026-04-10 14:49:47 -05:00
firestar5683 7ab1ec0ace 2017 2026-04-10 14:49:47 -05:00
firestar5683 b4e4fa373f 3d1 regression 2026-04-10 14:49:47 -05:00
firestar5683 e338ef2585 raylib 2026-04-10 14:49:46 -05:00
firestar5683 ed51b41970 ui stall 2026-04-10 14:49:46 -05:00
firestar5683 00abf5bc2c Agahnim 2026-04-10 14:49:46 -05:00
firestar5683 6f22a65224 Follow that trail; The trail that we blaze 2026-04-09 21:18:41 -05:00
firestar5683 01bf1d15c2 volt tune / 2018 bolt tune 2026-04-09 20:55:24 -05:00
firestarsdog e91d0bef87 BigUI WIP: Spacing 2026-04-09 21:44:09 -04:00
firestar5683 3cb5792926 SDGM 2026-04-09 15:04:11 -05:00
firestar5683 4b5ec507be Persist Exp State 2026-04-09 13:00:49 -05:00
firestar5683 08efd8f877 2017 2026-04-09 11:23:06 -05:00
firestar5683 5122444610 build 2026-04-08 23:12:42 -05:00
firestar5683 07a4bfc5f5 0x370 Leak 2026-04-08 23:11:55 -05:00
firestar5683 375df40919 ui back to 5 2026-04-08 23:11:55 -05:00
firestar5683 30778bf908 logg 2026-04-08 23:11:54 -05:00
firestar5683 5b3229576a more ui logging 2026-04-08 19:41:01 -05:00
firestar5683 04e199cf7b 2017 test 2026-04-08 19:10:29 -05:00
firestar5683 258eedb42c Prius 2026-04-08 18:28:20 -05:00
firestar5683 3e885e238c Updated Bolt Tunes 2026-04-08 18:28:20 -05:00
firestar5683 89d3a0ef23 2022 2026-04-08 15:55:51 -05:00
firestar5683 5b27f36a62 less creep and DM alert 2026-04-08 11:11:25 -05:00
firestar5683 a22e8c963a 2022 tune 2026-04-08 11:02:31 -05:00
firestar5683 84016d34e1 2017 tune 2026-04-08 10:56:35 -05:00
firestar5683 1d23f7d59f pedal plotjuggler 2026-04-08 01:43:04 -05:00
firestar5683 b94bad766a update 2018 bolt tune 2026-04-08 00:15:38 -05:00
firestar5683 2d7d7a1246 Simple Mode 2026-04-07 23:52:11 -05:00
firestar5683 c2ff6b573a volt checks 2026-04-07 23:44:58 -05:00
firestar5683 3f2dc76051 prius / bolt / volt tuning | UI Logging 2026-04-07 23:44:58 -05:00
firestar5683 c4c5a9a92b earlier galaxy boot 2026-04-07 14:57:06 -05:00
firestar5683 3fe5adc303 ./models --dm 2026-04-07 12:43:48 -05:00
firestar5683 b7d76c176b patch 2026-04-07 12:11:21 -05:00
firestar5683 ce5c0217c0 Change ./models for off policy rename 2026-04-07 11:59:47 -05:00
firestar5683 f6601873a2 fix model manager 2026-04-07 11:50:50 -05:00
firestar5683 d59aca4fb6 OPv8 2026-04-07 11:31:46 -05:00
firestarsdog 2d1376cd86 BigUI WIP: Cleanup 2026-04-07 02:15:45 -04:00
firestarsdog 0b0fb3957a BigUI WIP: More Tab Stuff
(cherry picked from commit 9ba41d1a4a46cb95c5ef07901593e72d3d00ad7a)
2026-04-07 00:45:18 -05:00
firestar5683 355fe2a273 build 2026-04-07 00:45:17 -05:00
firestar5683 4beb1f6e2e Lateral maneuvers 2026-04-07 00:45:17 -05:00
firestar5683 088e4a6e56 upstream 2026-04-07 00:45:17 -05:00
firestar5683 c7f262e700 Bolt lateral tests 2026-04-07 00:45:17 -05:00
firestarsdog 5f3c593640 BigUI WIP: We need tabs 2026-04-07 00:01:31 -04:00
firestar5683 3ca76720fc cruise speed and ui test 2026-04-06 22:47:53 -05:00
firestarsdog ad948aa93e BigUI WIP: Some Font Smoothing 2026-04-06 22:23:37 -04:00
firestar5683 49f2e2854a Update carcontroller.py 2026-04-06 20:50:22 -05:00
firestar5683 c93675d153 Update speed_limit_us_detector.onnx 2026-04-06 20:18:23 -05:00
firestar5683 7ca1d6caca Merry Crisis 2026-04-06 19:14:50 -05:00
firestar5683 eb04ec95bf vision speed scheduler 2026-04-06 18:57:38 -05:00
firestar5683 3aa6a8ce52 volt steer ratio 2026-04-06 18:39:43 -05:00
firestar5683 deff72c5e4 long manuevers / model manager 2026-04-06 18:34:30 -05:00
firestar5683 19068fc2cc Update longitudinal_maneuvers.js 2026-04-06 18:12:42 -05:00
firestar5683 bcce932117 pedal creep 2026-04-06 17:45:04 -05:00
firestar5683 f859b2636d paddle state machine 2026-04-06 17:38:32 -05:00
firestar5683 f1feaa2cb9 long manuevers 2026-04-06 17:24:24 -05:00
firestar5683 033d83252e sounds 2026-04-06 15:29:50 -05:00
firestar5683 d745f51b22 Update override.toml 2026-04-06 14:47:29 -05:00
firestar5683 99771693fd patches 2026-04-06 14:18:10 -05:00
firestar5683 da3a047bb0 volt test tune 2026-04-06 13:13:48 -05:00
firestar5683 cc653f3bad saveme 2026-04-06 02:41:21 -05:00
firestar5683 aa427a6ee1 build 2026-04-06 02:25:41 -05:00
firestar5683 db2d380a6d patch 2026-04-06 02:14:53 -05:00
firestar5683 5b8fb4c4f1 toyboy galaxy 2026-04-06 02:14:53 -05:00
firestar5683 570d026542 test2 2026-04-06 02:14:53 -05:00
firestar5683 cda677c4dc Stopped Timer / Driver Cam on reverse / Camera view 2026-04-06 02:14:53 -05:00
firestar5683 1d49528e37 test fixes 2026-04-06 02:14:53 -05:00
firestarsdog 447b894aae BigUI WIP: More Settings Porting 2026-04-06 02:52:34 -04:00
firestarsdog 3a4a3b723e Dev Tools : Update Scripts 2026-04-06 02:49:59 -04:00
firestar5683 9972bbfb88 Pet watchdogs 2026-04-06 00:57:51 -05:00
firestar5683 eaab1cec23 can filter 2026-04-06 00:31:28 -05:00
firestar5683 af0faa1beb suburban 2026-04-05 22:45:24 -05:00
firestar5683 b1cf0aef68 build 2026-04-05 18:01:23 -05:00
Dom 701080a672 Merge pull request #50 from FLYINORION123/honda-speedlimit-dev
Honda Dashboard Speed Limit Controller (SLC) Support
2026-04-05 18:00:38 -05:00
firestar5683 523c12257b Lancia Delta 2026-04-05 17:40:44 -05:00
firestar5683 bad1a01c27 PRs 2026-04-05 17:18:38 -05:00
firestar5683 817a71ab73 mapbox 2026-04-05 17:08:05 -05:00
firestar5683 b6fa173103 Timeout 2026-04-05 15:05:38 -05:00
firestarsdog ba4cca6221 SLC Alert Update 2026-04-05 03:15:52 -04:00
firestar5683 876003da36 patches 2026-04-04 19:50:14 -05:00
firestar5683 4ebe5a277a custom accel and screen timeout 2026-04-04 19:22:18 -05:00
firestar5683 5f1e0eeb3a Update hud_renderer.py 2026-04-04 16:57:41 -05:00
firestar5683 10cab1ceff SLC 2026-04-04 10:58:40 -05:00
firestar5683 4a4b918d28 Update starpilot_process.py 2026-04-04 10:30:40 -05:00
firestar5683 85a1e92c26 new model 2026-04-03 19:44:30 -05:00
firestarsdog 2df630c727 Small dev env add 2026-04-03 19:18:39 -04:00
firestar5683 f8a2afe4e1 changed my mind again 2026-04-03 16:06:39 -05:00
firestar5683 766cd1ed92 maps 2026-04-03 15:58:20 -05:00
firestar5683 19da449199 opv8 2026-04-03 13:59:04 -05:00
firestar5683 b381fd8f44 training data 2026-04-03 13:05:27 -05:00
firestar5683 a695eda0aa safety suite 2026-04-03 12:43:34 -05:00
firestar5683 bbec85587f 0xbe 2026-04-03 12:04:21 -05:00
firestarsdog 99d8bb6efc Stop the Gate 2026-04-03 12:01:29 -04:00
firestarsdog 65b81c5710 BigUI WIP: Adj Path Bugfixes 2026-04-03 09:57:52 -04:00
firestarsdog 44bd84448c BigUI WIP: Aethergrid Update 2026-04-02 21:46:04 -04:00
firestar5683 1c95f0ebd0 cruise interval 2026-04-02 20:43:30 -05:00
firestar5683 74e580c584 param 2026-04-02 15:26:01 -05:00
firestar5683 62ed22177c update stagger 2026-04-02 14:49:53 -05:00
firestar5683 6346e05c5b force standstill 2026-04-02 14:29:08 -05:00
firestar5683 f8c5e90e3d driving model / dm changes 2026-04-02 14:01:58 -05:00
firestarsdog 0558712c47 BigUI WIP: Move Panel/StarPilot Default 2026-04-02 14:58:19 -04:00
firestar5683 a2008160c6 long mpc 2026-04-02 13:36:12 -05:00
Dom 6099e10998 Merge pull request #47 from firestar5683/codex/find-and-patch-braking-issue-in-chill-mode
Restore minimum lead-tracking buffer to fix chill-mode lead stopping
2026-04-02 11:48:45 -05:00
Dom fbdf401d1c Fix chill lead tracking regression from stop-distance buffer change 2026-04-02 11:48:31 -05:00
firestar5683 f14fa204fd Revert "saveme"
This reverts commit 2f9cdc2beb.
2026-04-02 10:05:50 -05:00
firestarsdog 57b8f97edf Aethergrid2 2026-04-02 09:58:35 -04:00
firestarsdog 30cfcd12d1 Aethergrid 2026-04-02 09:57:35 -04:00
firestar5683 06429a52df build 2026-04-02 01:47:37 -05:00
firestar5683 91cc63d68f messaged 2026-04-02 01:43:58 -05:00
firestar5683 a16ec85c27 no two publishers 2026-04-02 01:43:58 -05:00
firestar5683 5a91f3f1ca build 2026-04-02 01:43:57 -05:00
firestar5683 b0817dacef remove lon slope 2026-04-02 01:43:57 -05:00
firestar5683 9b075320b4 malibu 2026-04-02 01:43:57 -05:00
firestar5683 b6fec96236 Update carcontroller.py 2026-04-02 01:43:57 -05:00
firestar5683 054f886551 SLC Default Off 2026-04-02 01:43:56 -05:00
firestar5683 831f4f77f5 big oopsie 2026-04-02 01:43:56 -05:00
firestar5683 e8e765cb02 build fixes 2026-04-02 01:43:56 -05:00
firestar5683 4ebed61c3e malibu 2026-04-01 23:41:08 -05:00
firestar5683 a1f24c91e4 Update carcontroller.py 2026-04-01 23:09:06 -05:00
firestar5683 04bc9d275d SLC Default Off 2026-04-01 19:09:56 -05:00
firestar5683 b2c7e73637 big oopsie 2026-04-01 19:00:44 -05:00
firestar5683 37c52d1839 build fixes 2026-04-01 15:42:32 -05:00
firestar5683 f91eed0586 memory leaks 2026-04-01 12:13:37 -05:00
firestar5683 f6377538e9 Update starpilot_planner.py 2026-04-01 10:08:48 -05:00
firestar5683 105e879ae3 build 2026-04-01 10:02:01 -05:00
firestar5683 1e79d37919 disable human likes 2026-04-01 10:01:04 -05:00
firestar5683 daccf4e4ed throttle 2026-04-01 09:04:39 -05:00
firestar5683 fbbfeec0a8 build 2026-04-01 08:57:11 -05:00
firestar5683 902e61831d build 2026-04-01 08:31:26 -05:00
firestar5683 2f9cdc2beb saveme 2026-04-01 08:07:46 -05:00
firestarsdog 12453f78e9 BigUI WIP: Curve Speed Border + SLC 2026-04-01 03:30:09 -04:00
firestar5683 73f5fc84aa patch 2026-03-31 21:09:33 -05:00
firestar5683 0d9c58ac51 malibu 2026-03-31 20:15:14 -05:00
firestar5683 1f9849d752 compile 2026-03-31 19:59:25 -05:00
firestar5683 fd2209b01c panda and stats 2026-03-31 19:54:42 -05:00
firestar5683 b37bc78810 Update speed vision 2026-03-31 17:08:08 -05:00
firestar5683 bc988cb02b build 2026-03-31 14:35:36 -05:00
firestar5683 863b628946 show speed 2026-03-31 13:49:14 -05:00
firestar5683 a4c5b6e934 build 2026-03-31 13:29:56 -05:00
firestar5683 95107573aa planner bounds 2026-03-31 13:27:24 -05:00
firestar5683 22669da61c try paddle 2026-03-31 13:27:24 -05:00
firestarsdog f9131e4f02 BigUI StarPilot Layer + AOL + Personality Buttons 2026-03-31 13:27:24 -05:00
firestarsdog 23a7fd7d81 Fix mici replay on tizi ui 2026-03-31 13:27:23 -05:00
firestarsdog ba7e1ad8a8 raybig might run? 2026-03-31 13:27:23 -05:00
firestar5683 28d22d7a26 compile 2026-03-31 13:27:23 -05:00
firestar5683 ad06ffb4ce goat 2026-03-31 13:27:23 -05:00
firestar5683 ac47a9b73b troubleshoot 2026-03-31 13:27:22 -05:00
firestar5683 6bbe1dc4a1 Update device_settings_layout.json 2026-03-31 13:27:22 -05:00
firestar5683 fe4f42a616 friar carl 2026-03-31 13:27:22 -05:00
firestar5683 675227a8eb pond 2026-03-30 01:36:05 -05:00
firestar5683 bccffecef3 fix 2026-03-30 01:18:04 -05:00
firestar5683 f6b41914b9 fix 2026-03-30 01:11:27 -05:00
firestar5683 a4444ce617 troubleshoot 2026-03-30 00:44:32 -05:00
firestar5683 80f48a3b85 stock theme 2026-03-30 00:40:52 -05:00
firestar5683 2c3fc143a3 plot grading 2026-03-29 23:43:16 -05:00
firestarsdog 28d1ef85e6 Dev temp file/cache cleanip 2026-03-29 23:43:16 -05:00
firestar5683 5a5de70303 Update carcontroller.py 2026-03-29 23:43:15 -05:00
firestar5683 032b00affb curve speed and paddle commands 2026-03-29 23:43:15 -05:00
firestar5683 e8cce63b7f fixes 2026-03-29 23:43:15 -05:00
firestar5683 a6721ca3af do not hide system critical alerts 2026-03-29 23:43:15 -05:00
firestar5683 da0be57e88 Revert "test ui crash"
This reverts commit 2dd436c40d.
2026-03-29 23:43:15 -05:00
firestar5683 9ed1fc74e8 delete duplicate 2026-03-29 23:43:14 -05:00
firestar5683 1bbee6c390 fix 2026-03-29 23:43:14 -05:00
firestar5683 0f52ad6a28 Update params.toml 2026-03-29 23:43:14 -05:00
firestar5683 b7d448e064 ./onroad 2026-03-29 23:43:14 -05:00
firestar5683 f5d0eee724 compile 2026-03-29 15:32:50 -05:00
firestar5683 ec152f73f2 fix sdgm volt 2026-03-29 14:48:44 -05:00
firestar5683 6640a403b7 fix sdgm sascm 2026-03-29 14:20:59 -05:00
firestar5683 9f7f893668 min 2026-03-29 13:56:03 -05:00
firestar5683 d2bb05b61c personality 2026-03-29 09:53:32 -05:00
firestar5683 d3316f29f4 coasting 2026-03-29 09:45:50 -05:00
firestar5683 d42dff9d93 high sped interp back 2026-03-29 09:36:28 -05:00
firestar5683 64a80a5d24 radar fix 2026-03-29 09:23:27 -05:00
firestarsdog 8efbee199f Ubuntu 25.10 Build Patch 2026-03-29 04:32:40 -04:00
firestar5683 c2572f50a4 galaxy 2026-03-28 23:03:51 -05:00
firestar5683 2f1bb550e9 Galaxy 2026-03-28 22:38:29 -05:00
firestar5683 2dd436c40d test ui crash 2026-03-28 19:10:57 -05:00
firestar5683 865fd4ce75 where is rockhopper 2026-03-28 18:54:17 -05:00
firestar5683 58504c5a0f My username was friar carl 2026-03-28 18:35:58 -05:00
firestar5683 0f70d061e8 Ya'll remember club penguin? 2026-03-28 18:35:57 -05:00
firestarsdog 82619bd7db openmeteo adapter 2026-03-28 12:50:33 -04:00
firestar5683 8fafa6e8d4 No Dev Blocking 2026-03-27 23:28:47 -05:00
firestar5683 d36b9402d9 Revert "test"
This reverts commit b00ffb9a2b.
2026-03-27 23:21:20 -05:00
firestar5683 b00ffb9a2b test 2026-03-27 23:10:56 -05:00
firestar5683 09929f2454 lateral tuning migration and dashcam mode 2026-03-27 22:00:10 -05:00
firestar5683 741131974c fix UI crash? 2026-03-27 19:29:01 -05:00
firestar5683 9bb2a6904e UI restart 2026-03-27 19:26:18 -05:00
firestar5683 f256e8ea02 galaxy lost labels 2026-03-27 19:15:48 -05:00
firestar5683 742517b619 fix dashcam footage in galaxy 2026-03-27 19:15:31 -05:00
firestar5683 1296483543 show all toggles 2026-03-27 19:03:01 -05:00
firestar5683 3d8af2361e Rename 2026-03-27 18:05:44 -05:00
firestar5683 ac4cec2e22 da crap 2026-03-27 16:32:13 -05:00
firestar5683 6f1abdfd54 ev tuning 2026-03-27 11:38:06 -05:00
firestar5683 40c0ae3c93 accel profiles 2026-03-27 11:29:46 -05:00
firestar5683 3fe8671e90 auto updates 2026-03-27 11:13:33 -05:00
firestar5683 ca92674263 torque bar color 2026-03-27 10:48:56 -05:00
firestar5683 60a3a81d7c lane changes 2026-03-27 10:43:35 -05:00
firestar5683 056dc6df4e patch 2026-03-27 02:35:39 -05:00
firestar5683 be38557680 no border when disabled 2026-03-27 01:41:28 -05:00
firestar5683 280e0d7e94 compile 2026-03-27 01:32:14 -05:00
firestar5683 0f4bae1c77 TOOLS 2026-03-27 01:26:49 -05:00
firestar5683 431d59d731 long 2026-03-27 01:26:49 -05:00
Michael Tawata 8f04ab44fe readme overhaul 2026-03-26 12:09:56 -05:00
firestar5683 cc9a0c643c Long? 2026-03-26 12:09:56 -05:00
firestar5683 1bcfb0518d Mici Model Switcher 2026-03-26 00:48:55 -05:00
firestar5683 c52280ea04 Revert "paddle"
This reverts commit 96b27b422c.
2026-03-25 22:36:43 -05:00
firestar5683 96b27b422c paddle 2026-03-25 22:24:13 -05:00
firestar5683 b47cad3bab Revert "paddle"
This reverts commit 2fb8526d01.
2026-03-25 22:18:05 -05:00
firestar5683 310d852cf3 no pedal long pitch 2026-03-25 22:11:40 -05:00
firestar5683 8b02280419 wheel themes 2026-03-25 21:53:36 -05:00
firestar5683 2fb8526d01 paddle 2026-03-25 21:50:09 -05:00
firestar5683 d3b1cc8e69 mici remember networks 2026-03-25 21:43:19 -05:00
firestar5683 4046360299 mici network manager / allow uploads / long pitch / cruise offset 2026-03-25 21:23:15 -05:00
firestar5683 6a639c8619 compile 2026-03-25 15:56:12 -05:00
firestar5683 e9100341fc a target limiter 2026-03-25 15:55:22 -05:00
firestar5683 efb9884039 Networking Pond 2026-03-25 15:55:14 -05:00
firestar5683 4b1dee2466 Paddle 2026-03-25 15:46:29 -05:00
firestar5683 3e31394aaa minsteerspeed 2026-03-25 14:06:05 -05:00
firestar5683 00b8eb2b20 Long changes 2026-03-25 13:04:41 -05:00
firestar5683 187eb34733 Revert "cruise set overshoot?"
This reverts commit c726bf2b98.
2026-03-25 09:13:28 -05:00
firestar5683 d070d6c395 cem 2026-03-25 09:13:07 -05:00
firestar5683 edbc7e9931 unscaled threshold? 2026-03-25 09:07:15 -05:00
firestar5683 38fc73efc7 compile 2026-03-25 08:58:15 -05:00
firestar5683 61a9a12753 gas scaling 2026-03-25 08:57:14 -05:00
firestar5683 c726bf2b98 cruise set overshoot? 2026-03-25 08:34:40 -05:00
firestar5683 78683b1228 paddle 2026-03-25 08:19:50 -05:00
firestar5683 22b4aabece try cancel 2026-03-24 22:52:57 -05:00
firestar5683 99c5294647 keep onboarding for mici 2026-03-24 22:32:33 -05:00
firestar5683 73d2c910eb compile 2026-03-24 22:32:33 -05:00
firestar5683 8e3753d55b Pedal tune 2026-03-24 22:32:33 -05:00
firestar5683 c82a1a3830 long planner 2026-03-24 22:32:33 -05:00
firestar5683 291f63391b 3d1 spoof 2026-03-24 22:32:32 -05:00
firestar5683 1a9e5cf364 raw params in model switcher 2026-03-24 19:57:49 -05:00
firestar5683 1b93b4f777 stale model files 2026-03-24 19:56:01 -05:00
firestar5683 623669c2b3 build 2026-03-24 18:03:25 -05:00
firestar5683 10948af7ac longitudinal parity: restore StarPilot lead tracking and accel behaviors 2026-03-24 17:55:06 -05:00
firestar5683 38a9eef286 mici wifi: fix connected status and saved SSID matching 2026-03-24 16:21:45 -05:00
firestar5683 8d83e0cdcd Backport Mici UI polish from SP-Dev-Dom (exclude wifi_manager) 2026-03-24 16:05:33 -05:00
firestar5683 948a4e1eb6 Compile 2026-03-24 15:53:15 -05:00
firestar5683 abe565deed ./models 2026-03-24 15:50:04 -05:00
firestar5683 2227ac8052 Bring back temporalPose path, mapd wrapper, and offroad-only backup behavior 2026-03-24 15:47:19 -05:00
firestar5683 076bda91a0 Don't go onroad til controls are allowed 2026-03-24 15:34:30 -05:00
firestar5683 68d1c3d362 Backport requested GM/monitoring/long/cruise fixes onto Dom 2026-03-24 15:27:59 -05:00
firestar5683 78aaa913e7 dm: sync new tinygrad driver monitoring stack from SP-Dev-Dom-fixed 2026-03-24 15:23:37 -05:00
firestar5683 7a499b5933 Revert "ui: port mici visual polish and Wi-Fi status updates"
This reverts commit d2819e5a04.
2026-03-24 14:40:34 -05:00
firestar5683 d2819e5a04 ui: port mici visual polish and Wi-Fi status updates
volt dbc

Don't go onroad til controls are allowed

Button Mici

Start of Day 3

./models

ui: keep mici toggle labels at a stable size

compile
2026-03-24 14:40:31 -05:00
firestar5683 77764bd345 opendbc: fix GM pedal RX checks and restore ASCM F1 safety coverage 2026-03-23 01:53:53 -05:00
firestar5683 4368dd368b opendbc: add Escalade ASCM support and drop GM dashcam gating 2026-03-23 01:53:27 -05:00
firestarsdog 003dfa8f8e Keeb 2026-03-23 01:44:29 -04:00
firestarsdog 4d5d48dbe8 Rays 2026-03-22 22:25:32 -05:00
firestar5683 8258b6db84 Monitoring left hand 2026-03-22 22:17:40 -05:00
firestarsdog e4a1c33f35 Sigh question marks... 2026-03-22 22:17:40 -05:00
firestar5683 0e57f230d7 day2 2026-03-22 22:17:40 -05:00
firestar5683 a35382505e Lock driver monitoring Side 2026-03-22 14:06:22 -05:00
firestar5683 7000063c41 stop cruise main drop? 2026-03-22 14:06:22 -05:00
firestar5683 d0e1db6766 StarPilot 2026-03-22 03:15:05 -05:00
James 0e9ef526f7 Fix? 2026-03-06 14:48:44 -07:00
James d242fd96d5 Move to FrogPilot API 2026-03-06 03:43:30 -07:00
James c5a332081d WMI model 2026-02-13 11:04:27 -07:00
James d358250853 Update mapd to v2 2026-02-13 11:04:26 -07:00
James 5e224f8c9a Fixes 2026-02-13 11:04:26 -07:00
James 88816b375a Disable the "DRIVING MODEL" panel 2026-02-13 00:21:39 -07:00
James bcab265c86 ZSS support
Co-Authored-By: Erich Moraga <33645296+erichmoraga@users.noreply.github.com>
2026-02-13 00:21:39 -07:00
James 8927c23a33 Weather condition offsets 2026-02-13 00:21:39 -07:00
James db9bcb2967 Vehicle fingerprint selection 2026-02-13 00:21:39 -07:00
James 59241611b8 Use Wheel Speed 2026-02-13 00:21:39 -07:00
James 562e79f348 Use "single_pedal_mode" with regen
Co-Authored-By: garrettpall <76917194+garrettpall@users.noreply.github.com>
2026-02-13 00:21:39 -07:00
James 8dd23a7aa2 Turn Desires 2026-02-13 00:21:39 -07:00
James 590649eaf2 Traffic Mode 2026-02-13 00:21:39 -07:00
James b9d0f979d2 "Stop-and-Go Hack" for Toyota/Lexus 2026-02-13 00:21:39 -07:00
James 495da78739 "Stop-and-Go Hack" for 2017 Chevy Volt
Co-Authored-By: Tim Wilson <7284371+twilsonco@users.noreply.github.com>
2026-02-13 00:21:39 -07:00
James 7f9430751c "Stop-and-Go" for Subaru
Co-Authored-By: martinl <148686+martinl@users.noreply.github.com>
2026-02-13 00:21:38 -07:00
James 912c5c2611 Standby Mode 2026-02-13 00:21:38 -07:00
James 67f3371b45 Speed Limit Filler 2026-02-13 00:21:38 -07:00
James 3721245e1d Speed Limit Controller
Co-Authored-By: eFini <16603033+efinilan@users.noreply.github.com>
Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
2026-02-13 00:21:38 -07:00
James f0444110c9 Sidebar Metrics 2026-02-13 00:21:38 -07:00
James 7919e10c10 Show Driver Camera When In Reverse 2026-02-13 00:21:38 -07:00
James 2f31c511f0 SDSU support 2026-02-13 00:21:38 -07:00
James e5b985f122 Screen Timeout 2026-02-13 00:21:38 -07:00
James cbf54aae3e Screen Recorder 2026-02-13 00:21:38 -07:00
James d7cb6b0ca2 Screen Brightness 2026-02-13 00:21:38 -07:00
James b5ad90fa64 Rotate the steering wheel icon 2026-02-13 00:21:38 -07:00
James 7ca4a582d5 Reverse cruise increase for Toyota/Lexus 2026-02-13 00:21:38 -07:00
James 2e9c26316e Retain the sidebar's position 2026-02-13 00:21:38 -07:00
James 81fbf42cd1 Retain network tethering 2026-02-13 00:21:38 -07:00
James fab2b745ac Report a Bug or an Issue 2026-02-13 00:21:38 -07:00
James 065b2f6356 Remove "dashcamOnly" flag check 2026-02-13 00:21:38 -07:00
James c31148f7f1 Random Themes 2026-02-13 00:21:37 -07:00
James cfb0d01ebd Random Events 2026-02-13 00:21:37 -07:00
James fec050a3c1 Rainbow Road™ 2026-02-13 00:21:37 -07:00
James 45a36222a4 Pause steering with an active turn signal 2026-02-13 00:21:37 -07:00
James f087ceff51 Pause Steering 2026-02-13 00:21:37 -07:00
James 39611ad6dd Pause Acceleration/Braking 2026-02-13 00:21:37 -07:00
James ae081bfd56 Path Edges 2026-02-13 00:21:37 -07:00
James 3a44c31bb0 Only one lane change per signal 2026-02-13 00:21:37 -07:00
James 211fa76107 Only change lanes when a lane is detected 2026-02-13 00:21:37 -07:00
James ada1fe0817 Only change driving personality if the menu is open (GM only) 2026-02-13 00:21:37 -07:00
James 024e1a77e2 Offset Set Speed
Co-Authored-By: Tim Wilson <7284371+twilsonco@users.noreply.github.com>
2026-02-13 00:21:37 -07:00
James a8122c8f05 Offline maps
Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
2026-02-13 00:21:37 -07:00
James 83d1156bb4 Nudgeless lane changes delay
Update desire_helper.py
2026-02-13 00:21:37 -07:00
James 6141b5f2c1 Nudgeless lane changes 2026-02-13 00:21:37 -07:00
James b0af0289e9 Neural Network FeedForward (NNFF)
Co-Authored-By: Tim Wilson <7284371+twilsonco@users.noreply.github.com>
2026-02-13 00:21:36 -07:00
James e1de171de0 Model Manager 2026-02-13 00:21:36 -07:00
James dc54347f93 Mazda has blind spot monitoring
Co-Authored-By: bigboigahoy <49489685+bigboigahoy@users.noreply.github.com>
2026-02-13 00:21:36 -07:00
James 6c4addf05d Maximum Acceleration 2026-02-13 00:21:36 -07:00
James 7ab5f0c436 Low-Voltage Cutoff 2026-02-13 00:21:36 -07:00
James 81a7d571e6 Loud "Car Detected in Blindspot" Alert 2026-02-13 00:21:36 -07:00
James e57691a9b5 Lock doors when shifting out of park for Toyota/Lexus
Co-Authored-By: Alexandre Nobuharu Sato <66435071+alexandresato@users.noreply.github.com>
2026-02-13 00:21:36 -07:00
James e56294cc94 Lock doors after ignition off for Toyota/Lexus 2026-02-13 00:21:36 -07:00
James 91ce962e7c Lead Info 2026-02-13 00:21:36 -07:00
James af4e8a5ede Lead detection sensitivity 2026-02-13 00:21:36 -07:00
James 40b5e24b1b Lead Departing Alert 2026-02-13 00:21:36 -07:00
James dd47d0f413 Lane Detection 2026-02-13 00:21:36 -07:00
James 518da86590 Konik.ai server support
Co-Authored-By: MoreTorque <104254025+moretore@users.noreply.github.com>
2026-02-13 00:21:36 -07:00
James cc73376f75 Increase Temperature Limits 2026-02-13 00:21:35 -07:00
James 3e32a6a910 Increase Stopped Distance 2026-02-13 00:21:35 -07:00
James a52821e983 Increase steering torque for Subaru Impreza 2026-02-13 00:21:35 -07:00
James 1e21fe4acc Increase steering torque for "Global Gen2" Subaru 2026-02-13 00:21:35 -07:00
James 90883515fb Human-Like Lane Changes 2026-02-13 00:21:35 -07:00
James 68cd686b55 Human-Like Following 2026-02-13 00:21:35 -07:00
James f930a2a3a5 Human-Like Acceleration 2026-02-13 00:21:35 -07:00
James e0c1f3ec06 Hyundai Ioniq 6 has blind spot monitoring 2026-02-13 00:21:35 -07:00
James 4baa067d45 Holiday Themes 2026-02-13 00:21:35 -07:00
James 4f832f618e High-Quality Recordings 2026-02-13 00:21:34 -07:00
James 328d370ffb Hide Max Speed 2026-02-13 00:21:34 -07:00
James 8864f86b02 Hide Lead Marker 2026-02-13 00:21:34 -07:00
James ade0308007 Hide Current Speed 2026-02-13 00:21:34 -07:00
James 9861e6c630 Hide Alerts 2026-02-13 00:21:34 -07:00
James 48b3e1ee35 Green Light Alert 2026-02-13 00:21:34 -07:00
James 40c4e6dfcd Gracefully catch "set_core_affinity" errors 2026-02-13 00:21:34 -07:00
James be969678d0 Goat Scream 2026-02-13 00:21:34 -07:00
James 564633d0f6 Generate a fake "DongleID" for unofficial devices 2026-02-13 00:21:34 -07:00
James 823bc19e36 Gas / Brake Pedal Indicators 2026-02-13 00:21:34 -07:00
James 3955b1f70f FrogsGoMoo's personal tweaks for Toyota/Lexus 2026-02-13 00:21:34 -07:00
James b8d3d1e9cc Force Torque Controller 2026-02-13 00:21:34 -07:00
James 6efda62e23 Force Stop at "Detected" Stop Lights/Signs 2026-02-13 00:21:34 -07:00
James ae2009c207 Force openpilot to Coast 2026-02-13 00:21:34 -07:00
James 59272ea85c Force Drive State 2026-02-13 00:21:34 -07:00
James a27b1a5e6a Force Auto-Tune On 2026-02-13 00:21:34 -07:00
James e1f0b77910 Force Auto-Tune Off 2026-02-13 00:21:34 -07:00
James 6fe2973c3e Flash Panda 2026-02-13 00:21:33 -07:00
James 99e013e233 Far/radar only lead detection 2026-02-13 00:21:33 -07:00
James 4b57104d3e Extend the model UI projection 2026-02-13 00:21:33 -07:00
James a05c7b8f80 Error logs 2026-02-13 00:21:33 -07:00
James ab487baf0e Dynamic Path Width 2026-02-13 00:21:33 -07:00
James e5b7832be6 Driving Personality Button 2026-02-13 00:21:33 -07:00
James 7ba746e286 Drive Summary 2026-02-13 00:21:33 -07:00
James 0ed15a14ce Download prompt when switching branches 2026-02-13 00:21:33 -07:00
James e78b2760ca Display the turn signal/blind spot status in the screen's border 2026-02-13 00:21:33 -07:00
James 5075da5ac4 Display the steering torque in the screen's border 2026-02-13 00:21:33 -07:00
James 3cf04eb9cc Display the radar's track points 2026-02-13 00:21:33 -07:00
James 6a28fb4ada Display the model's stopping point 2026-02-13 00:21:33 -07:00
James 18fe10322b Display the FPS in the screen's border 2026-02-13 00:21:33 -07:00
James 0c6b96d9cd Display the current standstill time 2026-02-13 00:21:33 -07:00
James 6ab4df3197 Display the current road's name 2026-02-13 00:21:33 -07:00
James 999af5d1fb Disable Uploads 2026-02-13 00:21:32 -07:00
James b7db0c72ec Disable openpilot longitudinal 2026-02-13 00:21:32 -07:00
James d2da2e8a07 Disable Logging 2026-02-13 00:21:32 -07:00
James 93e5714330 Disable lane changes 2026-02-13 00:21:32 -07:00
James 3c4d22f8e6 Disable internet connectivity checks 2026-02-13 00:21:32 -07:00
James aa921a3996 Device Shutdown Timer 2026-02-13 00:21:32 -07:00
James 05029c814c Developer Sidebar 2026-02-13 00:21:32 -07:00
James 828728848c Detect if the driver is still in the car 2026-02-13 00:21:32 -07:00
James 3da8c27cc9 "Delete Driving Data" button 2026-02-13 00:21:32 -07:00
James c08c17ce66 Decimate "Torque Estimator" if not previously calibrated 2026-02-13 00:21:32 -07:00
James 583680d871 Debug Mode 2026-02-13 00:21:32 -07:00
James 2eff30c2b2 Date and version in home screen 2026-02-13 00:21:32 -07:00
James 42daa20b82 Custom "wrong_car_mode_alert" message for CC only cars 2026-02-13 00:21:32 -07:00
James ebc5be3eb5 Custom "vEgoCluster" offset for Toyota/Lexus 2026-02-13 00:21:32 -07:00
James 04f59c55d8 Custom Themes 2026-02-13 00:21:32 -07:00
James 06df794db2 Custom steering wheel button functions 2026-02-13 00:21:32 -07:00
James 461de7d0c0 Custom Model UI 2026-02-13 00:21:32 -07:00
James 3c77fb947b Custom minimum lane change speed 2026-02-13 00:21:31 -07:00
James 70a7318a3a Curve Speed Controller
Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
2026-02-13 00:21:31 -07:00
James 6797e70f7e Cruise Interval 2026-02-13 00:21:31 -07:00
James 45ddd10358 Configure "Nissan Leaf 2018-23 - Instrument Cluster" 2026-02-13 00:21:31 -07:00
James 68b60b3635 Conditional Experimental Mode 2026-02-13 00:21:31 -07:00
James 7388432fb9 Compass 2026-02-13 00:21:31 -07:00
Adeeb Shihadeh 186c1a17f3 comma's steering speed hack from their 2022 Taco Bell Run
https://github.com/commaai/openpilot/commit/1801a14f85c93b3e1c461ddc5c552523bc8baffa
2026-02-13 00:21:31 -07:00
James f25cb9bd7c Chevrolet TRAX 2024
Co-Authored-By: darkerthan-black <40709016+darkerthan-black@users.noreply.github.com>
2026-02-13 00:21:31 -07:00
James 2f86ec9b1e Change the steering wheel icon's background color 2026-02-13 00:21:31 -07:00
James 2d426739d7 Camera view selection 2026-02-13 00:21:31 -07:00
James b2d94a9f0d Block users from using development branches 2026-02-13 00:21:31 -07:00
James ffd7259193 Blind spot path 2026-02-13 00:21:31 -07:00
James a5bd0d082e "Back" button in settings menu 2026-02-13 00:21:31 -07:00
James 48e1f14229 Automatic updates 2026-02-13 00:21:31 -07:00
James 5cdc5b7991 Automatic translations 2026-02-13 00:21:31 -07:00
James 3832c73da9 Automatic backups 2026-02-13 00:21:31 -07:00
James e97b9aca53 Always On Lateral
Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
2026-02-13 00:21:30 -07:00
James 19246a8de0 Always allow "openpilot Longitudinal Control (Alpha)" 2026-02-13 00:21:30 -07:00
James 0a1c363661 Always allow branch switching 2026-02-13 00:21:30 -07:00
James 4b5c59d32c Alert Volume Controller 2026-02-13 00:21:30 -07:00
James 65c768cff0 Advanced longitudinal tuning 2026-02-13 00:21:30 -07:00
James 031e3fa609 Advanced lateral tuning 2026-02-13 00:21:30 -07:00
James 26f33e546e Adjacent leads tracking 2026-02-13 00:21:30 -07:00
James 94e4cc5c7c Add community DBC imports 2026-02-13 00:21:30 -07:00
James 74138472b7 Add back "set_timezone" 2026-02-13 00:21:29 -07:00
James 3ca3cb3312 Acceleration Path 2026-02-13 00:21:29 -07:00
James cc612ebd03 Acceleration/Deceleration Profiles 2026-02-13 00:21:29 -07:00
James ab8c4dea61 FrogPilot workflows 2026-02-13 00:21:29 -07:00
James f549233611 FrogPilot variables 2026-02-13 00:21:29 -07:00
James 2f00fc348d FrogPilot utilities 2026-02-13 00:21:28 -07:00
James 95583fb304 FrogPilot tracking 2026-02-13 00:21:26 -07:00
James b0c62707ad FrogPilot structs 2026-02-13 00:21:26 -07:00
James c2406d9c29 FrogPilot Sentry reporting 2026-02-13 00:21:26 -07:00
James 7218d74ec5 FrogPilot release/tested branches 2026-02-13 00:21:26 -07:00
James 87d5574e7a FrogPilot README 2026-02-13 00:21:26 -07:00
James e2cd1568e6 FrogPilot param functions 2026-02-13 00:21:26 -07:00
James b9f00dd14c FrogPilot panel 2026-02-13 00:20:57 -07:00
James ef16012768 FrogPilot languages
Co-Authored-By: Chechulin Serhii <78239416+keefeere@users.noreply.github.com>
2026-02-13 00:20:57 -07:00
James 17a81ac769 FrogPilot conversions 2026-02-13 00:20:57 -07:00
James e49978beff FrogPilot branding 2026-02-13 00:20:57 -07:00
James 1b590b15d6 FrogPilot base 2026-02-13 00:20:56 -07:00
Vincent Wright ff862a5f77 RealFast v0.10.3 release
https://github.com/realfast/openpilot
2026-01-12 12:33:47 -07:00
Eric Brown fb428dfcbf OPGM v0.10.3 release
https://github.com/opgm/openpilot
2026-01-12 12:33:47 -07:00
Vehicle Researcher 33d5cfc393 openpilot v0.10.3 release
date: 2025-12-18T23:23:16
master commit: 3cdee7b54718ee14bd85befd6c5bad3d699c5479
2025-12-18 23:23:21 -08:00
6813 changed files with 1584698 additions and 135838 deletions
+9
View File
@@ -0,0 +1,9 @@
{
"permissions": {
"allow": [
"Bash(python3 -c \"import json; json.load\\(open\\(r'c:\\\\Users\\\\user\\\\Documents\\\\GitHub\\\\openpilot\\\\starpilot\\\\system\\\\the_pond\\\\assets\\\\components\\\\tools\\\\device_settings_layout.json'\\)\\)\")",
"Bash(python3 -m py_compile \"c:\\\\Users\\\\user\\\\Documents\\\\GitHub\\\\openpilot\\\\starpilot\\\\controls\\\\lib\\\\starpilot_vcruise.py\")",
"Bash(python3 -m py_compile \"c:\\\\Users\\\\user\\\\Documents\\\\GitHub\\\\openpilot\\\\selfdrive\\\\ui\\\\layouts\\\\settings\\\\starpilot\\\\longitudinal.py\")"
]
}
}
+18
View File
@@ -0,0 +1,18 @@
**/.git
.DS_Store
*.dylib
*.DSYM
*.d
*.pyc
*.pyo
.*.swp
.*.swo
.*.un~
*.tmp
*.o
*.o-*
*.os
*.os-*
venv/
.venv/
+11
View File
@@ -0,0 +1,11 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{py,pyx,pxd}]
charset = utf-8
indent_style = space
indent_size = 2
+6
View File
@@ -0,0 +1,6 @@
github: firestar5683
patreon: firestar4430
custom:
- "https://cash.app/$domkthompson"
- "https://account.venmo.com/u/firestar4430"
- "https://www.paypal.com/paypalme/firestar4430"
+47
View File
@@ -0,0 +1,47 @@
name: Bug report
description: For issues with running openpilot on your comma device
labels: ["bug"]
body:
- type: markdown
attributes:
value: >
Before creating a **bug report**, please check the following:
* If the issue likely only affects your car model or make, go back and open a **car bug report** instead.
* If the issue is related to the driving or driver monitoring models, you should open a [discussion](https://github.com/commaai/openpilot/discussions/categories/model-feedback) instead.
* Ensure you're running the latest openpilot release.
* Ensure you're using officially supported hardware. Issues running on PCs have a different issue template.
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
* Ensure you're running stock openpilot. We cannot look into bug reports from forks.
If you're unsure whether you've hit a bug, check out the #installation-help channel in the [community Discord server](https://discord.comma.ai).
- type: textarea
attributes:
label: Describe the bug
description: Also include a description of how to reproduce the bug
validations:
required: true
- type: input
id: route
attributes:
label: Provide a route where the issue occurs
description: Ensure the route is fully uploaded at https://useradmin.comma.ai. We cannot look into issues without routes, or at least a Dongle ID.
placeholder: 77611a1fac303767|2020-05-11--16-37-07
validations:
required: true
- type: input
id: version
attributes:
label: openpilot version
description: If you're not on release, provide the commit hash
placeholder: 0.8.10
validations:
required: true
- type: textarea
attributes:
label: Additional info
+14
View File
@@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: Car bug report
url: https://github.com/commaai/opendbc/issues/new
about: For issues with a particular car make or model
- name: Join the Discord
url: https://discord.comma.ai
about: The community Discord is for both openpilot development and experience discussion
- name: Report driving behavior feedback
url: https://discord.com/channels/469524606043160576/1254834193066623017
about: Feedback for the driving and driver monitoring models goes in the #driving-feedback in Discord
- name: Community Wiki
url: https://github.com/commaai/openpilot/wiki
about: Check out our community wiki
+8
View File
@@ -0,0 +1,8 @@
---
name: Enhancement
about: For openpilot enhancement suggestions
title: ''
labels: 'enhancement'
assignees: ''
---
+42
View File
@@ -0,0 +1,42 @@
name: PC bug report
description: For issues with running openpilot on PC
labels: ["PC"]
body:
- type: markdown
attributes:
value: >
Before creating a **bug report**, please check the following:
* Ensure you're running the latest openpilot release.
* Ensure there isn't an existing issue for your bug. If there is, leave a comment on the existing issue.
* Ensure you're running stock openpilot. We cannot look into bug reports from forks.
If you're unsure whether you've hit a bug, check out the #installation-help channel in the [community Discord server](https://discord.comma.ai).
- type: textarea
attributes:
label: Describe the bug
description: Also include a description of how to reproduce the bug
validations:
required: true
- type: input
id: os-version
attributes:
label: OS Version
placeholder: Ubuntu 24.04
validations:
required: true
- type: input
id: version
attributes:
label: openpilot version or commit
placeholder: bd36f2ec8d3559909678eff2690c10a520938367
validations:
required: false
- type: textarea
attributes:
label: Additional info
+27
View File
@@ -0,0 +1,27 @@
CI / testing:
- changed-files:
- any-glob-to-all-files: "{.github/**,**/test_*,**/test/**,Jenkinsfile}"
car:
- changed-files:
- any-glob-to-all-files: '{selfdrive/car/**,opendbc_repo}'
simulation:
- changed-files:
- any-glob-to-all-files: 'tools/sim/**'
ui:
- changed-files:
- any-glob-to-all-files: '{selfdrive/assets/**,selfdrive/ui/**,system/ui/**}'
tools:
- changed-files:
- any-glob-to-all-files: 'tools/**'
multilanguage:
- changed-files:
- any-glob-to-all-files: 'selfdrive/ui/translations/**'
autonomy:
- changed-files:
- any-glob-to-all-files: "{selfdrive/modeld/models/**,selfdrive/test/process_replay/model_replay_ref_commit}"
+68
View File
@@ -0,0 +1,68 @@
<!-- Please copy and paste the relevant template -->
<!--- ***** Template: Fingerprint *****
**Car**
Which car (make, model, year) this fingerprint is for
**Route**
A route with the fingerprint
-->
<!--- ***** Template: Car Bugfix *****
**Description**
A description of the bug and the fix. Also link the issue if it exists.
**Verification**
Explain how you tested this bug fix.
**Route**
Route: [a route with the bug fix]
-->
<!--- ***** Template: Bugfix *****
**Description**
A description of the bug and the fix. Also link the issue if it exists.
**Verification**
Explain how you tested this bug fix.
-->
<!--- ***** Template: Car Port *****
**Checklist**
- [ ] added entry to CAR in selfdrive/car/*/values.py and ran `selfdrive/car/docs.py` to generate new docs
- [ ] test route added to [routes.py](https://github.com/commaai/openpilot/blob/master/selfdrive/car/tests/routes.py)
- [ ] route with openpilot:
- [ ] route with stock system:
- [ ] car harness used (if comma doesn't sell it, put N/A):
-->
<!--- ***** Template: Refactor *****
**Description**
A description of the refactor, including the goals it accomplishes.
**Verification**
Explain how you tested the refactor for regressions.
-->
+58
View File
@@ -0,0 +1,58 @@
name: 'automatically cache based on current runner'
inputs:
path:
description: 'path to cache'
required: true
key:
description: 'key'
required: true
restore-keys:
description: 'restore-keys'
required: true
save:
description: 'whether to save the cache'
default: 'true'
required: false
outputs:
cache-hit:
description: 'cache hit occurred'
value: ${{ (contains(runner.name, 'nsc') && steps.ns-cache.outputs.cache-hit) ||
(!contains(runner.name, 'nsc') && inputs.save != 'false' && steps.gha-cache.outputs.cache-hit) ||
(!contains(runner.name, 'nsc') && inputs.save == 'false' && steps.gha-cache-ro.outputs.cache-hit) }}
runs:
using: "composite"
steps:
- name: setup namespace cache
id: ns-cache
if: ${{ contains(runner.name, 'nsc') }}
uses: namespacelabs/nscloud-cache-action@v1
with:
path: ${{ inputs.path }}
- name: setup github cache
id: gha-cache
if: ${{ !contains(runner.name, 'nsc') && inputs.save != 'false' }}
uses: 'actions/cache@v5'
with:
path: ${{ inputs.path }}
key: ${{ inputs.key }}
restore-keys: ${{ inputs.restore-keys }}
- name: setup github cache
id: gha-cache-ro
if: ${{ !contains(runner.name, 'nsc') && inputs.save == 'false' }}
uses: 'actions/cache/restore@v5'
with:
path: ${{ inputs.path }}
key: ${{ inputs.key }}
restore-keys: ${{ inputs.restore-keys }}
# make the directory manually in case we didn't get a hit, so it doesn't fail on future steps
- id: scons-cache-setup
shell: bash
run: |
mkdir -p ${{ inputs.path }}
sudo chmod -R 777 ${{ inputs.path }}
sudo chown -R $USER ${{ inputs.path }}
@@ -0,0 +1,21 @@
name: 'compile openpilot'
runs:
using: "composite"
steps:
- shell: bash
name: Build openpilot with all flags
run: |
${{ env.RUN }} "scons -j$(nproc)"
${{ env.RUN }} "release/check-dirty.sh"
- shell: bash
name: Cleanup scons cache and rebuild
run: |
${{ env.RUN }} "rm -rf /tmp/scons_cache/* && \
scons -j$(nproc) --cache-populate"
- name: Save scons cache
uses: actions/cache/save@v5
if: github.ref == 'refs/heads/master'
with:
path: .ci_cache/scons_cache
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
+209
View File
@@ -0,0 +1,209 @@
name: Compile Bluescreens
on:
workflow_dispatch:
inputs:
target_ref:
description: "Branch to build and publish back to"
type: string
default: "bluescreensonly2"
required: true
jobs:
description: "Optional parallel job count passed to ./build"
type: string
default: "12"
required: false
enable_scons_cache:
description: "Enable SCons cache for faster incremental builds"
type: boolean
default: true
required: false
build_all:
description: "Build everything"
type: boolean
default: true
required: false
build_params:
description: "Build params Python extension"
type: boolean
default: false
required: false
build_cereal:
description: "Build cereal messaging bridge"
type: boolean
default: false
required: false
build_panda:
description: "Build panda firmware outputs"
type: boolean
default: true
required: false
build_modeld:
description: "Build modeld Python extension"
type: boolean
default: false
required: false
build_controls:
description: "Build controls solvers + locationd generated models"
type: boolean
default: false
required: false
concurrency:
group: compile-bluescreens-${{ inputs.target_ref }}
cancel-in-progress: false
permissions:
contents: write
env:
GIT_EMAIL: "168790843+firestar5683@users.noreply.github.com"
GIT_NAME: "StarPilot Build Bot"
TARGET_REF: ${{ inputs.target_ref }}
jobs:
build_and_push:
runs-on: [self-hosted, truenas, starpilot-build]
timeout-minutes: 720
steps:
- name: Validate target branch
shell: bash
run: |
set -euo pipefail
if [[ -z "${TARGET_REF}" ]]; then
echo "target_ref is required." >&2
exit 1
fi
if [[ "${TARGET_REF}" == refs/heads/* ]]; then
echo "BUILD_BRANCH=${TARGET_REF#refs/heads/}" >> "$GITHUB_ENV"
else
echo "BUILD_BRANCH=${TARGET_REF}" >> "$GITHUB_ENV"
fi
- name: Checkout target branch
uses: actions/checkout@v6
with:
ref: ${{ env.BUILD_BRANCH }}
fetch-depth: 0
submodules: recursive
- name: Configure git identity
shell: bash
run: |
set -euo pipefail
git config user.name "$GIT_NAME"
git config user.email "$GIT_EMAIL"
git config http.postBuffer 104857600
- name: Ensure branch exists on origin
shell: bash
run: |
set -euo pipefail
git ls-remote --exit-code --heads origin "refs/heads/${BUILD_BRANCH}" >/dev/null
- name: Link persistent sysroot
shell: bash
run: |
set -euo pipefail
ls -ld /runner /runner/sysroots /runner/sysroots/default || true
ls -ld /runner/sysroots/default/usr /runner/sysroots/default/usr/local /runner/sysroots/default/usr/local/lib || true
rm -rf .comma_sysroot
ln -s /runner/sysroots/default .comma_sysroot
ls -ld .comma_sysroot .comma_sysroot/usr .comma_sysroot/usr/local .comma_sysroot/usr/local/lib
- name: Run Bluescreens build
shell: bash
env:
SP_ENABLE_SCONS_CACHE: ${{ inputs.enable_scons_cache && '1' || '0' }}
run: |
set -euo pipefail
RUNNER_HOST_ROOT="/mnt/Apparition/My_App_Data/starpilot-runner"
if [[ "${GITHUB_WORKSPACE}" != /runner/_work/* ]]; then
echo "Unexpected GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}" >&2
exit 1
fi
WORKSPACE_REL="${GITHUB_WORKSPACE#/runner}"
export COMMA_HOST_ROOT_DIR="${RUNNER_HOST_ROOT}${WORKSPACE_REL}"
export COMMA_HOST_SYSROOT_DIR="${RUNNER_HOST_ROOT}/sysroots/default"
export COMMA_HOST_CACHE_DIR="${RUNNER_HOST_ROOT}/cache/work"
export COMMA_HOST_VENV_DIR="${RUNNER_HOST_ROOT}/cache/venv-linux-arm64"
export COMMA_SYSROOT_DIR="/runner/sysroots/default"
echo "GITHUB_WORKSPACE=${GITHUB_WORKSPACE}"
echo "COMMA_HOST_ROOT_DIR=${COMMA_HOST_ROOT_DIR}"
echo "COMMA_HOST_SYSROOT_DIR=${COMMA_HOST_SYSROOT_DIR}"
echo "COMMA_HOST_CACHE_DIR=${COMMA_HOST_CACHE_DIR}"
echo "COMMA_HOST_VENV_DIR=${COMMA_HOST_VENV_DIR}"
JOBS="${{ inputs.jobs }}"
if [[ "${{ inputs.build_all }}" == "true" ]]; then
if [[ -n "${JOBS}" ]]; then
./build "${JOBS}"
else
./build
fi
exit 0
fi
TARGETS=()
[[ "${{ inputs.build_params }}" == "true" ]] && TARGETS+=("common/params_pyx.so")
[[ "${{ inputs.build_cereal }}" == "true" ]] && TARGETS+=("cereal/messaging/bridge")
if [[ "${{ inputs.build_panda }}" == "true" ]]; then
TARGETS+=(
"panda/board/obj/panda.bin.signed"
"panda/board/obj/panda_h7.bin.signed"
"panda/board/obj/panda_remote.bin.signed"
"panda/board/obj/panda_h7_remote.bin.signed"
"panda/board/obj/panda_can_ignition_only.bin.signed"
"panda/board/obj/panda_h7_can_ignition_only.bin.signed"
"panda/board/obj/panda_remote_can_ignition_only.bin.signed"
"panda/board/obj/panda_h7_remote_can_ignition_only.bin.signed"
"panda/board/obj/panda_jungle_h7.bin.signed"
"panda/board/obj/body_h7.bin.signed"
)
fi
[[ "${{ inputs.build_modeld }}" == "true" ]] && TARGETS+=("selfdrive/modeld/models/commonmodel_pyx.so")
if [[ "${{ inputs.build_controls }}" == "true" ]]; then
TARGETS+=(
"selfdrive/controls/lib/lateral_mpc_lib/c_generated_code/libacados_ocp_solver_lat.so"
"selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code/libacados_ocp_solver_long.so"
"selfdrive/locationd/models/generated/car.cpp"
"selfdrive/locationd/models/generated/pose.cpp"
)
fi
if [[ ${#TARGETS[@]} -eq 0 ]]; then
echo "No partial targets selected; defaulting to panda"
TARGETS=("panda/board/obj/panda.bin.signed")
fi
echo "Running partial build for targets: ${TARGETS[*]}"
if [[ -n "${JOBS}" ]]; then
./build "${JOBS}" "${TARGETS[@]}"
else
./build "$(nproc)" "${TARGETS[@]}"
fi
- name: Commit build output
shell: bash
run: |
set -euo pipefail
if [[ -z "$(git status --porcelain --untracked-files=no)" ]]; then
echo "No build output changes detected."
exit 0
fi
git add -u
git commit -m "build"
- name: Push build commit
shell: bash
run: |
set -euo pipefail
git push origin "HEAD:refs/heads/${BUILD_BRANCH}"
+115
View File
@@ -0,0 +1,115 @@
name: Compile StarPilot
on:
workflow_dispatch:
inputs:
target_ref:
description: "Branch to build and publish back to"
type: string
default: "master"
required: true
jobs:
description: "Optional parallel job count passed to ./build"
type: string
default: "12"
required: false
concurrency:
group: compile-starpilot-${{ inputs.target_ref }}
cancel-in-progress: false
permissions:
contents: write
env:
GIT_EMAIL: "168790843+firestar5683@users.noreply.github.com"
GIT_NAME: "StarPilot Build Bot"
TARGET_REF: ${{ inputs.target_ref }}
jobs:
build_and_push:
runs-on: [self-hosted, truenas, starpilot-build]
timeout-minutes: 720
steps:
- name: Validate target branch
shell: bash
run: |
set -euo pipefail
if [[ -z "${TARGET_REF}" ]]; then
echo "target_ref is required." >&2
exit 1
fi
if [[ "${TARGET_REF}" == refs/heads/* ]]; then
echo "BUILD_BRANCH=${TARGET_REF#refs/heads/}" >> "$GITHUB_ENV"
else
echo "BUILD_BRANCH=${TARGET_REF}" >> "$GITHUB_ENV"
fi
- name: Checkout target branch
uses: actions/checkout@v6
with:
ref: ${{ env.BUILD_BRANCH }}
fetch-depth: 0
submodules: recursive
- name: Configure git identity
shell: bash
run: |
set -euo pipefail
git config user.name "$GIT_NAME"
git config user.email "$GIT_EMAIL"
git config http.postBuffer 104857600
- name: Ensure branch exists on origin
shell: bash
run: |
set -euo pipefail
git ls-remote --exit-code --heads origin "refs/heads/${BUILD_BRANCH}" >/dev/null
- name: Link persistent sysroot
shell: bash
run: |
set -euo pipefail
ls -ld /runner /runner/sysroots /runner/sysroots/default || true
ls -ld /runner/sysroots/default/usr /runner/sysroots/default/usr/local /runner/sysroots/default/usr/local/lib || true
rm -rf .comma_sysroot
ln -s /runner/sysroots/default .comma_sysroot
ls -ld .comma_sysroot .comma_sysroot/usr .comma_sysroot/usr/local .comma_sysroot/usr/local/lib
- name: Run StarPilot device build
shell: bash
run: |
set -euo pipefail
export COMMA_HOST_ROOT_DIR="/mnt/Apparition/My_App_Data/starpilot-runner/_work/${GITHUB_REPOSITORY#*/}/${GITHUB_REPOSITORY#*/}"
export COMMA_HOST_SYSROOT_DIR="/mnt/Apparition/My_App_Data/starpilot-runner/sysroots/default"
export COMMA_HOST_CACHE_DIR="/mnt/Apparition/My_App_Data/starpilot-runner/cache/work"
export COMMA_HOST_VENV_DIR="/mnt/Apparition/My_App_Data/starpilot-runner/cache/venv-linux-arm64"
export COMMA_SYSROOT_DIR="/runner/sysroots/default"
if [[ -n "${{ inputs.jobs }}" ]]; then
./build "${{ inputs.jobs }}"
else
./build
fi
- name: Commit build output
shell: bash
run: |
set -euo pipefail
if [[ -z "$(git status --porcelain --untracked-files=no)" ]]; then
echo "No build output changes detected."
exit 0
fi
git add -u
git commit -m "build"
- name: Push build commit
shell: bash
run: |
set -euo pipefail
git push origin "HEAD:refs/heads/${BUILD_BRANCH}"
@@ -0,0 +1,35 @@
name: Publish TrueNAS Runner Image
on:
workflow_dispatch:
inputs:
image_tag:
description: "Container tag to publish to GHCR"
type: string
default: "latest"
required: true
permissions:
contents: read
packages: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Log in to GHCR
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push runner image
uses: docker/build-push-action@v7
with:
context: .
file: tools/truenas_github_runner/Dockerfile
push: true
tags: ghcr.io/${{ github.repository_owner }}/starpilot-truenas-runner:${{ inputs.image_tag }}
@@ -0,0 +1,52 @@
name: 'openpilot env setup, with retry on failure'
inputs:
docker_hub_pat:
description: 'Auth token for Docker Hub, required for BuildJet jobs'
required: false
default: ''
sleep_time:
description: 'Time to sleep between retries'
required: false
default: 30
outputs:
duration:
description: 'Duration of the setup process in seconds'
value: ${{ steps.get_duration.outputs.duration }}
runs:
using: "composite"
steps:
- id: start_time
shell: bash
run: echo "START_TIME=$(date +%s)" >> $GITHUB_ENV
- id: setup1
uses: ./.github/workflows/setup
continue-on-error: true
with:
is_retried: true
- if: steps.setup1.outcome == 'failure'
shell: bash
run: sleep ${{ inputs.sleep_time }}
- id: setup2
if: steps.setup1.outcome == 'failure'
uses: ./.github/workflows/setup
continue-on-error: true
with:
is_retried: true
- if: steps.setup2.outcome == 'failure'
shell: bash
run: sleep ${{ inputs.sleep_time }}
- id: setup3
if: steps.setup2.outcome == 'failure'
uses: ./.github/workflows/setup
with:
is_retried: true
- id: get_duration
shell: bash
run: |
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "Total duration: $DURATION seconds"
echo "duration=$DURATION" >> $GITHUB_OUTPUT
+56
View File
@@ -0,0 +1,56 @@
name: 'openpilot env setup'
inputs:
is_retried:
description: 'A mock param that asserts that we use the setup-with-retry instead of this action directly'
required: false
default: 'false'
runs:
using: "composite"
steps:
# assert that this action is retried using the setup-with-retry
- shell: bash
if: ${{ inputs.is_retried == 'false' }}
run: |
echo "You should not run this action directly. Use setup-with-retry instead"
exit 1
- shell: bash
name: No retries!
run: |
if [ "${{ github.run_attempt }}" -gt 1 ]; then
echo -e "\033[0;31m##################################################"
echo -e "\033[0;31m Retries not allowed! Fix the flaky test! "
echo -e "\033[0;31m##################################################\033[0m"
exit 1
fi
# do this after checkout to ensure our custom LFS config is used to pull from GitLab
- shell: bash
run: git lfs pull
# build cache
- id: date
shell: bash
run: echo "CACHE_COMMIT_DATE=$(git log -1 --pretty='format:%cd' --date=format:'%Y-%m-%d-%H:%M')" >> $GITHUB_ENV
- shell: bash
run: echo "$CACHE_COMMIT_DATE"
- id: scons-cache
uses: ./.github/workflows/auto-cache
with:
path: .ci_cache/scons_cache
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
restore-keys: |
scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}
scons-${{ runner.arch }}
# as suggested here: https://github.com/moby/moby/issues/32816#issuecomment-910030001
- id: normalize-file-permissions
shell: bash
name: Normalize file permissions to ensure a consistent docker build cache
run: |
find . -type f -executable -not -perm 755 -exec chmod 755 {} \;
find . -type f -not -executable -not -perm 644 -exec chmod 644 {} \;
# build our docker image
- shell: bash
run: eval ${{ env.BUILD }}
+112 -7
View File
@@ -1,9 +1,28 @@
venv/
.venv/
.ci_cache
.env
.clang-format
.DS_Store
.tags
.ipynb_checkpoints
.idea
model2.png
.overlay_init
.overlay_consistent
.sconsign.dblite
a.out
.hypothesis
.cache/
.host_runtime/
.comma_sysroot/
.venv-linux-arm64/
compiledmodels/
/docs_site/
*.mp4
!docs/assets/speed-limit-vision-demo*.mp4
*.dylib
*.DSYM
*.d
*.pyc
@@ -11,20 +30,106 @@ model2.png
.*.swp
.*.swo
.*.un~
*.tmp
*.o
*.o-*
*.os
*.os-*
*.so
*.a
*.clb
*.class
*.pyxbldc
*.vcd
*.mo
*_pyx.cpp
*.stats
config.json
clcache
compile_commands.json
compare_runtime*.html
board/obj/
selfdrive/boardd/boardd
selfdrive/logcatd/logcatd
selfdrive/proclogd/proclogd
selfdrive/ui/ui
/src/
cereal/services.h
cereal/gen
selfdrive/ui/translations/tmp
selfdrive/car/tests/cars_dump
system/camerad/test/ae_gray_test
.coverage*
coverage.xml
htmlcov
pandaextra
.mypy_cache/
flycheck_*
cppcheck_report.txt
comma*.sh
selfdrive/modeld/models/*.pkl
!selfdrive/modeld/models/driving_tinygrad.pkl
!selfdrive/modeld/models/driving_vision_tinygrad.pkl
!selfdrive/modeld/models/driving_policy_tinygrad.pkl
!selfdrive/modeld/models/driving_vision_metadata.pkl
!selfdrive/modeld/models/driving_policy_metadata.pkl
!selfdrive/modeld/models/dmonitoring_model_tinygrad.pkl
!selfdrive/modeld/models/dmonitoring_model_metadata.pkl
!selfdrive/modeld/models/warp_1928x1208_tinygrad.pkl
!selfdrive/modeld/models/warp_1344x760_tinygrad.pkl
!selfdrive/modeld/models/dm_warp_1928x1208_tinygrad.pkl
!selfdrive/modeld/models/dm_warp_1344x760_tinygrad.pkl
# openpilot log files
*.bz2
*.zst
build/
!**/.gitkeep
poetry.toml
Pipfile
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
# Keep prebuilt runtime artifacts trackable
!cereal/messaging/bridge
!system/camerad/camerad
!system/loggerd/loggerd
!system/loggerd/encoderd
!system/loggerd/bootlog
!selfdrive/pandad/pandad
!cereal/services.h
!cereal/libcereal.a
!cereal/libsocketmaster.a
!common/params_pyx.so
!common/params_pyx.cpp
!common/transformations/transformations.so
!selfdrive/modeld/models/commonmodel_pyx.so
!selfdrive/pandad/pandad_api_impl.so
!selfdrive/controls/lib/lateral_mpc_lib/c_generated_code/acados_ocp_solver_pyx.so
!selfdrive/controls/lib/lateral_mpc_lib/c_generated_code/libacados_ocp_solver_lat.so
!selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code/acados_ocp_solver_pyx.so
!selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code/libacados_ocp_solver_long.so
!common/libcommon.a
!msgq_repo/msgq/ipc_pyx.so
!msgq_repo/msgq/visionipc/visionipc_pyx.so
!rednose_repo/rednose/helpers/ekf_sym_pyx.so
!panda/board/obj/
!panda/board/obj/**
-12
View File
@@ -1,12 +0,0 @@
sudo: required
services:
- docker
install:
- docker build -t tmppilot -f Dockerfile.openpilot .
script:
- docker run --rm
-v "$(pwd)"/selfdrive/test/tests/plant/out:/tmp/openpilot/selfdrive/test/tests/plant/out
tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/tests/plant && OPTEST=1 ./test_longitudinal.py'
+9
View File
@@ -0,0 +1,9 @@
{
"recommendations": [
"ms-python.python",
"ms-vscode.cpptools",
"elagil.pre-commit-helper",
"charliermarsh.ruff",
"openai.chatgpt",
]
}
+70
View File
@@ -0,0 +1,70 @@
{
"version": "0.2.0",
"inputs": [
{
"id": "python_process",
"type": "pickString",
"description": "Select the process to debug",
"options": [
"selfdrive/controls/controlsd.py",
"system/timed/timed.py",
"tools/sim/run_bridge.py"
]
},
{
"id": "args",
"description": "Arguments to pass to the process",
"type": "promptString"
},
{
"id": "replayArg",
"type": "promptString",
"description": "Enter route or segment to replay."
}
],
"configurations": [
{
"name": "Python: openpilot Process",
"type": "debugpy",
"request": "launch",
"program": "${input:python_process}",
"console": "integratedTerminal",
"justMyCode": true,
"args": "${input:args}"
},
{
"name": "Attach LLDB to Replay drive",
"type": "lldb",
"request": "attach",
"pid": "${command:pickMyProcess}",
"initCommands": [
"script import time; time.sleep(3)"
]
},
{
"name": "Replay drive",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/opendbc/safety/tests/safety_replay/replay_drive.py",
"args": [
"${input:replayArg}"
],
"console": "integratedTerminal",
"justMyCode": false,
"env": {
"PYTHONPATH": "${workspaceFolder}"
},
"subProcess": true,
"stopOnEntry": false
}
],
"compounds": [
{
"name": "Replay drive + Safety LLDB",
"configurations": [
"Replay drive",
"Attach LLDB to Replay drive"
]
}
]
}
+27
View File
@@ -0,0 +1,27 @@
{
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.renderWhitespace": "trailing",
"files.trimTrailingWhitespace": true,
"search.exclude": {
"**/.git": true,
"**/.venv": true,
"**/__pycache__": true
},
"files.exclude": {
"**/.git": true,
"**/.venv": true,
"**/__pycache__": true
},
"python.analysis.exclude": [
"**/.git",
"**/.venv",
"**/__pycache__",
// exclude directories that should be using the symlinked version
"common/**",
"selfdrive/**",
"system/**",
"third_party/**",
"tools/**",
]
}
+9 -14
View File
@@ -1,19 +1,14 @@
FROM ubuntu:16.04
ENV PYTHONUNBUFFERED 1
FROM ghcr.io/commaai/openpilot-base:latest
RUN apt-get update && apt-get install -y build-essential clang vim screen wget bzip2 git libglib2.0-0 python-pip capnproto libcapnp-dev libzmq5-dev libffi-dev libusb-1.0-0
RUN pip install numpy==1.11.2 scipy==0.18.1 matplotlib
ENV PYTHONUNBUFFERED=1
COPY requirements_openpilot.txt /tmp/
RUN pip install -r /tmp/requirements_openpilot.txt
ENV OPENPILOT_PATH=/home/batman/openpilot
ENV PYTHONPATH /tmp/openpilot:$PYTHONPATH
RUN mkdir -p ${OPENPILOT_PATH}
WORKDIR ${OPENPILOT_PATH}
COPY ./common /tmp/openpilot/common
COPY ./cereal /tmp/openpilot/cereal
COPY ./opendbc /tmp/openpilot/opendbc
COPY ./selfdrive /tmp/openpilot/selfdrive
COPY ./phonelibs /tmp/openpilot/phonelibs
COPY ./pyextra /tmp/openpilot/pyextra
COPY . ${OPENPILOT_PATH}/
RUN mkdir -p /tmp/openpilot/selfdrive/test/out
ENV UV_BIN="/home/batman/.local/bin/"
ENV PATH="$UV_BIN:$PATH"
RUN UV_PROJECT_ENVIRONMENT=$VIRTUAL_ENV uv run scons --cache-readonly -j$(nproc)
+81
View File
@@ -0,0 +1,81 @@
FROM ubuntu:24.04
ENV PYTHONUNBUFFERED=1
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends sudo tzdata locales ssh pulseaudio xvfb x11-xserver-utils gnome-screenshot python3-tk python3-dev && \
rm -rf /var/lib/apt/lists/*
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && locale-gen
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
COPY tools/install_ubuntu_dependencies.sh /tmp/tools/
RUN /tmp/tools/install_ubuntu_dependencies.sh && \
rm -rf /var/lib/apt/lists/* /tmp/* && \
cd /usr/lib/gcc/arm-none-eabi/* && \
rm -rf arm/ thumb/nofp thumb/v6* thumb/v8* thumb/v7+fp thumb/v7-r+fp.sp
# Add OpenCL
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-utils \
alien \
unzip \
tar \
curl \
xz-utils \
dbus \
gcc-arm-none-eabi \
tmux \
vim \
libx11-6 \
wget \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /tmp/opencl-driver-intel && \
cd /tmp/opencl-driver-intel && \
wget https://github.com/intel/llvm/releases/download/2024-WW14/oclcpuexp-2024.17.3.0.09_rel.tar.gz && \
wget https://github.com/oneapi-src/oneTBB/releases/download/v2021.12.0/oneapi-tbb-2021.12.0-lin.tgz && \
mkdir -p /opt/intel/oclcpuexp_2024.17.3.0.09_rel && \
cd /opt/intel/oclcpuexp_2024.17.3.0.09_rel && \
tar -zxvf /tmp/opencl-driver-intel/oclcpuexp-2024.17.3.0.09_rel.tar.gz && \
mkdir -p /etc/OpenCL/vendors && \
echo /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64/libintelocl.so > /etc/OpenCL/vendors/intel_expcpu.icd && \
cd /opt/intel && \
tar -zxvf /tmp/opencl-driver-intel/oneapi-tbb-2021.12.0-lin.tgz && \
ln -s /opt/intel/oneapi-tbb-2021.12.0/lib/intel64/gcc4.8/libtbb.so /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64 && \
ln -s /opt/intel/oneapi-tbb-2021.12.0/lib/intel64/gcc4.8/libtbbmalloc.so /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64 && \
ln -s /opt/intel/oneapi-tbb-2021.12.0/lib/intel64/gcc4.8/libtbb.so.12 /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64 && \
ln -s /opt/intel/oneapi-tbb-2021.12.0/lib/intel64/gcc4.8/libtbbmalloc.so.2 /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64 && \
mkdir -p /etc/ld.so.conf.d && \
echo /opt/intel/oclcpuexp_2024.17.3.0.09_rel/x64 > /etc/ld.so.conf.d/libintelopenclexp.conf && \
ldconfig -f /etc/ld.so.conf.d/libintelopenclexp.conf && \
cd / && \
rm -rf /tmp/opencl-driver-intel
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute
ENV QTWEBENGINE_DISABLE_SANDBOX=1
RUN dbus-uuidgen > /etc/machine-id
ARG USER=batman
ARG USER_UID=1001
RUN useradd -m -s /bin/bash -u $USER_UID $USER
RUN usermod -aG sudo $USER
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER $USER
COPY --chown=$USER pyproject.toml uv.lock /home/$USER
COPY --chown=$USER tools/install_python_dependencies.sh /home/$USER/tools/
ENV VIRTUAL_ENV=/home/$USER/.venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN cd /home/$USER && \
tools/install_python_dependencies.sh && \
rm -rf tools/ pyproject.toml uv.lock .cache
USER root
RUN sudo git config --global --add safe.directory /tmp/openpilot
Vendored
+269
View File
@@ -0,0 +1,269 @@
def retryWithDelay(int maxRetries, int delay, Closure body) {
for (int i = 0; i < maxRetries; i++) {
try {
return body()
} catch (Exception e) {
sleep(delay)
}
}
throw Exception("Failed after ${maxRetries} retries")
}
def device(String ip, String step_label, String cmd) {
withCredentials([file(credentialsId: 'id_rsa', variable: 'key_file')]) {
def ssh_cmd = """
ssh -o ConnectTimeout=5 -o ServerAliveInterval=5 -o ServerAliveCountMax=2 -o BatchMode=yes -o StrictHostKeyChecking=no -i ${key_file} 'comma@${ip}' exec /usr/bin/bash <<'END'
set -e
export TERM=xterm-256color
shopt -s huponexit # kill all child processes when the shell exits
export CI=1
export PYTHONWARNINGS=error
export LOGPRINT=debug
export TEST_DIR=${env.TEST_DIR}
export SOURCE_DIR=${env.SOURCE_DIR}
export GIT_BRANCH=${env.GIT_BRANCH}
export GIT_COMMIT=${env.GIT_COMMIT}
export CI_ARTIFACTS_TOKEN=${env.CI_ARTIFACTS_TOKEN}
export GITHUB_COMMENTS_TOKEN=${env.GITHUB_COMMENTS_TOKEN}
export AZURE_TOKEN='${env.AZURE_TOKEN}'
# only use 1 thread for tici tests since most require HIL
export PYTEST_ADDOPTS="-n0 -s"
export GIT_SSH_COMMAND="ssh -i /data/gitkey"
source ~/.bash_profile
if [ -f /TICI ]; then
source /etc/profile
rm -rf /tmp/tmp*
rm -rf ~/.commacache
rm -rf /dev/shm/*
rm -rf /dev/tmp/tmp*
if ! systemctl is-active --quiet systemd-resolved; then
echo "restarting resolved"
sudo systemctl start systemd-resolved
sleep 3
fi
# restart aux USB
if [ -e /sys/bus/usb/drivers/hub/3-0:1.0 ]; then
echo "restarting aux usb"
echo "3-0:1.0" | sudo tee /sys/bus/usb/drivers/hub/unbind
sleep 0.5
echo "3-0:1.0" | sudo tee /sys/bus/usb/drivers/hub/bind
fi
fi
if [ -f /data/openpilot/launch_env.sh ]; then
source /data/openpilot/launch_env.sh
fi
ln -snf ${env.TEST_DIR} /data/pythonpath
cd ${env.TEST_DIR} || true
time ${cmd}
END"""
sh script: ssh_cmd, label: step_label
}
}
def deviceStage(String stageName, String deviceType, List extra_env, def steps) {
stage(stageName) {
if (currentBuild.result != null) {
return
}
if (isReplay()) {
error("REPLAYING TESTS IS NOT ALLOWED. FIX THEM INSTEAD.")
}
def extra = extra_env.collect { "export ${it}" }.join('\n');
def branch = env.BRANCH_NAME ?: 'master';
def gitDiff = sh returnStdout: true, script: 'curl -s -H "Authorization: Bearer ${GITHUB_COMMENTS_TOKEN}" https://api.github.com/repos/commaai/openpilot/compare/master...${GIT_BRANCH} | jq .files[].filename || echo "/"', label: 'Getting changes'
lock(resource: "", label: deviceType, inversePrecedence: true, variable: 'device_ip', quantity: 1, resourceSelectStrategy: 'random') {
docker.image('ghcr.io/commaai/alpine-ssh').inside('--user=root') {
timeout(time: 35, unit: 'MINUTES') {
retry (3) {
def date = sh(script: 'date', returnStdout: true).trim();
device(device_ip, "set time", "date -s '" + date + "'")
device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh"))
}
steps.each { item ->
def name = item[0]
def cmd = item[1]
def args = item[2]
def diffPaths = args.diffPaths ?: []
def cmdTimeout = args.timeout ?: 9999
if (branch != "master" && !branch.contains("__jenkins_loop_") && diffPaths && !hasPathChanged(gitDiff, diffPaths)) {
println "Skipping ${name}: no changes in ${diffPaths}."
return
} else {
timeout(time: cmdTimeout, unit: 'SECONDS') {
device(device_ip, name, cmd)
}
}
}
}
}
}
}
}
def hasPathChanged(String gitDiff, List<String> paths) {
for (path in paths) {
if (gitDiff.contains(path)) {
return true
}
}
return false
}
def isReplay() {
def replayClass = "org.jenkinsci.plugins.workflow.cps.replay.ReplayCause"
return currentBuild.rawBuild.getCauses().any{ cause -> cause.toString().contains(replayClass) }
}
def setupCredentials() {
withCredentials([
string(credentialsId: 'azure_token', variable: 'AZURE_TOKEN'),
]) {
env.AZURE_TOKEN = "${AZURE_TOKEN}"
}
withCredentials([
string(credentialsId: 'ci_artifacts_pat', variable: 'CI_ARTIFACTS_TOKEN'),
]) {
env.CI_ARTIFACTS_TOKEN = "${CI_ARTIFACTS_TOKEN}"
}
withCredentials([
string(credentialsId: 'post_comments_github_pat', variable: 'GITHUB_COMMENTS_TOKEN'),
]) {
env.GITHUB_COMMENTS_TOKEN = "${GITHUB_COMMENTS_TOKEN}"
}
}
def step(String name, String cmd, Map args = [:]) {
return [name, cmd, args]
}
node {
env.CI = "1"
env.PYTHONWARNINGS = "error"
env.TEST_DIR = "/data/openpilot"
env.SOURCE_DIR = "/data/openpilot_source/"
setupCredentials()
env.GIT_BRANCH = checkout(scm).GIT_BRANCH
env.GIT_COMMIT = checkout(scm).GIT_COMMIT
def excludeBranches = ['__nightly', 'devel', 'devel-staging', 'release3', 'release3-staging',
'release-tici', 'release-tizi', 'release-tizi-staging', 'testing-closet*', 'hotfix-*']
def excludeRegex = excludeBranches.join('|').replaceAll('\\*', '.*')
if (env.BRANCH_NAME != 'master' && !env.BRANCH_NAME.contains('__jenkins_loop_')) {
properties([
disableConcurrentBuilds(abortPrevious: true)
])
}
try {
if (env.BRANCH_NAME == 'devel-staging') {
deviceStage("build release-tizi-staging", "tizi-needs-can", [], [
step("build release-tizi-staging", "RELEASE_BRANCH=release-tizi-staging $SOURCE_DIR/release/build_release.sh"),
])
}
if (env.BRANCH_NAME == '__nightly') {
parallel (
'nightly': {
deviceStage("build nightly", "tizi-needs-can", [], [
step("build nightly", "RELEASE_BRANCH=nightly $SOURCE_DIR/release/build_release.sh"),
])
},
'nightly-dev': {
deviceStage("build nightly-dev", "tizi-needs-can", [], [
step("build nightly-dev", "PANDA_DEBUG_BUILD=1 RELEASE_BRANCH=nightly-dev $SOURCE_DIR/release/build_release.sh"),
])
},
)
}
if (!env.BRANCH_NAME.matches(excludeRegex)) {
parallel (
'onroad tests': {
deviceStage("onroad", "tizi-needs-can", ["UNSAFE=1"], [
step("build openpilot", "cd system/manager && ./build.py"),
step("check dirty", "release/check-dirty.sh"),
step("onroad tests", "pytest selfdrive/test/test_onroad.py -s", [timeout: 60]),
])
},
'HW + Unit Tests': {
deviceStage("tizi-hardware", "tizi-common", ["UNSAFE=1"], [
step("build", "cd system/manager && ./build.py"),
step("test pandad", "pytest selfdrive/pandad/tests/test_pandad.py", [diffPaths: ["panda", "selfdrive/pandad/"]]),
step("test power draw", "pytest -s system/hardware/tici/tests/test_power_draw.py"),
step("test encoder", "LD_LIBRARY_PATH=/usr/local/lib pytest system/loggerd/tests/test_encoder.py", [diffPaths: ["system/loggerd/"]]),
step("test manager", "pytest system/manager/test/test_manager.py"),
])
},
'loopback': {
deviceStage("loopback", "tizi-loopback", ["UNSAFE=1"], [
step("build openpilot", "cd system/manager && ./build.py"),
step("test pandad loopback", "pytest selfdrive/pandad/tests/test_pandad_loopback.py"),
])
},
'camerad OX03C10': {
deviceStage("OX03C10", "tizi-ox03c10", ["UNSAFE=1"], [
step("build", "cd system/manager && ./build.py"),
step("test camerad", "pytest system/camerad/test/test_camerad.py", [timeout: 60]),
step("test exposure", "pytest system/camerad/test/test_exposure.py"),
])
},
'camerad OS04C10': {
deviceStage("OS04C10", "tici-os04c10", ["UNSAFE=1"], [
step("build", "cd system/manager && ./build.py"),
step("test camerad", "pytest system/camerad/test/test_camerad.py", [timeout: 60]),
step("test exposure", "pytest system/camerad/test/test_exposure.py"),
])
},
'sensord': {
deviceStage("LSM + MMC", "tizi-lsmc", ["UNSAFE=1"], [
step("build", "cd system/manager && ./build.py"),
step("test sensord", "pytest system/sensord/tests/test_sensord.py"),
])
},
'replay': {
deviceStage("model-replay", "tizi-replay", ["UNSAFE=1"], [
step("build", "cd system/manager && ./build.py", [diffPaths: ["selfdrive/modeld/", "tinygrad_repo", "selfdrive/test/process_replay/model_replay.py"]]),
step("model replay", "selfdrive/test/process_replay/model_replay.py", [diffPaths: ["selfdrive/modeld/", "tinygrad_repo", "selfdrive/test/process_replay/model_replay.py"]]),
])
},
'tizi': {
deviceStage("tizi", "tizi", ["UNSAFE=1"], [
step("build openpilot", "cd system/manager && ./build.py"),
step("test pandad loopback", "SINGLE_PANDA=1 pytest selfdrive/pandad/tests/test_pandad_loopback.py"),
step("test pandad spi", "pytest selfdrive/pandad/tests/test_pandad_spi.py"),
step("test amp", "pytest system/hardware/tici/tests/test_amplifier.py"),
// TODO: enable once new AGNOS is available
// step("test esim", "pytest system/hardware/tici/tests/test_esim.py"),
step("test qcomgpsd", "pytest system/qcomgpsd/tests/test_qcomgpsd.py", [diffPaths: ["system/qcomgpsd/"]]),
])
},
)
}
} catch (Exception e) {
currentBuild.result = 'FAILED'
throw e
}
}
+7
View File
@@ -0,0 +1,7 @@
Copyright (c) 2018, Comma.ai, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+202
View File
@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-7
View File
@@ -1,7 +0,0 @@
Copyright (c) 2016, Comma.ai, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-9
View File
@@ -1,9 +0,0 @@
code_dir := $(shell pwd)
# TODO: Add a global build system
.PHONY: all
all:
cd selfdrive && PYTHONPATH=$(code_dir) PREPAREONLY=1 ./manager.py
+63 -136
View File
@@ -1,153 +1,80 @@
Welcome to openpilot
======
# StarPilot
[openpilot](http://github.com/commaai/openpilot) is an open source driving agent.
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/firestar5683/StarPilot)
[![Discord](https://img.shields.io/discord/1387432184121393333?label=Discord)](https://firestar.link/discord)
[![Last Updated](https://img.shields.io/github/last-commit/firestar5683/StarPilot/StarPilot)](https://github.com/firestar5683/StarPilot)
[![Wiki](https://img.shields.io/badge/Wiki-StarPilot-blue?logo=wiki)](https://wiki.firestar.link)
Currently it performs the functions of Adaptive Cruise Control (ACC) and Lane Keeping Assist System (LKAS) for Hondas, Acuras and Toyotas. It's about on par with Tesla Autopilot at launch, and better than [all other manufacturers](http://www.thedrive.com/tech/5707/the-war-for-autonomous-driving-part-iii-us-vs-germany-vs-japan).
**StarPilot** is a custom fork of [comma.ai's openpilot](https://comma.ai/openpilot),
an open source driver assistance system.
The openpilot codebase has been written to be concise and enable rapid prototyping. We look forward to your contributions - improving real vehicle automation has never been easier.
Here are [some](https://www.youtube.com/watch?v=9OwTJFuDI7g) [videos](https://www.youtube.com/watch?v=64Wvt5pYQmE) [of](https://www.youtube.com/watch?v=6IW7Nejsr3A) [it](https://www.youtube.com/watch?v=-VN1YcC83nA) [running](https://www.youtube.com/watch?v=EQJZvVeihZk). And a really cool [tutorial](https://www.youtube.com/watch?v=PwOnsT2UW5o).
Openpilot provides
* Automated Lane Centering
* Adaptive Cruise Control
* Lane Change Assist
* Driver Monitoring *without wheel nags*
Hardware
------
StarPilot was formerly a GM targeted fork,
but [has expanded to offer Quality-Of-Life improvements for all](#features)!
Right now openpilot supports the [NEO research platform](http://github.com/commaai/neo) and the [EON Dashcam DevKit](https://shop.comma.ai/products/eon-dashcam-devkit). We'd like to support other platforms as well.
StarPilot is built off of [FrogPilot](https://github.com/FrogAi/FrogPilot)
and supports the major features FrogPilot offers.
Install openpilot on a neo device by entering ``https://openpilot.comma.ai`` during NEOS setup.
StarPilot has a vibrant, welcoming community [discord](https://firestar.link/discord).
Stop by to chat or ask questions!
Supported Cars
------
## Documentation
- Acura ILX 2016 with AcuraWatch Plus
- Due to use of the cruise control for gas, it can only be enabled above 25 mph
Please see [https://wiki.firestar.link](https://wiki.firestar.link) for hardware lists,
installation guides, and software configuration.
- Honda Civic 2016-2017 with Honda Sensing
- Due to limitations in steering firmware, steering is disabled below 12 mph
- Note that the hatchback model is not supported
## Features
- Honda CR-V Touring 2015-2016
- Can only be enabled above 25 mph
* Full support for Comma C3, C3X, and C4
* Model switcher with all of comma's tinygrad driving models
* Special longitudinal planner tuning for VoACC (visual only, radar-less) vehicles
* Custom-tuned torque controllers for an expanding list of cars.
* Galaxy: StarPilot's portal to configure your comma device using your phone from anywhere.
Download models, change settings, update software, visualize live model outputs for tuning.
* Always On Lateral (full time steering assist)*
* Speed Limit Controller*
* Learning Curve Speed Controller*
* Conditional Experimental Mode (CEM)*
* Driving Profiles*
* Custom themes*
* Alert Volume Controller*
* Comma Pedal Interceptor support*
* Toyota SDSU support*
* ZSS support*
* High quality dashcam recordings*
* Enhanced tuning for CEM (dynamic experimental mode switching)
* And more!
- Honda Odyssey 2018 with Honda Sensing (alpha!)
- Can only be enabled above 25 mph
\* [Inherited from FrogPilot](https://github.com/FrogAi/FrogPilot#openpilot-vs-frogpilot)
- Acura RDX 2018 with AcuraWatch Plus (alpha!)
- Can only be enabled above 25 mph
## GM-only Features
- Toyota RAV-4 2016+ non-hybrid with TSS-P
- By default it uses stock Toyota ACC for longitudinal control
- openpilot longitudinal control available after unplugging the [Driving Support ECU](https://community.comma.ai/wiki/index.php/Toyota#Rav4_.28for_openpilot.29) and can be enabled above 20 mph
* Increased LKAS fault resiliency
* ASCM_INT and SASCM support
* Custom lateral torque controller, with special tuning for Bolts
* 50% extra torque on 2017 Chevy Bolt
* Improved lateral and longitudinal tuning
* Dashboard cruise control display speed spoofing for vehicles with pedal interceptor
* Extra steering wheel button functionality for vehicles with pedal interceptor
* Optional toggle to boot comma when remote starting your vehicle
- Toyota Prius 2017 (alpha!)
- By default it uses stock Toyota ACC for longitudinal control
- openpilot longitudinal control available after unplugging the [Driving Support ECU](https://community.comma.ai/wiki/index.php/Toyota#Prius_.28for_openpilot.29)
- Lateral control needs improvements
## Developer Features
- Toyota RAV-4 2017 hybrid (alpha!)
- By default it uses stock Toyota ACC for longitudinal control
- openpilot longitudinal control available after unplugging the [Driving Support ECU](https://community.comma.ai/wiki/index.php/Toyota#Rav4_.28for_openpilot.29) and can do stop and go
* Native and cross compilation for Windows, Mac, and Ubuntu
* Custom AGNOS to support C3, C3X, and C4
* To run UI on PC:
* `./c3` for large UI
* `./c4` for small UI
* `./build` to produce cross compiled binaries for comma devices.
Uses your comma's sysroot/toolchain
* Toggle: "Use Precompiled Binaries" to allow switching between fast boot / editable builds
* Custom long maneuver tests, specifically designed for regen-only vehicles
- Toyota Corolla 2017 (alpha!)
- By default it uses stock Toyota ACC for longitudinal control
- openpilot longitudinal control available after unplugging the [Driving Support ECU](https://community.comma.ai/wiki/index.php/Toyota#Corolla_.28for_openpilot.29) and can be enabled above 20 mph
- Lexus RX 2017 hybrid (alpha!)
- By default it uses stock Lexus ACC for longitudinal control
- openpilot longitudinal control available after unplugging the [Driving Support ECU](https://community.comma.ai/wiki/index.php/Toyota#Lexus_RX_hybrid)
In Progress Cars
------
- All TSS-P Toyota with Steering Assist.
- 'Full Speed Range Dynamic Radar Cruise Control' is required to enable stop-and-go. Only the Prius, Camry and C-HR have this option.
- Even though the Tundra, Sequoia and the Land Cruiser have TSS-P, they don't have Steering Assist and are not supported.
- All LSS-P Lexus with Steering Assist or Lane Keep Assist.
- 'All-Speed Range Dynamic Radar Cruise Control' is required to enable stop-and-go. Only the GS, GSH, GS, F, RX, RXH, LX, NX, NXH, LC, LCH, LS, LSH have this option.
- Even though the LX have TSS-P, it does not have Steering Assist and is not supported.
Community WIP Cars
------
- [Chevy Volt 2016-2018 Premier with Driver Confidence II](https://github.com/commaai/openpilot/pull/104)
- [Classic Tesla Model S (pre-AP)](https://github.com/commaai/openpilot/pull/145)
- [Honda Pilot 2017 with Honda Sensing](https://github.com/commaai/openpilot/pull/161)
Directory structure
------
- cereal -- The messaging spec used for all logs on the phone
- common -- Library like functionality we've developed here
- opendbc -- Files showing how to interpret data from cars
- panda -- Code used to communicate on CAN and LIN
- phonelibs -- Libraries used on the phone
- selfdrive -- Code needed to drive the car
- assets -- Fonts for ui
- boardd -- Daemon to talk to the board
- car -- Code that talks to the car and implements CarInterface
- common -- Shared C/C++ code for the daemons
- controls -- Python controls (PID loops etc) for the car
- debug -- Tools to help you debug and do car ports
- logcatd -- Android logcat as a service
- loggerd -- Logger and uploader of car data
- proclogd -- Logs information from proc
- sensord -- IMU / GPS interface code
- test/plant -- Car simulator running code through virtual maneuvers
- ui -- The UI
- visiond -- embedded vision pipeline
To understand how the services interact, see `selfdrive/service_list.yaml`
Testing on PC
------
There is rudimentary infrastructure to run a basic simulation and generate a report of openpilot's behavior in different scenarios.
```bash
# Requires working docker
./run_docker_tests.sh
```
The results are written to `selfdrive/test/plant/out/index.html`
More extensive testing infrastructure and simulation environments are coming soon.
Adding Car Support
------
comma.ai offers [bounties](http://comma.ai/bounties.html) for adding additional car support.
CR-V Touring support came in through this program. Chevy Volt is close. Accord is close as well.
User Data / chffr Account / Crash Reporting
------
By default openpilot creates an account and includes a client for chffr, our dashcam app. We use your data to train better models and improve openpilot for everyone.
It's open source software, so you are free to disable it if you wish.
It logs the road facing camera, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.
It does not log the user facing camera or the microphone.
By using it, you agree to [our privacy policy](https://beta.comma.ai/privacy.html). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma.ai. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma.ai for the use of this data.
Contributing
------
We welcome both pull requests and issues on
[github](http://github.com/commaai/openpilot). See the TODO file for a list of
good places to start.
Want to get paid to work on openpilot? [comma.ai is hiring](http://comma.ai/positions.html)
Licensing
------
openpilot is released under the MIT license.
Any user of this software shall indemnify and hold harmless Comma.ai, Inc. and its directors, officers, employees, agents, stockholders, affiliates, subcontractors and customers from and against all allegations, claims, actions, suits, demands, damages, liabilities, obligations, losses, settlements, judgments, costs and expenses (including without limitation attorneys fees and costs) which arise out of, relate to or result from any use of this software by user.
**THIS IS ALPHA QUALITY SOFTWARE FOR RESEARCH PURPOSES ONLY. THIS IS NOT A PRODUCT.
YOU ARE RESPONSIBLE FOR COMPLYING WITH LOCAL LAWS AND REGULATIONS.
NO WARRANTY EXPRESSED OR IMPLIED.**
## Third-Party Notices
* Portions of this software include modified versions of the Material Design Icons provided by Google under the Apache License 2.0. A copy of the license is included in the `LICENSE-MDI` file.
+975 -51
View File
File diff suppressed because it is too large Load Diff
-73
View File
@@ -1,73 +0,0 @@
openpilot Safety
======
openpilot is an Adaptive Cruise Control (ACC) and Lane Keeping Assist (LKA) system.
Like other ACC and LKA systems, openpilot requires the driver to be alert and to
pay attention at all times. We repeat, **driver alertness is necessary, but not
sufficient, for openpilot to be used safely**.
Even with an attentive driver, we must make further efforts for the system to be
safe. We have designed openpilot with two other safety considerations.
1. The driver must always be capable to immediately retake manual control of the vehicle,
by stepping on either pedal or by pressing the cancel button.
2. The vehicle must not alter its trajectory too quickly for the driver to safely
react. This means that while the system is engaged, the actuators are constrained
to operate within reasonable limits.
Following are details of the car specific safety implementations:
Honda/Acura
------
- While the system is engaged, gas, brake and steer limits are subject to the same limits used by
the stock system.
- Without an interceptor, the gas is controlled by the Powertrain Control Module (PCM).
The PCM limits acceleration to what is reasonable for a cruise control system. With an
interceptor, the gas is clipped to 60%.
- The brake is controlled by the 0x1FA CAN message. This message allows full
braking, although the board and the software clip it to 1/4th of the max.
This is around .3g of braking.
- Steering is controlled by the 0xE4 CAN message. The Electronic Power Steering (EPS)
controller in the car limits the torque to a very small amount, so regardless of the
message, the controller cannot jerk the wheel.
- Brake and gas pedal pressed signals are contained in the 0x17C CAN message. A rising edge of
either signal triggers a disengagement, which is enforced by the board and in software. The
green led on the board signifies if the board is allowing control messages.
- Honda CAN uses both a counter and a checksum to ensure integrity and prevent
replay of the same message.
Toyota/Lexus
------
- While the system is engaged, gas, brake and steer limits are subject to the same limits used by
the stock system.
- With the stock Driving Support Unit (DSU) enabled, the acceleration is controlled
by the stock system and is subject to the stock adaptive cruise control limits. Without the
stock DSU connected, the acceleration command is controlled by the 0x343 CAN message and its
value is limited by the board and the software to between .3g of deceleration and .15g of
acceleration. The acceleration command is ignored by the Engine Control Module (ECM) while the
cruise control system is disengaged.
- Steering torque is controlled through the 0x2E4 CAN message and it's limited by the board and in
software to a value of -1500 and 1500. In addition, the vehicle EPS unit will not respond to
commands outside these limits. A steering torque rate limit is enforced by the board and in
software so that the commanded steering torque must rise from 0 to max value no faster than
1.5s. Commanded steering torque is limited by the board and in software to be no more than 350
units above the actual EPS generated motor torque to ensure limited differences between
commanded and actual torques.
- Brake and gas pedal pressed signals are contained in the 0x224 and 0x1D2 CAN messages,
respectively. A rising edge of either signal triggers a disengagement, which is enforced by the
board and in software. Additionally, the cruise control system disengages on the rising edge of
the brake pedal pressed signal.
- The cruise control system state is contained in the 0x1D2 message. No control messages are
allowed if the cruise control system is not active. This is enforced by the software and the
board. The green led on the board signifies if the board is allowing control messages.
+405
View File
@@ -0,0 +1,405 @@
import os
import shutil
import subprocess
import sys
import sysconfig
import platform
import numpy as np
import SCons.Errors
SCons.Warnings.warningAsException(True)
# pending upstream fix - https://github.com/SCons/scons/issues/4461
#SetOption('warn', 'all')
force_tici = os.environ.get("SP_FORCE_TICI", "").lower() in {"1", "true", "yes", "on"}
TICI = os.path.isfile('/TICI') or force_tici
AGNOS = TICI
Decider('MD5-timestamp')
SetOption('num_jobs', max(1, int(os.cpu_count()/2)))
AddOption('--kaitai',
action='store_true',
help='Regenerate kaitai struct parsers')
AddOption('--asan',
action='store_true',
help='turn on ASAN')
AddOption('--ubsan',
action='store_true',
help='turn on UBSan')
AddOption('--coverage',
action='store_true',
help='build with test coverage options')
AddOption('--ccflags',
action='store',
type='string',
default='',
help='pass arbitrary flags over the command line')
AddOption('--external-sconscript',
action='store',
metavar='FILE',
dest='external_sconscript',
help='add an external SConscript to the build')
AddOption('--mutation',
action='store_true',
help='generate mutation-ready code')
AddOption('--minimal',
action='store_false',
dest='extras',
default=os.path.exists(File('#.lfsconfig').abspath), # minimal by default on release branch (where there's no LFS)
help='the minimum build to run openpilot. no tests, tools, etc.')
AddOption('--extras',
action='store_true',
dest='extras',
default=os.path.exists(File('#.lfsconfig').abspath),
help='build optional tools/tests even when minimal is the default')
def maybe_delegate_to_laptop_device_builder() -> None:
if platform.system() != "Darwin":
return
if os.environ.get("SP_FORCE_ARCH"):
return
if os.environ.get("SP_SKIP_CONTAINER_REEXEC"):
return
if os.environ.get("SP_DISABLE_AUTO_DEVICE_SCONS", "").lower() in {"1", "true", "yes", "on"}:
return
basedir = Dir("#").abspath
sysroot_dir = os.environ.get("COMMA_SYSROOT_DIR", os.path.join(basedir, ".comma_sysroot"))
required_sysroot_dirs = (
"usr/local/lib",
"lib/aarch64-linux-gnu",
"usr/lib/aarch64-linux-gnu",
"system/vendor/lib64",
)
if not all(os.path.isdir(os.path.join(sysroot_dir, p)) for p in required_sysroot_dirs):
return
docker_bin = shutil.which("docker")
if docker_bin is None:
mac_docker = "/Applications/Docker.app/Contents/Resources/bin/docker"
if os.path.isfile(mac_docker):
docker_bin = mac_docker
if docker_bin is None and shutil.which("podman") is None:
return
builder = os.path.join(basedir, "scripts", "laptop_device_build.sh")
if not os.path.isfile(builder):
return
print(f"Auto-routing scons to laptop device build (sysroot: {sysroot_dir})", flush=True)
env = os.environ.copy()
env["SP_SKIP_CONTAINER_REEXEC"] = "1"
env.setdefault("COMMA_SYSROOT_DIR", sysroot_dir)
if docker_bin is not None and shutil.which("docker") is None:
docker_dir = os.path.dirname(docker_bin)
env["PATH"] = f"{docker_dir}:{env.get('PATH', '')}"
cmd = [builder, "build", *sys.argv[1:]]
raise SystemExit(subprocess.call(cmd, cwd=basedir, env=env))
maybe_delegate_to_laptop_device_builder()
## Architecture name breakdown (arch)
## - larch64: linux tici aarch64
## - aarch64: linux pc aarch64
## - x86_64: linux pc x64
## - Darwin: mac x64 or arm64
real_arch = arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
forced_arch = os.environ.get("SP_FORCE_ARCH")
if forced_arch:
arch = forced_arch
elif platform.system() == "Darwin":
arch = "Darwin"
brew_prefix = subprocess.check_output(['brew', '--prefix'], encoding='utf8').strip()
elif arch == "aarch64" and AGNOS:
arch = "larch64"
assert arch in ["larch64", "aarch64", "x86_64", "Darwin"]
# Homebrew llvm can shadow Apple clang and break macOS SDK header resolution.
# Use the system toolchain explicitly on macOS for reliable local builds.
cc = '/usr/bin/clang' if arch == "Darwin" else 'clang'
cxx = '/usr/bin/clang++' if arch == "Darwin" else 'clang++'
ar = '/usr/bin/ar' if arch == "Darwin" else 'ar'
ranlib = '/usr/bin/ranlib' if arch == "Darwin" else 'ranlib'
lenv = {
"PATH": os.environ['PATH'],
"PYTHONPATH": ":".join([
Dir("#").abspath,
Dir("#third_party/acados").abspath,
Dir("#opendbc_repo").abspath,
]),
"ACADOS_SOURCE_DIR": Dir("#third_party/acados").abspath,
"ACADOS_PYTHON_INTERFACE_PATH": Dir("#third_party/acados/acados_template").abspath,
"TERA_PATH": Dir("#").abspath + f"/third_party/acados/{arch}/t_renderer"
}
# Allow callers to override cache/temp dirs used by subprocesses (e.g. tinygrad model compilation).
for key in ("HOME", "TMPDIR", "XDG_CACHE_HOME", "CACHEDB", "PARAMS_ROOT"):
if key in os.environ:
lenv[key] = os.environ[key]
rpath = []
arch_ldflags = []
def tici_libpath(path: str) -> str:
tici_sysroot = os.environ.get("SP_TICI_SYSROOT", "").strip().rstrip("/")
if arch != "larch64" or not tici_sysroot or not path.startswith("/"):
return path
return os.path.join(tici_sysroot, path.lstrip("/"))
if arch == "larch64":
cpppath = [
"#third_party/opencl/include",
tici_libpath("/usr/local/include"),
tici_libpath("/usr/include"),
tici_libpath("/usr/include/aarch64-linux-gnu"),
]
libpath = [
tici_libpath("/usr/local/lib"),
tici_libpath("/system/vendor/lib64"),
f"#third_party/acados/{arch}/lib",
]
libpath += [
"#third_party/libyuv/larch64/lib",
tici_libpath("/lib/aarch64-linux-gnu"),
tici_libpath("/usr/lib/aarch64-linux-gnu")
]
cflags = ["-D__TICI__", "-DQCOM2", "-mcpu=cortex-a57"]
cxxflags = ["-D__TICI__", "-DQCOM2", "-mcpu=cortex-a57"]
arch_ldflags += [
f"-Wl,-rpath-link,{tici_libpath('/usr/local/lib')}",
f"-Wl,-rpath-link,{tici_libpath('/lib/aarch64-linux-gnu')}",
f"-Wl,-rpath-link,{tici_libpath('/usr/lib/aarch64-linux-gnu')}",
f"-Wl,-rpath-link,{tici_libpath('/system/vendor/lib64')}",
f"-Wl,-rpath-link,{tici_libpath('/vendor/lib64')}",
]
# On non-aarch64 hosts (e.g. Docker on macOS), force clang cross-targeting.
if platform.machine() not in ("aarch64", "arm64"):
cross_target = os.environ.get("SP_CROSS_TARGET", "aarch64-linux-gnu")
cflags += [f"--target={cross_target}"]
cxxflags += [f"--target={cross_target}"]
arch_ldflags += [f"--target={cross_target}"]
rpath += ["/usr/local/lib"]
else:
cflags = []
cxxflags = []
cpppath = []
rpath += []
# MacOS
if arch == "Darwin":
libpath = [
f"#third_party/libyuv/{arch}/lib",
f"#third_party/acados/{arch}/lib",
f"{brew_prefix}/lib",
f"{brew_prefix}/opt/openssl@3.0/lib",
"/System/Library/Frameworks/OpenGL.framework/Libraries",
]
cflags += ["-DGL_SILENCE_DEPRECATION"]
cxxflags += ["-DGL_SILENCE_DEPRECATION"]
cpppath += [
f"{brew_prefix}/include",
f"{brew_prefix}/opt/openssl@3.0/include",
]
# Linux
else:
libpath = [
f"#third_party/acados/{arch}/lib",
f"#third_party/libyuv/{arch}/lib",
"/usr/lib",
"/usr/local/lib",
]
if GetOption('asan'):
ccflags = ["-fsanitize=address", "-fno-omit-frame-pointer"]
ldflags = ["-fsanitize=address"]
elif GetOption('ubsan'):
ccflags = ["-fsanitize=undefined"]
ldflags = ["-fsanitize=undefined"]
else:
ccflags = []
ldflags = []
ldflags += arch_ldflags
# AGNOS devices are memory-constrained during on-device C++ compiles.
# Building without debug symbols dramatically reduces peak clang memory and
# prevents lowmemorykiller SIGKILLs (Error -9) on large translation units.
use_debug_symbols = os.environ.get("SP_FORCE_DEBUG_SYMBOLS", "").lower() in {"1", "true", "yes", "on"}
debug_flag = "-g" if (not AGNOS or use_debug_symbols) else "-g0"
# no --as-needed on mac linker
if arch != "Darwin":
ldflags += ["-Wl,--as-needed", "-Wl,--no-undefined"]
ccflags_option = GetOption('ccflags')
if ccflags_option:
ccflags += ccflags_option.split(' ')
env = Environment(
ENV=lenv,
CCFLAGS=[
debug_flag,
"-fPIC",
"-O2",
"-Wunused",
"-Werror",
"-Wshadow",
"-Wno-unknown-warning-option",
"-Wno-inconsistent-missing-override",
"-Wno-c99-designator",
"-Wno-reorder-init-list",
"-Wno-vla-cxx-extension",
] + cflags + ccflags,
CPPPATH=cpppath + [
"#",
"#third_party/acados/include",
"#third_party/acados/include/blasfeo/include",
"#third_party/acados/include/hpipm/include",
"#third_party/catch2/include",
"#third_party/libyuv/include",
"#third_party/json11",
"#third_party/linux/include",
"#third_party",
"#msgq",
],
CC=cc,
CXX=cxx,
AR=ar,
RANLIB=ranlib,
LINKFLAGS=ldflags,
RPATH=rpath,
CFLAGS=["-std=gnu11"] + cflags,
CXXFLAGS=["-std=c++1z"] + cxxflags,
LIBPATH=libpath + [
"#msgq_repo",
"#third_party",
"#selfdrive/pandad",
"#common",
"#rednose/helpers",
],
CYTHONCFILESUFFIX=".cpp",
COMPILATIONDB_USE_ABSPATH=True,
REDNOSE_ROOT="#",
tools=["default", "cython", "compilation_db", "rednose_filter"],
toolpath=["#site_scons/site_tools", "#rednose_repo/site_scons/site_tools"],
)
if arch == "Darwin":
# RPATH is not supported on macOS, instead use the linker flags
darwin_rpath_link_flags = [f"-Wl,-rpath,{path}" for path in env["RPATH"]]
env["LINKFLAGS"] += darwin_rpath_link_flags
env.CompilationDatabase('compile_commands.json')
# Setup cache dir
cache_dir = os.environ.get("SP_SCONS_CACHE_DIR", "").strip()
if not cache_dir:
cache_dir = '/data/scons_cache' if AGNOS else '/tmp/scons_cache'
CacheDir(cache_dir)
Clean(["."], cache_dir)
node_interval = 5
node_count = 0
def progress_function(node):
global node_count
node_count += node_interval
sys.stderr.write("progress: %d\n" % node_count)
if os.environ.get('SCONS_PROGRESS'):
Progress(progress_function, interval=node_interval)
# Cython build environment
py_include = sysconfig.get_paths()['include']
if arch == "larch64" and platform.machine() not in ("aarch64", "arm64"):
tici_py_include = tici_libpath(f"/usr/include/python{sys.version_info.major}.{sys.version_info.minor}")
if os.path.isdir(tici_py_include):
py_include = tici_py_include
envCython = env.Clone()
envCython["CPPPATH"] += [py_include, np.get_include()]
envCython["CCFLAGS"] += ["-Wno-#warnings", "-Wno-shadow", "-Wno-deprecated-declarations"]
envCython["CCFLAGS"].remove("-Werror")
envCython["LIBS"] = []
if arch == "Darwin":
envCython["LINKFLAGS"] = ["-bundle", "-undefined", "dynamic_lookup"] + darwin_rpath_link_flags
else:
envCython["LINKFLAGS"] = arch_ldflags + ["-pthread", "-shared"]
np_version = SCons.Script.Value(np.__version__)
Export('envCython', 'np_version')
Export('env', 'arch', 'real_arch')
# Build common module
SConscript(['common/SConscript'])
Import('_common', '_gpucommon')
common = [_common, 'json11', 'zmq']
gpucommon = [_gpucommon]
Export('common', 'gpucommon')
# Build messaging (cereal + msgq + socketmaster + their dependencies)
# Enable swaglog include in submodules
env_swaglog = env.Clone()
env_swaglog['CXXFLAGS'].append('-DSWAGLOG="\\"common/swaglog.h\\""')
SConscript(['msgq_repo/SConscript'], exports={'env': env_swaglog})
SConscript(['opendbc_repo/SConscript'], exports={'env': env_swaglog})
SConscript(['cereal/SConscript'])
Import('socketmaster', 'msgq')
messaging = [socketmaster, msgq, 'capnp', 'kj',]
Export('messaging')
# Build other submodules
SConscript(['panda/SConscript'])
# Build rednose library
SConscript(['rednose/SConscript'])
# Build system services
SConscript([
'system/ubloxd/SConscript',
'system/loggerd/SConscript',
])
if arch == "larch64":
SConscript(['system/camerad/SConscript'])
# Build openpilot
SConscript(['third_party/SConscript'])
SConscript(['selfdrive/SConscript'])
if Dir('#tools/cabana/').exists() and GetOption('extras'):
SConscript(['tools/replay/SConscript'])
if arch != "larch64":
SConscript(['tools/cabana/SConscript'])
external_sconscript = GetOption('external_sconscript')
if external_sconscript:
SConscript([external_sconscript])
+5
View File
@@ -0,0 +1,5 @@
# Security Policy
## Reporting a Vulnerability
Suspected vulnerabilities can be reported to both `adeeb@comma.ai` and `security@comma.ai`.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-2
View File
@@ -1,2 +0,0 @@
src/*
out/*
Binary file not shown.
BIN
View File
Binary file not shown.
-122
View File
@@ -1,122 +0,0 @@
#!/usr/bin/env python2.7
import os
import sys
import glob
import shutil
import urllib2
import hashlib
import subprocess
EXTERNAL_PATH = os.path.dirname(os.path.abspath(__file__))
if os.path.exists("/init.qcom.rc"):
# android
APKPATCH = os.path.join(EXTERNAL_PATH, 'tools/apkpatch_android')
SIGNAPK = os.path.join(EXTERNAL_PATH, 'tools/signapk_android')
else:
APKPATCH = os.path.join(EXTERNAL_PATH, 'tools/apkpatch')
SIGNAPK = os.path.join(EXTERNAL_PATH, 'tools/signapk')
APKS = {
'com.waze': {
'src': 'https://apkcache.s3.amazonaws.com/com.waze_1021278.apk',
'src_sha256': 'f00957e93e2389f9e30502ac54994b98ac769314b0963c263d4e8baa625ab0c2',
'patch': 'com.waze.apkpatch',
'out_sha256': '9ec8b0ea3c78c666342865b1bfb66e368a3f5c911df2ad12835206ec8b19f444'
},
'com.spotify.music': {
'src': 'https://apkcache.s3.amazonaws.com/com.spotify.music_24382006.apk',
'src_sha256': '0610fea68ee7ba5f8e4e0732ad429d729dd6cbb8bc21222c4c99db6cb09fbff4',
'patch': 'com.spotify.music.apkpatch',
'out_sha256': '5a3d6f478c7e40403a98ccc8906d7e0ae12b06543b41f5df52149dd09c647c11'
},
}
def sha256_path(path):
with open(path, 'rb') as f:
return hashlib.sha256(f.read()).hexdigest()
def remove(path):
try:
os.remove(path)
except OSError:
pass
def process(download, patch):
# clean up any junk apks
for out_apk in glob.glob(os.path.join(EXTERNAL_PATH, 'out/*.apk')):
app = os.path.basename(out_apk)[:-4]
if app not in APKS:
print "remove junk", out_apk
remove(out_apk)
complete = True
for k,v in APKS.iteritems():
apk_path = os.path.join(EXTERNAL_PATH, 'out', k+'.apk')
print "checking", apk_path
if os.path.exists(apk_path) and sha256_path(apk_path) == v['out_sha256']:
# nothing to do
continue
complete = False
remove(apk_path)
src_path = os.path.join(EXTERNAL_PATH, 'src', v['src_sha256'])
if not os.path.exists(src_path) or sha256_path(src_path) != v['src_sha256']:
if not download:
continue
print "downloading", v['src'], "to", src_path
# download it
resp = urllib2.urlopen(v['src'])
data = resp.read()
with open(src_path, 'wb') as src_f:
src_f.write(data)
if sha256_path(src_path) != v['src_sha256']:
print "download was corrupted..."
continue
if not patch:
continue
# ignoring lots of TOCTTOU here...
apk_temp = "/tmp/"+k+".patched"
remove(apk_temp)
apk_temp2 = "/tmp/"+k+".signed"
remove(apk_temp2)
try:
print "patching", v['patch']
subprocess.check_call([APKPATCH, 'apply', src_path, apk_temp, os.path.join(EXTERNAL_PATH, v['patch'])])
print "signing", apk_temp
subprocess.check_call([SIGNAPK,
os.path.join(EXTERNAL_PATH, 'tools/certificate.pem'), os.path.join(EXTERNAL_PATH, 'tools/key.pk8'),
apk_temp, apk_temp2])
out_sha256 = sha256_path(apk_temp2) if os.path.exists(apk_temp2) else None
if out_sha256 == v['out_sha256']:
print "done", apk_path
shutil.move(apk_temp2, apk_path)
else:
print "patch was corrupted", apk_temp2, out_sha256
finally:
remove(apk_temp)
remove(apk_temp2)
return complete
if __name__ == "__main__":
ret = True
if len(sys.argv) == 2 and sys.argv[1] == "download":
ret = process(True, False)
elif len(sys.argv) == 2 and sys.argv[1] == "patch":
ret = process(False, True)
else:
ret = process(True, True)
sys.exit(0 if ret else 1)
Binary file not shown.
-7
View File
@@ -1,7 +0,0 @@
#!/system/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
export LD_LIBRARY_PATH=/system/lib64
export CLASSPATH="$DIR"/ApkPatch.android.jar
exec app_process "$DIR" ApkPatch "$@"
-17
View File
@@ -1,17 +0,0 @@
-----BEGIN CERTIFICATE-----
MIICtTCCAh4CCQDm79UqF+Dc5zANBgkqhkiG9w0BAQUFADCBnjELMAkGA1UEBhMC
SUQxEzARBgNVBAgTCkphd2EgQmFyYXQxEDAOBgNVBAcTB0JhbmR1bmcxEjAQBgNV
BAoTCUxvbmRhdGlnYTETMBEGA1UECxMKQW5kcm9pZERldjEaMBgGA1UEAxMRTG9y
ZW5zaXVzIFcuIEwuIFQxIzAhBgkqhkiG9w0BCQEWFGxvcmVuekBsb25kYXRpZ2Eu
bmV0MB4XDTEwMDUwNTA5MjEzOFoXDTEzMDEyODA5MjEzOFowgZ4xCzAJBgNVBAYT
AklEMRMwEQYDVQQIEwpKYXdhIEJhcmF0MRAwDgYDVQQHEwdCYW5kdW5nMRIwEAYD
VQQKEwlMb25kYXRpZ2ExEzARBgNVBAsTCkFuZHJvaWREZXYxGjAYBgNVBAMTEUxv
cmVuc2l1cyBXLiBMLiBUMSMwIQYJKoZIhvcNAQkBFhRsb3JlbnpAbG9uZGF0aWdh
Lm5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAy2oWtbdVXMHGiS6cA3qi
3VfZt5Vz9jTlux+TEcGx5h18ZKwclyo+z2B0L/p5bYdnrTdFEiD7IxvX+h3lu0JV
B9rdXZdyrzXNOw5YFrsn2k7hKvB8KEBaga1gZEwodlc6N14H3FbZdZkIA9V716Pu
e5CWBZ2VqU03lUJmKnpH8c8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQBpNgXh8dw9
uMjZxzLUXovV5ptHd61jAcZlQlffqPsz6/2QNfIShVdGH9jkm0IudfKkbvvOKive
a77t9c4sDh2Sat2L/rx6BfTuS1+y9wFr1Ee8Rrr7wGHhRkx2qqGrXGVWqXn8aE3E
P6e7BTPF0ibS+tG8cdDPEisqGFxw36nTNQ==
-----END CERTIFICATE-----
BIN
View File
Binary file not shown.
Binary file not shown.
-7
View File
@@ -1,7 +0,0 @@
#!/system/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
export LD_LIBRARY_PATH=/system/lib64
export CLASSPATH="$DIR"/signapk.android.jar
exec app_process "$DIR" com.android.signapk.SignApk "$@"
Executable
+109
View File
@@ -0,0 +1,109 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
original_args=("$@")
shortcut_targets=()
passthrough_args=()
shortcut_includes_panda=0
panda_generated_files=(
"panda/board/obj/gitversion.h"
"panda/board/obj/version"
)
add_panda_targets() {
local variants=(
panda
panda_h7
panda_remote
panda_h7_remote
panda_hkg_remote
panda_h7_hkg_remote
panda_can_ignition_only
panda_h7_can_ignition_only
panda_remote_can_ignition_only
panda_h7_remote_can_ignition_only
panda_hkg_remote_can_ignition_only
panda_h7_hkg_remote_can_ignition_only
panda_jungle_h7
body_h7
)
local variant
for variant in "${variants[@]}"; do
shortcut_targets+=("panda/board/obj/${variant}.bin.signed")
done
}
while [[ $# -gt 0 ]]; do
case "$1" in
--params|-params|-param)
shortcut_targets+=("common/params_pyx.so")
;;
--panda|-panda)
shortcut_includes_panda=1
add_panda_targets
;;
--cereal|-cereal)
shortcut_targets+=(
"cereal/libcereal.a"
"cereal/libsocketmaster.a"
"cereal/messaging/bridge"
"cereal/services.h"
)
;;
*)
if [[ "$1" =~ ^[0-9]+$ ]]; then
passthrough_args+=("-j$1")
else
passthrough_args+=("$1")
fi
;;
esac
shift
done
if [[ "${#shortcut_targets[@]}" -gt 0 ]]; then
scons_args=("--no-scrub")
scons_args+=("${shortcut_targets[@]}")
if [[ "${#passthrough_args[@]}" -gt 0 ]]; then
scons_args+=("${passthrough_args[@]}")
fi
if [[ "${shortcut_includes_panda}" -eq 1 ]]; then
exec "${ROOT_DIR}/scripts/laptop_device_build.sh" scons "${scons_args[@]}"
fi
tmpdir="$(mktemp -d)"
for path in "${panda_generated_files[@]}"; do
if [[ -e "${ROOT_DIR}/${path}" ]]; then
cp -p "${ROOT_DIR}/${path}" "${tmpdir}/${path//\//__}"
else
touch "${tmpdir}/${path//\//__}.missing"
fi
done
if "${ROOT_DIR}/scripts/laptop_device_build.sh" scons "${scons_args[@]}"; then
status=0
else
status=$?
fi
for path in "${panda_generated_files[@]}"; do
if [[ -e "${tmpdir}/${path//\//__}.missing" ]]; then
rm -f "${ROOT_DIR}/${path}"
else
cp -p "${tmpdir}/${path//\//__}" "${ROOT_DIR}/${path}"
fi
done
rm -rf "${tmpdir}"
exit "${status}"
fi
if [[ "${#original_args[@]}" -gt 0 ]]; then
exec "${ROOT_DIR}/scripts/laptop_device_build.sh" build "${original_args[@]}"
fi
exec "${ROOT_DIR}/scripts/laptop_device_build.sh" build
Executable
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
exec "${ROOT_DIR}/scripts/host_tool_runner.sh" c3 "$@"
Executable
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
exec "${ROOT_DIR}/scripts/host_tool_runner.sh" c4 "$@"
-1
View File
@@ -1 +0,0 @@
gen
-52
View File
@@ -1,52 +0,0 @@
PWD := $(shell pwd)
SRCS := log.capnp car.capnp
GENS := gen/cpp/car.capnp.c++ gen/cpp/log.capnp.c++
UNAME_M ?= $(shell uname -m)
# only generate C++ for docker tests
ifneq ($(OPTEST),1)
GENS += gen/c/car.capnp.c gen/c/log.capnp.c gen/c/c++.capnp.h gen/c/java.capnp.h
# Dont build java on the phone...
ifeq ($(UNAME_M),x86_64)
GENS += gen/java/Car.java gen/java/Log.java
endif
endif
ifeq ($(UNAME_M),aarch64)
CAPNPC=PATH=$(PWD)/../phonelibs/capnp-cpp/aarch64/bin/:$$PATH capnpc
else
CAPNPC=capnpc
endif
.PHONY: all
all: $(GENS)
.PHONY: clean
clean:
rm -rf gen
gen/c/%.capnp.c: %.capnp
@echo "[ CAPNPC C ] $@"
mkdir -p gen/c/
$(CAPNPC) '$<' -o c:gen/c/
gen/cpp/%.capnp.c++: %.capnp
@echo "[ CAPNPC C++ ] $@"
mkdir -p gen/cpp/
$(CAPNPC) '$<' -o c++:gen/cpp/
gen/java/Car.java gen/java/Log.java: $(SRCS)
@echo "[ CAPNPC java ] $@"
mkdir -p gen/java/
$(CAPNPC) $^ -o java:gen/java
# c-capnproto needs some empty headers
gen/c/c++.capnp.h gen/c/java.capnp.h:
mkdir -p gen/c/
touch '$@'
+95
View File
@@ -0,0 +1,95 @@
# What is cereal?
cereal is the messaging system for openpilot. It uses [msgq](https://github.com/commaai/msgq) as a pub/sub backend, and [Cap'n proto](https://capnproto.org/capnp-tool.html) for serialization of the structs.
## Messaging Spec
You'll find the message types in [log.capnp](log.capnp). It uses [Cap'n proto](https://capnproto.org/capnp-tool.html) and defines one struct called `Event`.
All `Events` have a `logMonoTime` and a `valid`. Then a big union defines the packet type.
### Best Practices
- **All fields must describe quantities in SI units**, unless otherwise specified in the field name.
- In the context of the message they are in, field names should be completely unambiguous.
- All values should be easy to plot and be human-readable with minimal parsing.
### Maintaining backwards-compatibility
When making changes to the messaging spec you want to maintain backwards-compatibility, such that old logs can
be parsed with a new version of cereal. Adding structs and adding members to structs is generally safe, most other
things are not. Read more details [here](https://capnproto.org/language.html).
### Custom forks
Forks of [openpilot](https://github.com/commaai/openpilot) might want to add things to the messaging
spec, however this could conflict with future changes made in mainline cereal/openpilot. Rebasing against mainline openpilot
then means breaking backwards-compatibility with all old logs of your fork. So we added reserved events in
[custom.capnp](custom.capnp) that we will leave empty in mainline cereal/openpilot. **If you only modify those, you can ensure your
fork will remain backwards-compatible with all versions of mainline openpilot and your fork.**
An example of compatible changes:
```diff
diff --git a/cereal/custom.capnp b/cereal/custom.capnp
index 3348e859e..3365c7b98 100644
--- a/cereal/custom.capnp
+++ b/cereal/custom.capnp
@@ -10,7 +10,11 @@ $Cxx.namespace("cereal");
# DO rename the structs
# DON'T change the identifier (e.g. @0x81c2f05a394cf4af)
-struct CustomReserved0 @0x81c2f05a394cf4af {
+struct SteeringInfo @0x81c2f05a394cf4af {
+ active @0 :Bool;
+ steeringAngleDeg @1 :Float32;
+ steeringRateDeg @2 :Float32;
+ steeringAccelDeg @3 :Float32;
}
struct CustomReserved1 @0xaedffd8f31e7b55d {
diff --git a/cereal/log.capnp b/cereal/log.capnp
index 1209f3fd9..b189f58b6 100644
--- a/cereal/log.capnp
+++ b/cereal/log.capnp
@@ -2558,14 +2558,14 @@ struct Event {
# DO change the name of the field
# DON'T change anything after the "@"
- customReservedRawData0 @124 :Data;
+ rawCanData @124 :Data;
customReservedRawData1 @125 :Data;
customReservedRawData2 @126 :Data;
# DO change the name of the field and struct
# DON'T change the ID (e.g. @107)
# DON'T change which struct it points to
- customReserved0 @107 :Custom.CustomReserved0;
+ steeringInfo @107 :Custom.SteeringInfo;
customReserved1 @108 :Custom.CustomReserved1;
customReserved2 @109 :Custom.CustomReserved2;
customReserved3 @110 :Custom.CustomReserved3;
```
---
Example
---
```python
import cereal.messaging as messaging
# in subscriber
sm = messaging.SubMaster(['sensorEvents'])
while 1:
sm.update()
print(sm['sensorEvents'])
```
```python
# in publisher
pm = messaging.PubMaster(['sensorEvents'])
dat = messaging.new_message('sensorEvents', size=1)
dat.sensorEvents[0] = {"gyro": {"v": [0.1, -0.1, 0.1]}}
pm.send('sensorEvents', dat)
```
+28
View File
@@ -0,0 +1,28 @@
import subprocess
Import('env', 'common', 'msgq')
cereal_dir = Dir('.')
gen_dir = Dir('gen')
# Build cereal
schema_files = ['log.capnp', 'car.capnp', 'legacy.capnp', 'custom.capnp']
schema_outputs = env.Command([f'gen/cpp/{s}.c++' for s in schema_files] + [f'gen/cpp/{s}.h' for s in schema_files],
schema_files,
f"capnpc --src-prefix={cereal_dir.path} $SOURCES -o c++:{gen_dir.path}/cpp/")
# capnpc embeds an exact compiler-version guard in every generated C++ header.
# Include the tool version in the dependency signature so SCons cannot reuse
# generated headers from a cache populated by another AGNOS/toolchain version.
capnp_compiler_version = subprocess.check_output(['capnpc', '--version'], encoding='utf-8').strip()
env.Depends(schema_outputs, env.Value(capnp_compiler_version))
cereal = env.Library('cereal', [f'gen/cpp/{s}.c++' for s in schema_files])
# Build messaging
services_h = env.Command(['services.h'], ['services.py'], 'python3 ' + cereal_dir.path + '/services.py > $TARGET')
env.Program('messaging/bridge', ['messaging/bridge.cc', 'messaging/msgq_to_zmq.cc'], LIBS=[msgq, common, 'pthread'])
socketmaster = env.Library('socketmaster', ['messaging/socketmaster.cc'])
Export('cereal', 'socketmaster')
+4 -13
View File
@@ -1,20 +1,11 @@
import os
import capnp
from importlib.resources import as_file, files
CEREAL_PATH = os.path.dirname(os.path.abspath(__file__))
capnp.remove_import_hook()
if os.getenv("NEWCAPNP"):
import tempfile
import pyximport
importers = pyximport.install(build_dir=os.path.join(tempfile.gettempdir(), ".pyxbld"))
try:
import cereal.gen.cython.log_capnp_cython as log
import cereal.gen.cython.car_capnp_cython as car
finally:
pyximport.uninstall(*importers)
del importers
else:
with as_file(files("cereal")) as fspath:
CEREAL_PATH = fspath.as_posix()
log = capnp.load(os.path.join(CEREAL_PATH, "log.capnp"))
car = capnp.load(os.path.join(CEREAL_PATH, "car.capnp"))
custom = capnp.load(os.path.join(CEREAL_PATH, "custom.capnp"))
-321
View File
@@ -1,321 +0,0 @@
using Cxx = import "c++.capnp";
$Cxx.namespace("cereal");
using Java = import "java.capnp";
$Java.package("ai.comma.openpilot.cereal");
$Java.outerClassname("Car");
@0x8e2af1e708af8b8d;
# ******* events causing controls state machine transition *******
struct CarEvent @0x9b1657f34caf3ad3 {
name @0 :EventName;
enable @1 :Bool;
noEntry @2 :Bool;
warning @3 :Bool;
userDisable @4 :Bool;
softDisable @5 :Bool;
immediateDisable @6 :Bool;
preEnable @7 :Bool;
permanent @8 :Bool;
enum EventName @0xbaa8c5d505f727de {
# TODO: copy from error list
commIssue @0;
steerUnavailable @1;
brakeUnavailable @2;
gasUnavailable @3;
wrongGear @4;
doorOpen @5;
seatbeltNotLatched @6;
espDisabled @7;
wrongCarMode @8;
steerTempUnavailable @9;
reverseGear @10;
buttonCancel @11;
buttonEnable @12;
pedalPressed @13;
cruiseDisabled @14;
radarCommIssue @15;
dataNeeded @16;
speedTooLow @17;
outOfSpace @18;
overheat @19;
calibrationInProgress @20;
calibrationInvalid @21;
controlsMismatch @22;
pcmEnable @23;
pcmDisable @24;
noTarget @25;
radarFault @26;
modelCommIssue @27;
brakeHold @28;
parkBrake @29;
manualRestart @30;
lowSpeedLockout @31;
}
}
# ******* main car state @ 100hz *******
# all speeds in m/s
struct CarState {
errorsDEPRECATED @0 :List(CarEvent.EventName);
events @13 :List(CarEvent);
# car speed
vEgo @1 :Float32; # best estimate of speed
aEgo @16 :Float32; # best estimate of acceleration
vEgoRaw @17 :Float32; # unfiltered speed from CAN sensors
yawRate @22 :Float32; # best estimate of yaw rate
standstill @18 :Bool;
wheelSpeeds @2 :WheelSpeeds;
# gas pedal, 0.0-1.0
gas @3 :Float32; # this is user + computer
gasPressed @4 :Bool; # this is user pedal only
# brake pedal, 0.0-1.0
brake @5 :Float32; # this is user pedal only
brakePressed @6 :Bool; # this is user pedal only
brakeLights @19 :Bool;
# steering wheel
steeringAngle @7 :Float32; # deg
steeringRate @15 :Float32; # deg/s
steeringTorque @8 :Float32; # TODO: standardize units
steeringPressed @9 :Bool; # if the user is using the steering wheel
# cruise state
cruiseState @10 :CruiseState;
# gear
gearShifter @14 :GearShifter;
# button presses
buttonEvents @11 :List(ButtonEvent);
leftBlinker @20 :Bool;
rightBlinker @21 :Bool;
genericToggle @23 :Bool;
# lock info
doorOpen @24 :Bool;
seatbeltUnlatched @25 :Bool;
# which packets this state came from
canMonoTimes @12: List(UInt64);
struct WheelSpeeds {
# optional wheel speeds
fl @0 :Float32;
fr @1 :Float32;
rl @2 :Float32;
rr @3 :Float32;
}
struct CruiseState {
enabled @0 :Bool;
speed @1 :Float32;
available @2 :Bool;
speedOffset @3 :Float32;
standstill @4 :Bool;
}
enum GearShifter {
unknown @0;
park @1;
drive @2;
neutral @3;
reverse @4;
sport @5;
low @6;
brake @7;
}
# send on change
struct ButtonEvent {
pressed @0 :Bool;
type @1 :Type;
enum Type {
unknown @0;
leftBlinker @1;
rightBlinker @2;
accelCruise @3;
decelCruise @4;
cancel @5;
altButton1 @6;
altButton2 @7;
altButton3 @8;
}
}
}
# ******* radar state @ 20hz *******
struct RadarState {
errors @0 :List(Error);
points @1 :List(RadarPoint);
# which packets this state came from
canMonoTimes @2 :List(UInt64);
enum Error {
commIssue @0;
fault @1;
}
# similar to LiveTracks
# is one timestamp valid for all? I think so
struct RadarPoint {
trackId @0 :UInt64; # no trackId reuse
# these 3 are the minimum required
dRel @1 :Float32; # m from the front bumper of the car
yRel @2 :Float32; # m
vRel @3 :Float32; # m/s
# these are optional and valid if they are not NaN
aRel @4 :Float32; # m/s^2
yvRel @5 :Float32; # m/s
# some radars flag measurements VS estimates
measured @6 :Bool;
}
}
# ******* car controls @ 100hz *******
struct CarControl {
# must be true for any actuator commands to work
enabled @0 :Bool;
gasDEPRECATED @1 :Float32;
brakeDEPRECATED @2 :Float32;
steeringTorqueDEPRECATED @3 :Float32;
actuators @6 :Actuators;
cruiseControl @4 :CruiseControl;
hudControl @5 :HUDControl;
struct Actuators {
# range from 0.0 - 1.0
gas @0: Float32;
brake @1: Float32;
# range from -1.0 - 1.0
steer @2: Float32;
}
struct CruiseControl {
cancel @0: Bool;
override @1: Bool;
speedOverride @2: Float32;
accelOverride @3: Float32;
}
struct HUDControl {
speedVisible @0: Bool;
setSpeed @1: Float32;
lanesVisible @2: Bool;
leadVisible @3: Bool;
visualAlert @4: VisualAlert;
audibleAlert @5: AudibleAlert;
enum VisualAlert {
# these are the choices from the Honda
# map as good as you can for your car
none @0;
fcw @1;
steerRequired @2;
brakePressed @3;
wrongGear @4;
seatbeltUnbuckled @5;
speedTooHigh @6;
}
enum AudibleAlert {
# these are the choices from the Honda
# map as good as you can for your car
none @0;
beepSingle @1;
beepTriple @2;
beepRepeated @3;
chimeSingle @4;
chimeDouble @5;
chimeRepeated @6;
chimeContinuous @7;
}
}
}
# ****** car param ******
struct CarParams {
carName @0 :Text;
radarNameDEPRECATED @1 :Text;
carFingerprint @2 :Text;
enableSteer @3 :Bool;
enableGas @4 :Bool;
enableBrake @5 :Bool;
enableCruise @6 :Bool;
enableCamera @26 :Bool;
enableDsu @27 :Bool; # driving support unit
enableApgs @28 :Bool; # advanced parking guidance system
minEnableSpeed @17 :Float32;
safetyModel @18 :Int16;
safetyParam @41 :Int16;
steerMaxBP @19 :List(Float32);
steerMaxV @20 :List(Float32);
gasMaxBP @21 :List(Float32);
gasMaxV @22 :List(Float32);
brakeMaxBP @23 :List(Float32);
brakeMaxV @24 :List(Float32);
longPidDeadzoneBP @32 :List(Float32);
longPidDeadzoneV @33 :List(Float32);
enum SafetyModels {
# does NOT match board setting
noOutput @0;
honda @1;
toyota @2;
elm327 @3;
}
# things about the car in the manual
mass @7 :Float32; # [kg] running weight
wheelbase @8 :Float32; # [m] distance from rear to front axle
centerToFront @9 :Float32; # [m] GC distance to front axle
steerRatio @10 :Float32; # [] ratio between front wheels and steering wheel angles
steerRatioRear @11 :Float32; # [] rear steering ratio wrt front steering (usually 0)
# things we can derive
rotationalInertia @12 :Float32; # [kg*m2] body rotational inertia
tireStiffnessFront @13 :Float32; # [N/rad] front tire coeff of stiff
tireStiffnessRear @14 :Float32; # [N/rad] rear tire coeff of stiff
# Kp and Ki for the lateral control
steerKp @15 :Float32;
steerKi @16 :Float32;
steerKf @25 :Float32;
# Kp and Ki for the longitudinal control
longitudinalKpBP @36 :List(Float32);
longitudinalKpV @37 :List(Float32);
longitudinalKiBP @38 :List(Float32);
longitudinalKiV @39 :List(Float32);
steerLimitAlert @29 :Bool;
vEgoStopping @30 :Float32; # Speed at which the car goes into stopping state
directAccelControl @31 :Bool; # Does the car have direct accel control or just gas/brake
stoppingControl @34 :Bool; # Does the car allows full control even at lows speeds when stopping
startAccel @35 :Float32; # Required acceleraton to overcome creep braking
steerRateCost @40 :Float32; # Lateral MPC cost on steering rate
}
+1
View File
@@ -0,0 +1 @@
../opendbc_repo/opendbc/car/car.capnp
+444
View File
@@ -0,0 +1,444 @@
using Cxx = import "./include/c++.capnp";
$Cxx.namespace("cereal");
using Car = import "car.capnp";
@0xb526ba661d550a59;
# custom.capnp: a home for empty structs reserved for custom forks
# These structs are guaranteed to remain reserved and empty in mainline
# cereal, so use these if you want custom events in your fork.
# DO rename the structs
# DON'T change the identifier (e.g. @0x81c2f05a394cf4af)
struct StarPilotCarControl @0x81c2f05a394cf4af {
hudControl @0 :HUDControl;
struct HUDControl {
audibleAlert @0 :AudibleAlert;
enum AudibleAlert {
none @0;
engage @1;
disengage @2;
refuse @3;
warningSoft @4;
warningImmediate @5;
prompt @6;
promptRepeat @7;
promptDistracted @8;
# Random Events
angry @9;
continued @10;
dejaVu @11;
doc @12;
fart @13;
firefox @14;
goat @15;
hal9000 @16;
mail @17;
nessie @18;
noice @19;
startup @20;
thisIsFine @21;
uwu @22;
}
}
}
struct StarPilotCarParams @0xaedffd8f31e7b55d {
alternativeExperience @0 :Int16;
canUsePedal @1 :Bool;
canUseSDSU @2 :Bool;
flags @3 :UInt32;
isHDA2 @4 :Bool;
openpilotLongitudinalControlDisabled @5 :Bool;
safetyConfigs @6 :List(SafetyConfig);
pcmCruiseSpeed @7 :Bool = true;
redneckCruiseAvailable @8 :Bool;
struct SafetyConfig {
safetyParam @0 :UInt16;
}
}
struct StarPilotCarState @0xf35cc4560bbf6ec2 {
accelPressed @0 :Bool;
alwaysOnLateralEnabled @1 :Bool;
brakeLights @2 :Bool;
dashboardSpeedLimit @3 :Float32;
decelPressed @4 :Bool;
distancePressed @5 :Bool;
distanceLongPressed @6 :Bool;
distanceVeryLongPressed @7 :Bool;
ecoGear @8 :Bool;
forceCoast @9 :Bool;
isParked @10 :Bool;
pauseLateral @11 :Bool;
pauseLongitudinal @12 :Bool;
sportGear @13 :Bool;
trafficModeEnabled @14 :Bool;
gasStack @15 :Bool; # Compatibility with older StarPilot payloads
modePressed @16 :Bool;
customPressed @17 :Bool;
alwaysOnLateralAllowed @18 :Bool;
dashboardStopSign @19 :UInt8; # 0 = no signal / platform doesn't publish
cancelPressed @20 :Bool;
cancelLongPressed @21 :Bool;
cancelVeryLongPressed @22 :Bool;
pedalMaxRegen @23 :Bool; # pedal at max regen, driver should use brake for more decel
pedalLongActive @24 :Bool; # Pre-AP pedal longitudinal mode is active (enableLongControl)
teslaCCEngaged @25 :Bool; # rising edge of stock Tesla CC engaging (no-pedal mode)
teslaCCDisengaged @26 :Bool; # falling edge of stock Tesla CC
teslaCCNotArmed @27 :Bool; # lateral engaged but DI_cruiseState != STANDBY/ENABLED
accelHardCruise @28 :Bool; # current/releasing accel cruise button came from GM hard-press signal
decelHardCruise @29 :Bool; # current/releasing decel cruise button came from GM hard-press signal
pulseAndGlide @30 :Bool; # developer-only wheel-button pulse-and-glide mode is enabled
}
struct StarPilotDeviceState @0xda96579883444c35 {
freeSpace @0 :Int16;
usedSpace @1 :Int16;
}
struct StarPilotModelDataV2 @0x80ae746ee2596b11 {
turnDirection @0 :TurnDirection;
enum TurnDirection {
none @0;
turnLeft @1;
turnRight @2;
}
}
struct StarPilotOnroadEvents @0xa5cd762cd951a455 {
events @0 :List(StarPilotOnroadEvent);
}
struct StarPilotOnroadEvent @0xe344718567f9ce71 {
name @0 :EventName;
enable @1 :Bool;
noEntry @2 :Bool;
warning @3 :Bool;
userDisable @4 :Bool;
softDisable @5 :Bool;
immediateDisable @6 :Bool;
preEnable @7 :Bool;
permanent @8 :Bool;
overrideLateral @9 :Bool;
overrideLongitudinal @10 :Bool;
enum EventName {
blockUser @0;
customStartupAlert @1;
forcingStop @2;
goatSteerSaturated @3;
greenLight @4;
holidayActive @5;
laneChangeBlockedLoud @6;
leadDeparting @7;
noLaneAvailable @8;
nnffLoaded @9;
openpilotCrashed @10;
pedalInterceptorNoBrake @11;
speedLimitChanged @12;
trafficModeActive @13;
trafficModeInactive @14;
turningLeft @15;
turningRight @16;
# Random Events
accel30 @17;
accel35 @18;
accel40 @19;
dejaVuCurve @20;
firefoxSteerSaturated @21;
hal9000 @22;
openpilotCrashedRandomEvent @23;
thisIsFineSteerSaturated @24;
toBeContinued @25;
vCruise69 @26;
yourFrogTriedToKillMe @27;
youveGotMail @28;
switchbackModeActive @29;
switchbackModeInactive @30;
lkasEnable @31;
lkasDisable @32;
lateralManeuver @33;
pedalCruiseEnabled @34;
pedalCruiseDisabled @35;
pedalMaxRegen @36;
teslaCCEngaged @37;
teslaCCDisengaged @38;
teslaCCNotArmed @39;
pedalNotCalibrated @40;
}
}
struct StarPilotPlan @0xf98d843bfd7004a3 {
accelerationJerk @0 :Float32;
cscControllingSpeed @1 :Bool;
cscSpeed @2 :Float32;
cscTraining @3 :Bool;
dangerFactor @4 :Float32;
dangerJerk @5 :Float32;
desiredFollowDistance @6 :Int64;
experimentalMode @7 :Bool;
forcingStop @8 :Bool;
forcingStopLength @9 :Float32;
starpilotEvents @10 :List(StarPilotOnroadEvent);
starpilotToggles @11 :Text;
increasedStoppedDistance @12 :Float32;
lateralCheck @13 :Bool;
laneWidthLeft @14 :Float32;
laneWidthRight @15 :Float32;
maxAcceleration @16 :Float32;
minAcceleration @17 :Float32;
redLight @18 :Bool;
roadCurvature @19 :Float32;
slcMapSpeedLimit @20 :Float32;
slcMapboxSpeedLimit @21 :Float32;
slcNextSpeedLimit @22 :Float32;
slcOverriddenSpeed @23 :Float32;
slcSpeedLimit @24 :Float32;
slcSpeedLimitOffset @25 :Float32;
slcSpeedLimitSource @26 :Text;
speedJerk @27 :Float32;
speedLimitChanged @28 :Bool;
tFollow @29 :Float32;
themeUpdated @30 :Bool;
unconfirmedSlcSpeedLimit @31 :Float32;
vCruise @32 :Float32;
weatherDaytime @33 :Bool;
weatherId @34 :Int16;
disableThrottle @35 :Bool;
trackingLead @36 :Bool;
stopSignConfirmed @37 :Bool;
pulseGlideCoasting @38 :Bool; # developer-only P&G phase for on-road status UI
}
struct StarPilotRadarState @0xb86e6369214c01c8 {
leadLeft @0 :LeadData;
leadRight @1 :LeadData;
adjacentStopped @2 :AdjacentStopped;
# A vehicle in an adjacent lane that was observed MOVING and then came to rest.
# Distinct from leadLeft/leadRight, which are moving-target-only by design.
struct AdjacentStopped {
status @0 :Bool;
dRel @1 :Float32;
yRel @2 :Float32;
radarTrackId @3 :Int32 = -1;
}
struct LeadData {
dRel @0 :Float32;
yRel @1 :Float32;
vRel @2 :Float32;
aRel @3 :Float32;
vLead @4 :Float32;
dPath @6 :Float32;
vLat @7 :Float32;
vLeadK @8 :Float32;
aLeadK @9 :Float32;
fcw @10 :Bool;
status @11 :Bool;
aLeadTau @12 :Float32;
modelProb @13 :Float32;
radar @14 :Bool;
radarTrackId @15 :Int32 = -1;
aLeadDEPRECATED @5 :Float32;
}
}
struct StarPilotSelfdriveState @0xf416ec09499d9d19 {
alertText1 @0 :Text;
alertText2 @1 :Text;
alertStatus @2 :AlertStatus;
alertSize @3 :AlertSize;
alertType @4 :Text;
alertSound @5 :Car.CarControl.HUDControl.AudibleAlert;
enum AlertStatus {
normal @0;
userPrompt @1;
critical @2;
starpilot @3;
}
enum AlertSize {
none @0;
small @1;
mid @2;
full @3;
}
}
struct CustomReserved9 @0xa1680744031fdb2d {
slotId @0 :Text;
slotName @1 :Text;
variant @2 :Text;
variantLabel @3 :Text;
reason @4 :Text;
wallTimeNanos @5 :UInt64;
}
struct StarPilotLateralManeuverPlanDEPRECATED @0xcb9fd56c7057593a {
desiredCurvature @0 :Float32; # 1/m
}
struct StarPilotLateralState @0xc2243c65e0340384 {
active @0 :Bool;
frictionThreshold @1 :Float32;
frictionScale @2 :Float32;
feedforward @3 :Float32;
frictionJerk @4 :Float32;
frictionJerkDeadzone @5 :Float32;
lowSpeedFactor @6 :Float32;
unwindDetected @7 :Bool;
}
struct CustomReserved12 @0x9ccdc8676701b412 {
}
struct CustomReserved13 @0xcd96dafb67a082d0 {
}
struct CustomReserved14 @0xb057204d7deadf3f {
}
struct CustomReserved15 @0xbd443b539493bc68 {
}
struct CustomReserved16 @0xfc6241ed8877b611 {
}
struct MapdDownloadLocationDetails @0xff889853e7b0987f {
location @0 :Text;
totalFiles @1 :UInt32;
downloadedFiles @2 :UInt32;
}
struct MapdDownloadProgress @0xfaa35dcac85073a2 {
active @0 :Bool;
cancelled @1 :Bool;
totalFiles @2 :UInt32;
downloadedFiles @3 :UInt32;
locations @4 :List(Text);
locationDetails @5 :List(MapdDownloadLocationDetails);
}
struct MapdPathPoint @0xd6f78acca1bc3939 {
latitude @0 :Float64;
longitude @1 :Float64;
curvature @2 :Float32;
targetVelocity @3 :Float32;
}
struct MapdExtendedOut @0xa30662f84033036c {
downloadProgress @0 :MapdDownloadProgress;
settings @1 :Text;
path @2 :List(MapdPathPoint);
}
enum MapdInputType {
download @0;
setTargetLateralAccel @1;
setSpeedLimitOffset @2;
setSpeedLimitControl @3;
setMapCurveSpeedControl @4;
setVisionCurveSpeedControl @5;
setLogLevel @6;
setVisionCurveTargetLatA @7;
setVisionCurveMinTargetV @8;
reloadSettings @9;
saveSettings @10;
setEnableSpeed @11;
setVisionCurveUseEnableSpeed @12;
setMapCurveUseEnableSpeed @13;
setSpeedLimitUseEnableSpeed @14;
setHoldLastSeenSpeedLimit @15;
setTargetSpeedJerk @16;
setTargetSpeedAccel @17;
setTargetSpeedTimeOffset @18;
setDefaultLaneWidth @19;
setMapCurveTargetLatA @20;
loadDefaultSettings @21;
loadRecommendedSettings @22;
setSlowDownForNextSpeedLimit @23;
setSpeedUpForNextSpeedLimit @24;
setHoldSpeedLimitWhileChangingSetSpeed @25;
loadPersistentSettings @26;
cancelDownload @27;
setLogJson @28;
setLogSource @29;
setExternalSpeedLimitControl @30;
setExternalSpeedLimit @31;
setSpeedLimitPriority @32;
setSpeedLimitChangeRequiresAccept @33;
acceptSpeedLimit @34;
setPressGasToAcceptSpeedLimit @35;
setAdjustSetSpeedToAcceptSpeedLimit @36;
setAcceptSpeedLimitTimeout @37;
setPressGasToOverrideSpeedLimit @38;
}
enum WaySelectionType {
current @0;
predicted @1;
possible @2;
extended @3;
fail @4;
}
enum SpeedLimitOffsetType {
static @0;
percent @1;
}
struct MapdIn @0xc86a3d38d13eb3ef {
type @0 :MapdInputType;
float @1 :Float32;
str @2 :Text;
bool @3 :Bool;
}
enum RoadContext {
freeway @0;
city @1;
unknown @2;
}
struct MapdOut @0xa4f1eb3323f5f582 {
wayName @0 :Text;
wayRef @1 :Text;
roadName @2 :Text;
speedLimit @3 :Float32;
nextSpeedLimit @4 :Float32;
nextSpeedLimitDistance @5 :Float32;
hazard @6 :Text;
nextHazard @7 :Text;
nextHazardDistance @8 :Float32;
advisorySpeed @9 :Float32;
nextAdvisorySpeed @10 :Float32;
nextAdvisorySpeedDistance @11 :Float32;
oneWay @12 :Bool;
lanes @13 :UInt8;
tileLoaded @14 :Bool;
speedLimitSuggestedSpeed @15 :Float32;
suggestedSpeed @16 :Float32;
estimatedRoadWidth @17 :Float32;
roadContext @18 :RoadContext;
distanceFromWayCenter @19 :Float32;
visionCurveSpeed @20 :Float32;
mapCurveSpeed @21 :Float32;
waySelectionType @22 :WaySelectionType;
speedLimitAccepted @23 :Bool;
}
-28
View File
@@ -1,28 +0,0 @@
# Copyright (c) 2013-2015 Sandstorm Development Group, Inc. and contributors
# Licensed under the MIT License:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
@0xc5f1af96651f70ea;
annotation package @0x9ee4c8f803b3b596 (file) : Text;
# Name of the package, such as "org.example.foo", in which the generated code will reside.
annotation outerClassname @0x9b066bb4881f7cd3 (file) : Text;
# Name of the outer class that will wrap the generated code.
+574
View File
@@ -0,0 +1,574 @@
using Cxx = import "./include/c++.capnp";
$Cxx.namespace("cereal");
@0x80ef1ec4889c2a63;
# legacy.capnp: a home for deprecated structs
struct LogRotate @0x9811e1f38f62f2d1 {
segmentNum @0 :Int32;
path @1 :Text;
}
struct LiveUI @0xc08240f996aefced {
rearViewCam @0 :Bool;
alertText1 @1 :Text;
alertText2 @2 :Text;
awarenessStatus @3 :Float32;
}
struct UiLayoutState @0x88dcce08ad29dda0 {
activeApp @0 :App;
sidebarCollapsed @1 :Bool;
mapEnabled @2 :Bool;
mockEngaged @3 :Bool;
enum App @0x9917470acf94d285 {
home @0;
music @1;
nav @2;
settings @3;
none @4;
}
}
struct OrbslamCorrection @0x8afd33dc9b35e1aa {
correctionMonoTime @0 :UInt64;
prePositionECEF @1 :List(Float64);
postPositionECEF @2 :List(Float64);
prePoseQuatECEF @3 :List(Float32);
postPoseQuatECEF @4 :List(Float32);
numInliers @5 :UInt32;
}
struct EthernetPacket @0xa99a9d5b33cf5859 {
pkt @0 :Data;
ts @1 :Float32;
}
struct CellInfo @0xcff7566681c277ce {
timestamp @0 :UInt64;
repr @1 :Text; # android toString() for now
}
struct WifiScan @0xd4df5a192382ba0b {
bssid @0 :Text;
ssid @1 :Text;
capabilities @2 :Text;
frequency @3 :Int32;
level @4 :Int32;
timestamp @5 :Int64;
centerFreq0 @6 :Int32;
centerFreq1 @7 :Int32;
channelWidth @8 :ChannelWidth;
operatorFriendlyName @9 :Text;
venueName @10 :Text;
is80211mcResponder @11 :Bool;
passpoint @12 :Bool;
distanceCm @13 :Int32;
distanceSdCm @14 :Int32;
enum ChannelWidth @0xcb6a279f015f6b51 {
w20Mhz @0;
w40Mhz @1;
w80Mhz @2;
w160Mhz @3;
w80Plus80Mhz @4;
}
}
struct LiveEventData @0x94b7baa90c5c321e {
name @0 :Text;
value @1 :Int32;
}
struct ModelData @0xb8aad62cffef28a9 {
frameId @0 :UInt32;
frameAge @12 :UInt32;
frameDropPerc @13 :Float32;
timestampEof @9 :UInt64;
modelExecutionTime @14 :Float32;
gpuExecutionTime @16 :Float32;
rawPred @15 :Data;
path @1 :PathData;
leftLane @2 :PathData;
rightLane @3 :PathData;
lead @4 :LeadData;
freePath @6 :List(Float32);
settings @5 :ModelSettings;
leadFuture @7 :LeadData;
speed @8 :List(Float32);
meta @10 :MetaData;
longitudinal @11 :LongitudinalData;
struct PathData @0x8817eeea389e9f08 {
points @0 :List(Float32);
prob @1 :Float32;
std @2 :Float32;
stds @3 :List(Float32);
poly @4 :List(Float32);
validLen @5 :Float32;
}
struct LeadData @0xd1c9bef96d26fa91 {
dist @0 :Float32;
prob @1 :Float32;
std @2 :Float32;
relVel @3 :Float32;
relVelStd @4 :Float32;
relY @5 :Float32;
relYStd @6 :Float32;
relA @7 :Float32;
relAStd @8 :Float32;
}
struct ModelSettings @0xa26e3710efd3e914 {
bigBoxX @0 :UInt16;
bigBoxY @1 :UInt16;
bigBoxWidth @2 :UInt16;
bigBoxHeight @3 :UInt16;
boxProjection @4 :List(Float32);
yuvCorrection @5 :List(Float32);
inputTransform @6 :List(Float32);
}
struct MetaData @0x9744f25fb60f2bf8 {
engagedProb @0 :Float32;
desirePrediction @1 :List(Float32);
brakeDisengageProb @2 :Float32;
gasDisengageProb @3 :Float32;
steerOverrideProb @4 :Float32;
desireState @5 :List(Float32);
}
struct LongitudinalData @0xf98f999c6a071122 {
distances @2 :List(Float32);
speeds @0 :List(Float32);
accelerations @1 :List(Float32);
}
}
struct ECEFPoint @0xc25bbbd524983447 {
x @0 :Float64;
y @1 :Float64;
z @2 :Float64;
}
struct ECEFPointDEPRECATED @0xe10e21168db0c7f7 {
x @0 :Float32;
y @1 :Float32;
z @2 :Float32;
}
struct GPSPlannerPoints @0xab54c59699f8f9f3 {
curPosDEPRECATED @0 :ECEFPointDEPRECATED;
pointsDEPRECATED @1 :List(ECEFPointDEPRECATED);
curPos @6 :ECEFPoint;
points @7 :List(ECEFPoint);
valid @2 :Bool;
trackName @3 :Text;
speedLimit @4 :Float32;
accelTarget @5 :Float32;
}
struct GPSPlannerPlan @0xf5ad1d90cdc1dd6b {
valid @0 :Bool;
poly @1 :List(Float32);
trackName @2 :Text;
speed @3 :Float32;
acceleration @4 :Float32;
pointsDEPRECATED @5 :List(ECEFPointDEPRECATED);
points @6 :List(ECEFPoint);
xLookahead @7 :Float32;
}
struct UiNavigationEvent @0x90c8426c3eaddd3b {
type @0: Type;
status @1: Status;
distanceTo @2: Float32;
endRoadPointDEPRECATED @3: ECEFPointDEPRECATED;
endRoadPoint @4: ECEFPoint;
enum Type @0xe8db07dcf8fcea05 {
none @0;
laneChangeLeft @1;
laneChangeRight @2;
mergeLeft @3;
mergeRight @4;
turnLeft @5;
turnRight @6;
}
enum Status @0xb9aa88c75ef99a1f {
none @0;
passive @1;
approaching @2;
active @3;
}
}
struct LiveLocationData @0xb99b2bc7a57e8128 {
status @0 :UInt8;
# 3D fix
lat @1 :Float64;
lon @2 :Float64;
alt @3 :Float32; # m
# speed
speed @4 :Float32; # m/s
# NED velocity components
vNED @5 :List(Float32);
# roll, pitch, heading (x,y,z)
roll @6 :Float32; # WRT to center of earth?
pitch @7 :Float32; # WRT to center of earth?
heading @8 :Float32; # WRT to north?
# what are these?
wanderAngle @9 :Float32;
trackAngle @10 :Float32;
# car frame -- https://upload.wikimedia.org/wikipedia/commons/f/f5/RPY_angles_of_cars.png
# gyro, in car frame, deg/s
gyro @11 :List(Float32);
# accel, in car frame, m/s^2
accel @12 :List(Float32);
accuracy @13 :Accuracy;
source @14 :SensorSource;
# if we are fixing a location in the past
fixMonoTime @15 :UInt64;
gpsWeek @16 :Int32;
timeOfWeek @17 :Float64;
positionECEF @18 :List(Float64);
poseQuatECEF @19 :List(Float32);
pitchCalibration @20 :Float32;
yawCalibration @21 :Float32;
imuFrame @22 :List(Float32);
struct Accuracy @0x943dc4625473b03f {
pNEDError @0 :List(Float32);
vNEDError @1 :List(Float32);
rollError @2 :Float32;
pitchError @3 :Float32;
headingError @4 :Float32;
ellipsoidSemiMajorError @5 :Float32;
ellipsoidSemiMinorError @6 :Float32;
ellipsoidOrientationError @7 :Float32;
}
enum SensorSource @0xc871d3cc252af657 {
applanix @0;
kalman @1;
orbslam @2;
timing @3;
dummy @4;
}
}
struct OrbOdometry @0xd7700859ed1f5b76 {
# timing first
startMonoTime @0 :UInt64;
endMonoTime @1 :UInt64;
# fundamental matrix and error
f @2: List(Float64);
err @3: Float64;
# number of inlier points
inliers @4: Int32;
# for debug only
# indexed by endMonoTime features
# value is startMonoTime feature match
# -1 if no match
matches @5: List(Int16);
}
struct OrbFeatures @0xcd60164a8a0159ef {
timestampEof @0 :UInt64;
# transposed arrays of normalized image coordinates
# len(xs) == len(ys) == len(descriptors) * 32
xs @1 :List(Float32);
ys @2 :List(Float32);
descriptors @3 :Data;
octaves @4 :List(Int8);
# match index to last OrbFeatures
# -1 if no match
timestampLastEof @5 :UInt64;
matches @6: List(Int16);
}
struct OrbFeaturesSummary @0xd500d30c5803fa4f {
timestampEof @0 :UInt64;
timestampLastEof @1 :UInt64;
featureCount @2 :UInt16;
matchCount @3 :UInt16;
computeNs @4 :UInt64;
}
struct OrbKeyFrame @0xc8233c0345e27e24 {
# this is a globally unique id for the KeyFrame
id @0: UInt64;
# this is the location of the KeyFrame
pos @1: ECEFPoint;
# these are the features in the world
# len(dpos) == len(descriptors) * 32
dpos @2 :List(ECEFPoint);
descriptors @3 :Data;
}
struct KalmanOdometry @0x92e21bb7ea38793a {
trans @0 :List(Float32); # m/s in device frame
rot @1 :List(Float32); # rad/s in device frame
transStd @2 :List(Float32); # std m/s in device frame
rotStd @3 :List(Float32); # std rad/s in device frame
}
struct OrbObservation @0x9b326d4e436afec7 {
observationMonoTime @0 :UInt64;
normalizedCoordinates @1 :List(Float32);
locationECEF @2 :List(Float64);
matchDistance @3: UInt32;
}
struct CalibrationFeatures @0x8fdfadb254ea867a {
frameId @0 :UInt32;
p0 @1 :List(Float32);
p1 @2 :List(Float32);
status @3 :List(Int8);
}
struct NavStatus @0xbd8822120928120c {
isNavigating @0 :Bool;
currentAddress @1 :Address;
struct Address @0xce7cd672cacc7814 {
title @0 :Text;
lat @1 :Float64;
lng @2 :Float64;
house @3 :Text;
address @4 :Text;
street @5 :Text;
city @6 :Text;
state @7 :Text;
country @8 :Text;
}
}
struct NavUpdate @0xdb98be6565516acb {
isNavigating @0 :Bool;
curSegment @1 :Int32;
segments @2 :List(Segment);
struct LatLng @0x9eaef9187cadbb9b {
lat @0 :Float64;
lng @1 :Float64;
}
struct Segment @0xa5b39b4fc4d7da3f {
from @0 :LatLng;
to @1 :LatLng;
updateTime @2 :Int32;
distance @3 :Int32;
crossTime @4 :Int32;
exitNo @5 :Int32;
instruction @6 :Instruction;
parts @7 :List(LatLng);
enum Instruction @0xc5417a637451246f {
turnLeft @0;
turnRight @1;
keepLeft @2;
keepRight @3;
straight @4;
roundaboutExitNumber @5;
roundaboutExit @6;
roundaboutTurnLeft @7;
unkn8 @8;
roundaboutStraight @9;
unkn10 @10;
roundaboutTurnRight @11;
unkn12 @12;
roundaboutUturn @13;
unkn14 @14;
arrive @15;
exitLeft @16;
exitRight @17;
unkn18 @18;
uturn @19;
# ...
}
}
}
struct TrafficEvent @0xacfa74a094e62626 {
type @0 :Type;
distance @1 :Float32;
action @2 :Action;
resuming @3 :Bool;
enum Type @0xd85d75253435bf4b {
stopSign @0;
lightRed @1;
lightYellow @2;
lightGreen @3;
stopLight @4;
}
enum Action @0xa6f6ce72165ccb49 {
none @0;
yield @1;
stop @2;
resumeReady @3;
}
}
struct AndroidGnss @0xdfdf30d03fc485bd {
union {
measurements @0 :Measurements;
navigationMessage @1 :NavigationMessage;
}
struct Measurements @0xa20710d4f428d6cd {
clock @0 :Clock;
measurements @1 :List(Measurement);
struct Clock @0xa0e27b453a38f450 {
timeNanos @0 :Int64;
hardwareClockDiscontinuityCount @1 :Int32;
hasTimeUncertaintyNanos @2 :Bool;
timeUncertaintyNanos @3 :Float64;
hasLeapSecond @4 :Bool;
leapSecond @5 :Int32;
hasFullBiasNanos @6 :Bool;
fullBiasNanos @7 :Int64;
hasBiasNanos @8 :Bool;
biasNanos @9 :Float64;
hasBiasUncertaintyNanos @10 :Bool;
biasUncertaintyNanos @11 :Float64;
hasDriftNanosPerSecond @12 :Bool;
driftNanosPerSecond @13 :Float64;
hasDriftUncertaintyNanosPerSecond @14 :Bool;
driftUncertaintyNanosPerSecond @15 :Float64;
}
struct Measurement @0xd949bf717d77614d {
svId @0 :Int32;
constellation @1 :Constellation;
timeOffsetNanos @2 :Float64;
state @3 :Int32;
receivedSvTimeNanos @4 :Int64;
receivedSvTimeUncertaintyNanos @5 :Int64;
cn0DbHz @6 :Float64;
pseudorangeRateMetersPerSecond @7 :Float64;
pseudorangeRateUncertaintyMetersPerSecond @8 :Float64;
accumulatedDeltaRangeState @9 :Int32;
accumulatedDeltaRangeMeters @10 :Float64;
accumulatedDeltaRangeUncertaintyMeters @11 :Float64;
hasCarrierFrequencyHz @12 :Bool;
carrierFrequencyHz @13 :Float32;
hasCarrierCycles @14 :Bool;
carrierCycles @15 :Int64;
hasCarrierPhase @16 :Bool;
carrierPhase @17 :Float64;
hasCarrierPhaseUncertainty @18 :Bool;
carrierPhaseUncertainty @19 :Float64;
hasSnrInDb @20 :Bool;
snrInDb @21 :Float64;
multipathIndicator @22 :MultipathIndicator;
enum Constellation @0x9ef1f3ff0deb5ffb {
unknown @0;
gps @1;
sbas @2;
glonass @3;
qzss @4;
beidou @5;
galileo @6;
}
enum State @0xcbb9490adce12d72 {
unknown @0;
codeLock @1;
bitSync @2;
subframeSync @3;
towDecoded @4;
msecAmbiguous @5;
symbolSync @6;
gloStringSync @7;
gloTodDecoded @8;
bdsD2BitSync @9;
bdsD2SubframeSync @10;
galE1bcCodeLock @11;
galE1c2ndCodeLock @12;
galE1bPageSync @13;
sbasSync @14;
}
enum MultipathIndicator @0xc04e7b6231d4caa8 {
unknown @0;
detected @1;
notDetected @2;
}
}
}
struct NavigationMessage @0xe2517b083095fd4e {
type @0 :Int32;
svId @1 :Int32;
messageId @2 :Int32;
submessageId @3 :Int32;
data @4 :Data;
status @5 :Status;
enum Status @0xec1ff7996b35366f {
unknown @0;
parityPassed @1;
parityRebuilt @2;
}
}
}
struct LidarPts @0xe3d6685d4e9d8f7a {
r @0 :List(UInt16); # uint16 m*500.0
theta @1 :List(UInt16); # uint16 deg*100.0
reflect @2 :List(UInt8); # uint8 0-255
# For storing out of file.
idx @3 :UInt64;
# For storing in file
pkt @4 :Data;
}
Binary file not shown.
Binary file not shown.
+2143 -720
View File
File diff suppressed because it is too large Load Diff
+302
View File
@@ -0,0 +1,302 @@
# must be built with scons
from msgq.ipc_pyx import Context, Poller, SubSocket, PubSocket, SocketEventHandle, toggle_fake_events, \
set_fake_prefix, get_fake_prefix, delete_fake_prefix, wait_for_one_event
from msgq.ipc_pyx import MultiplePublishersError, IpcError
from msgq import fake_event_handle, drain_sock_raw
import msgq
import os
import capnp
import time
from typing import Optional, List, Union, Dict
from cereal import log
from cereal.services import SERVICE_LIST
from openpilot.common.util import MovingAverage
NO_TRAVERSAL_LIMIT = 2**64-1
def pub_sock(endpoint: str) -> PubSocket:
service = SERVICE_LIST.get(endpoint)
segment_size = service.queue_size if service else 0
return msgq.pub_sock(endpoint, segment_size)
def sub_sock(endpoint: str, poller: Optional[Poller] = None, addr: str = "127.0.0.1",
conflate: bool = False, timeout: Optional[int] = None) -> SubSocket:
service = SERVICE_LIST.get(endpoint)
segment_size = service.queue_size if service else 0
return msgq.sub_sock(endpoint, poller=poller, addr=addr, conflate=conflate,
timeout=timeout, segment_size=segment_size)
def reset_context():
msgq.context = Context()
def log_from_bytes(dat: bytes, struct: capnp.lib.capnp._StructModule = log.Event) -> capnp.lib.capnp._DynamicStructReader:
with struct.from_bytes(dat, traversal_limit_in_words=NO_TRAVERSAL_LIMIT) as msg:
return msg
def new_message(service: Optional[str], size: Optional[int] = None, **kwargs) -> capnp.lib.capnp._DynamicStructBuilder:
args = {
'valid': False,
'logMonoTime': int(time.monotonic() * 1e9),
**kwargs
}
dat = log.Event.new_message(**args)
if service is not None:
if size is None:
dat.init(service)
else:
dat.init(service, size)
return dat
def drain_sock(sock: SubSocket, wait_for_one: bool = False) -> List[capnp.lib.capnp._DynamicStructReader]:
"""Receive all message currently available on the queue"""
msgs = drain_sock_raw(sock, wait_for_one=wait_for_one)
return [log_from_bytes(m) for m in msgs]
# TODO: print when we drop packets?
def recv_sock(sock: SubSocket, wait: bool = False) -> Optional[capnp.lib.capnp._DynamicStructReader]:
"""Same as drain sock, but only returns latest message. Consider using conflate instead."""
dat = None
while 1:
if wait and dat is None:
recv = sock.receive()
else:
recv = sock.receive(non_blocking=True)
if recv is None: # Timeout hit
break
dat = recv
if dat is not None:
dat = log_from_bytes(dat)
return dat
def recv_one(sock: SubSocket) -> Optional[capnp.lib.capnp._DynamicStructReader]:
dat = sock.receive()
if dat is not None:
dat = log_from_bytes(dat)
return dat
def recv_one_or_none(sock: SubSocket) -> Optional[capnp.lib.capnp._DynamicStructReader]:
dat = sock.receive(non_blocking=True)
if dat is not None:
dat = log_from_bytes(dat)
return dat
def recv_one_retry(sock: SubSocket) -> capnp.lib.capnp._DynamicStructReader:
"""Keep receiving until we get a message"""
while True:
dat = sock.receive()
if dat is not None:
return log_from_bytes(dat)
class FrequencyTracker:
def __init__(self, service_freq: float, update_freq: float, is_poll: bool):
freq = max(min(service_freq, update_freq), 1.)
if is_poll:
min_freq = max_freq = freq
else:
max_freq = min(freq, update_freq)
if service_freq >= 2 * update_freq:
min_freq = update_freq
elif update_freq >= 2* service_freq:
min_freq = freq
else:
min_freq = min(freq, freq / 2.)
self.min_freq = min_freq * 0.8
self.max_freq = max_freq * 1.2
self.avg_dt = MovingAverage(int(10 * freq))
self.recent_avg_dt = MovingAverage(int(freq))
self.prev_time = 0.0
def record_recv_time(self, cur_time: float) -> None:
# TODO: Handle case where cur_time is less than prev_time
if self.prev_time > 1e-5:
dt = cur_time - self.prev_time
self.avg_dt.add_value(dt)
self.recent_avg_dt.add_value(dt)
self.prev_time = cur_time
@property
def valid(self) -> bool:
if self.avg_dt.count == 0:
return False
avg_freq = 1.0 / self.avg_dt.get_average()
if self.min_freq <= avg_freq <= self.max_freq:
return True
avg_freq_recent = 1.0 / self.recent_avg_dt.get_average()
return self.min_freq <= avg_freq_recent <= self.max_freq
class SubMaster:
def __init__(self, services: List[str], poll: Optional[str] = None,
ignore_alive: Optional[List[str]] = None, ignore_avg_freq: Optional[List[str]] = None,
ignore_valid: Optional[List[str]] = None, addr: str = "127.0.0.1", frequency: Optional[float] = None):
self.frame = -1
self.services = services
self.seen = {s: False for s in services}
self.updated = {s: False for s in services}
self.recv_time = {s: 0. for s in services}
self.recv_frame = {s: 0 for s in services}
self.sock = {}
self.data = {}
self.logMonoTime = {s: 0 for s in services}
# zero-frequency / on-demand services are always alive and presumed valid; all others must pass checks
on_demand = {s: SERVICE_LIST[s].frequency <= 1e-5 for s in services}
self.static_freq_services = set(s for s in services if not on_demand[s])
self.alive = {s: on_demand[s] for s in services}
self.freq_ok = {s: on_demand[s] for s in services}
self.valid = {s: on_demand[s] for s in services}
self.freq_tracker: Dict[str, FrequencyTracker] = {}
self.poller = Poller()
polled_services = set([poll, ] if poll is not None else services)
self.non_polled_services = set(services) - polled_services
self.ignore_average_freq = [] if ignore_avg_freq is None else ignore_avg_freq
self.ignore_alive = [] if ignore_alive is None else ignore_alive
self.ignore_valid = [] if ignore_valid is None else ignore_valid
self.simulation = bool(int(os.getenv("SIMULATION", "0")))
# if freq and poll aren't specified, assume the max to be conservative
assert frequency is None or poll is None, "Do not specify 'frequency' - frequency of the polled service will be used."
self.update_freq = frequency or max([SERVICE_LIST[s].frequency for s in polled_services])
for s in services:
p = self.poller if s not in self.non_polled_services else None
self.sock[s] = sub_sock(s, poller=p, addr=addr, conflate=True)
try:
data = new_message(s)
except capnp.lib.capnp.KjException:
data = new_message(s, 0) # lists
self.data[s] = getattr(data.as_reader(), s)
self.freq_tracker[s] = FrequencyTracker(SERVICE_LIST[s].frequency, self.update_freq, s == poll)
# StarPilot variables
self.addr = addr
self.poll = poll
def __getitem__(self, s: str) -> capnp.lib.capnp._DynamicStructReader:
return self.data[s]
def _check_avg_freq(self, s: str) -> bool:
return SERVICE_LIST[s].frequency > 0.99 and (s not in self.ignore_average_freq) and (s not in self.ignore_alive)
def update(self, timeout: int = 100) -> None:
msgs = []
for sock in self.poller.poll(timeout):
msgs.append(recv_one_or_none(sock))
# non-blocking receive for non-polled sockets
for s in self.non_polled_services:
msgs.append(recv_one_or_none(self.sock[s]))
self.update_msgs(time.monotonic(), msgs)
def update_msgs(self, cur_time: float, msgs: List[capnp.lib.capnp._DynamicStructReader]) -> None:
self.frame += 1
self.updated = dict.fromkeys(self.services, False)
for msg in msgs:
if msg is None:
continue
s = msg.which()
self.seen[s] = True
self.updated[s] = True
self.freq_tracker[s].record_recv_time(cur_time)
self.recv_time[s] = cur_time
self.recv_frame[s] = self.frame
self.data[s] = getattr(msg, s)
self.logMonoTime[s] = msg.logMonoTime
self.valid[s] = msg.valid
for s in self.static_freq_services:
# alive if delay is within 10x the expected frequency; checks relaxed in simulator
self.alive[s] = (cur_time - self.recv_time[s]) < (10. / SERVICE_LIST[s].frequency) or (self.seen[s] and self.simulation)
self.freq_ok[s] = self.freq_tracker[s].valid or self.simulation
def all_alive(self, service_list: Optional[List[str]] = None) -> bool:
return all(self.alive[s] for s in (service_list or self.services) if s not in self.ignore_alive)
def all_freq_ok(self, service_list: Optional[List[str]] = None) -> bool:
return all(self.freq_ok[s] for s in (service_list or self.services) if self._check_avg_freq(s))
def all_valid(self, service_list: Optional[List[str]] = None) -> bool:
return all(self.valid[s] for s in (service_list or self.services) if s not in self.ignore_valid)
def all_checks(self, service_list: Optional[List[str]] = None) -> bool:
return self.all_alive(service_list) and self.all_freq_ok(service_list) and self.all_valid(service_list)
# StarPilot variables
def extend(self, new_services: List[str]):
return SubMaster(
self.services + new_services,
poll=self.poll,
ignore_alive=self.ignore_alive,
ignore_avg_freq=self.ignore_average_freq,
ignore_valid=self.ignore_valid,
addr=self.addr,
frequency=None if self.poll is not None else self.update_freq,
)
class PubMaster:
def __init__(self, services: List[str]):
self.sock = {}
self._zmq_readers_settled = set()
for s in services:
self.sock[s] = pub_sock(s)
def send(self, s: str, dat: Union[bytes, capnp.lib.capnp._DynamicStructBuilder]) -> None:
if not isinstance(dat, bytes):
dat = dat.to_bytes()
self.sock[s].send(dat)
def wait_for_readers_to_update(self, s: str, timeout: int, dt: float = 0.05) -> bool:
if "ZMQ" in os.environ:
if s not in self._zmq_readers_settled:
time.sleep(min(timeout, 1.0))
self._zmq_readers_settled.add(s)
elif dt >= 0.05:
time.sleep(min(timeout, 1.0))
return True
for _ in range(int(timeout*(1./dt))):
if self.sock[s].all_readers_updated():
return True
time.sleep(dt)
return False
def all_readers_updated(self, s: str) -> bool:
return self.sock[s].all_readers_updated() # type: ignore
# StarPilot variables
def extend(self, new_services: List[str]):
for service in new_services:
if service not in self.sock:
self.sock[service] = pub_sock(service)
return self
BIN
View File
Binary file not shown.
+71
View File
@@ -0,0 +1,71 @@
#include <cassert>
#include "cereal/messaging/msgq_to_zmq.h"
#include "cereal/services.h"
#include "common/util.h"
ExitHandler do_exit;
static std::vector<std::string> get_services(const std::string &whitelist_str, bool zmq_to_msgq) {
std::vector<std::string> service_list;
for (const auto& it : services) {
std::string name = it.second.name;
bool in_whitelist = whitelist_str.find(name) != std::string::npos;
if (zmq_to_msgq && !in_whitelist) {
continue;
}
service_list.push_back(name);
}
return service_list;
}
void msgq_to_zmq(const std::vector<std::string> &endpoints, const std::string &ip) {
MsgqToZmq bridge;
bridge.run(endpoints, ip);
}
void zmq_to_msgq(const std::vector<std::string> &endpoints, const std::string &ip) {
auto poller = std::make_unique<ZMQPoller>();
auto pub_context = std::make_unique<MSGQContext>();
auto sub_context = std::make_unique<ZMQContext>();
std::map<SubSocket *, PubSocket *> sub2pub;
for (auto endpoint : endpoints) {
auto pub_sock = new MSGQPubSocket();
auto sub_sock = new ZMQSubSocket();
pub_sock->connect(pub_context.get(), endpoint);
sub_sock->connect(sub_context.get(), endpoint, ip, false);
poller->registerSocket(sub_sock);
sub2pub[sub_sock] = pub_sock;
}
while (!do_exit) {
for (auto sub_sock : poller->poll(100)) {
std::unique_ptr<Message> msg(sub_sock->receive(true));
if (msg) {
sub2pub[sub_sock]->sendMessage(msg.get());
}
}
}
// Clean up allocated sockets
for (auto &[sub_sock, pub_sock] : sub2pub) {
delete sub_sock;
delete pub_sock;
}
}
int main(int argc, char **argv) {
bool is_zmq_to_msgq = argc > 2;
std::string ip = is_zmq_to_msgq ? argv[1] : "127.0.0.1";
std::string whitelist_str = is_zmq_to_msgq ? std::string(argv[2]) : "";
std::vector<std::string> endpoints = get_services(whitelist_str, is_zmq_to_msgq);
if (is_zmq_to_msgq) {
zmq_to_msgq(endpoints, ip);
} else {
msgq_to_zmq(endpoints, ip);
}
return 0;
}
+102
View File
@@ -0,0 +1,102 @@
#pragma once
#include <cstddef>
#include <map>
#include <string>
#include <vector>
#include <utility>
#include <capnp/serialize.h>
#include "cereal/gen/cpp/log.capnp.h"
#include "common/timing.h"
#include "msgq/ipc.h"
class SubMaster {
public:
SubMaster(const std::vector<const char *> &service_list, const std::vector<const char *> &poll = {},
const char *address = nullptr, const std::vector<const char *> &ignore_alive = {});
void update(int timeout = 1000);
void update_msgs(uint64_t current_time, const std::vector<std::pair<std::string, cereal::Event::Reader>> &messages);
inline bool allAlive(const std::vector<const char *> &service_list = {}) { return all_(service_list, false, true); }
inline bool allValid(const std::vector<const char *> &service_list = {}) { return all_(service_list, true, false); }
inline bool allAliveAndValid(const std::vector<const char *> &service_list = {}) { return all_(service_list, true, true); }
void drain();
~SubMaster();
uint64_t frame = 0;
bool updated(const char *name) const;
bool alive(const char *name) const;
bool valid(const char *name) const;
uint64_t rcv_frame(const char *name) const;
uint64_t rcv_time(const char *name) const;
cereal::Event::Reader &operator[](const char *name) const;
private:
bool all_(const std::vector<const char *> &service_list, bool valid, bool alive);
Poller *poller_ = nullptr;
struct SubMessage;
std::map<SubSocket *, SubMessage *> messages_;
std::map<std::string, SubMessage *> services_;
};
class MessageBuilder : public capnp::MallocMessageBuilder {
public:
MessageBuilder() = default;
cereal::Event::Builder initEvent(bool valid = true) {
cereal::Event::Builder event = initRoot<cereal::Event>();
event.setLogMonoTime(nanos_since_boot());
event.setValid(valid);
return event;
}
kj::ArrayPtr<capnp::byte> toBytes() {
heapArray_ = capnp::messageToFlatArray(*this);
return heapArray_.asBytes();
}
size_t getSerializedSize() {
return capnp::computeSerializedSizeInWords(*this) * sizeof(capnp::word);
}
int serializeToBuffer(unsigned char *buffer, size_t buffer_size) {
size_t serialized_size = getSerializedSize();
if (serialized_size > buffer_size) { return -1; }
kj::ArrayOutputStream out(kj::ArrayPtr<capnp::byte>(buffer, buffer_size));
capnp::writeMessage(out, *this);
return serialized_size;
}
private:
kj::Array<capnp::word> heapArray_;
};
class PubMaster {
public:
PubMaster(const std::vector<const char *> &service_list);
inline int send(const char *name, capnp::byte *data, size_t size) { return sockets_.at(name)->send((char *)data, size); }
int send(const char *name, MessageBuilder &msg);
~PubMaster();
private:
std::map<std::string, PubSocket *> sockets_;
};
class AlignedBuffer {
public:
kj::ArrayPtr<const capnp::word> align(const char *data, const size_t size) {
words_size = size / sizeof(capnp::word) + 1;
if (aligned_buf.size() < words_size) {
aligned_buf = kj::heapArray<capnp::word>(words_size < 512 ? 512 : words_size);
}
memcpy(aligned_buf.begin(), data, size);
return aligned_buf.slice(0, words_size);
}
inline kj::ArrayPtr<const capnp::word> align(Message *m) {
return align(m->getData(), m->getSize());
}
private:
kj::Array<capnp::word> aligned_buf;
size_t words_size;
};
+144
View File
@@ -0,0 +1,144 @@
#include "cereal/messaging/msgq_to_zmq.h"
#include <cassert>
#include "common/util.h"
extern ExitHandler do_exit;
// Max messages to process per socket per poll
constexpr int MAX_MESSAGES_PER_SOCKET = 50;
static std::string recv_zmq_msg(void *sock) {
zmq_msg_t msg;
zmq_msg_init(&msg);
std::string ret;
if (zmq_msg_recv(&msg, sock, 0) > 0) {
ret.assign((char *)zmq_msg_data(&msg), zmq_msg_size(&msg));
}
zmq_msg_close(&msg);
return ret;
}
void MsgqToZmq::run(const std::vector<std::string> &endpoints, const std::string &ip) {
zmq_context = std::make_unique<ZMQContext>();
msgq_context = std::make_unique<MSGQContext>();
// Create ZMQPubSockets for each endpoint
for (const auto &endpoint : endpoints) {
auto &socket_pair = socket_pairs.emplace_back();
socket_pair.endpoint = endpoint;
socket_pair.pub_sock = std::make_unique<ZMQPubSocket>();
int ret = socket_pair.pub_sock->connect(zmq_context.get(), endpoint);
if (ret != 0) {
printf("Failed to create ZMQ publisher for [%s]: %s\n", endpoint.c_str(), zmq_strerror(zmq_errno()));
return;
}
}
// Start ZMQ monitoring thread to monitor socket events
std::thread thread(&MsgqToZmq::zmqMonitorThread, this);
// Main loop for processing messages
while (!do_exit) {
{
std::unique_lock lk(mutex);
cv.wait(lk, [this]() { return do_exit || !sub2pub.empty(); });
if (do_exit) break;
for (auto sub_sock : msgq_poller->poll(100)) {
// Process messages for each socket
ZMQPubSocket *pub_sock = sub2pub.at(sub_sock);
for (int i = 0; i < MAX_MESSAGES_PER_SOCKET; ++i) {
auto msg = std::unique_ptr<Message>(sub_sock->receive(true));
if (!msg) break;
while (pub_sock->sendMessage(msg.get()) == -1) {
if (errno != EINTR) break;
}
}
}
}
util::sleep_for(1); // Give zmqMonitorThread a chance to acquire the mutex
}
thread.join();
}
void MsgqToZmq::zmqMonitorThread() {
std::vector<zmq_pollitem_t> pollitems;
// Set up ZMQ monitor for each pub socket
for (int i = 0; i < socket_pairs.size(); ++i) {
std::string addr = "inproc://op-bridge-monitor-" + std::to_string(i);
zmq_socket_monitor(socket_pairs[i].pub_sock->sock, addr.c_str(), ZMQ_EVENT_ACCEPTED | ZMQ_EVENT_DISCONNECTED);
void *monitor_socket = zmq_socket(zmq_context->getRawContext(), ZMQ_PAIR);
zmq_connect(monitor_socket, addr.c_str());
pollitems.emplace_back(zmq_pollitem_t{.socket = monitor_socket, .events = ZMQ_POLLIN});
}
while (!do_exit) {
int ret = zmq_poll(pollitems.data(), pollitems.size(), 1000);
if (ret < 0) {
if (errno == EINTR) {
// Due to frequent EINTR signals from msgq, introduce a brief delay (200 ms)
// to reduce CPU usage during retry attempts.
util::sleep_for(200);
}
continue;
}
for (int i = 0; i < pollitems.size(); ++i) {
if (pollitems[i].revents & ZMQ_POLLIN) {
// First frame in message contains event number and value
std::string frame = recv_zmq_msg(pollitems[i].socket);
if (frame.empty()) continue;
uint16_t event_type = *(uint16_t *)(frame.data());
// Second frame in message contains event address
frame = recv_zmq_msg(pollitems[i].socket);
if (frame.empty()) continue;
std::unique_lock lk(mutex);
auto &pair = socket_pairs[i];
if (event_type & ZMQ_EVENT_ACCEPTED) {
printf("socket [%s] connected\n", pair.endpoint.c_str());
if (++pair.connected_clients == 1) {
// Create new MSGQ subscriber socket and map to ZMQ publisher
pair.sub_sock = std::make_unique<MSGQSubSocket>();
pair.sub_sock->connect(msgq_context.get(), pair.endpoint, "127.0.0.1");
sub2pub[pair.sub_sock.get()] = pair.pub_sock.get();
registerSockets();
}
} else if (event_type & ZMQ_EVENT_DISCONNECTED) {
printf("socket [%s] disconnected\n", pair.endpoint.c_str());
if (pair.connected_clients == 0 || --pair.connected_clients == 0) {
// Remove MSGQ subscriber socket from mapping and reset it
sub2pub.erase(pair.sub_sock.get());
pair.sub_sock.reset(nullptr);
registerSockets();
}
}
cv.notify_one();
}
}
}
// Clean up monitor sockets
for (int i = 0; i < pollitems.size(); ++i) {
zmq_socket_monitor(socket_pairs[i].pub_sock->sock, nullptr, 0);
zmq_close(pollitems[i].socket);
}
cv.notify_one();
}
void MsgqToZmq::registerSockets() {
msgq_poller = std::make_unique<MSGQPoller>();
for (const auto &socket_pair : socket_pairs) {
if (socket_pair.sub_sock) {
msgq_poller->registerSocket(socket_pair.sub_sock.get());
}
}
}
+37
View File
@@ -0,0 +1,37 @@
#pragma once
#include <condition_variable>
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include <vector>
#define private public
#include "msgq/impl_msgq.h"
#include "msgq/impl_zmq.h"
class MsgqToZmq {
public:
MsgqToZmq() {}
void run(const std::vector<std::string> &endpoints, const std::string &ip);
protected:
void registerSockets();
void zmqMonitorThread();
struct SocketPair {
std::string endpoint;
std::unique_ptr<ZMQPubSocket> pub_sock;
std::unique_ptr<MSGQSubSocket> sub_sock;
int connected_clients = 0;
};
std::unique_ptr<MSGQContext> msgq_context;
std::unique_ptr<ZMQContext> zmq_context;
std::mutex mutex;
std::condition_variable cv;
std::unique_ptr<MSGQPoller> msgq_poller;
std::map<SubSocket *, ZMQPubSocket *> sub2pub;
std::vector<SocketPair> socket_pairs;
};
+204
View File
@@ -0,0 +1,204 @@
#include <assert.h>
#include <stdlib.h>
#include <string>
#include <mutex>
#include "cereal/services.h"
#include "cereal/messaging/messaging.h"
const bool SIMULATION = (getenv("SIMULATION") != nullptr) && (std::string(getenv("SIMULATION")) == "1");
static inline bool inList(const std::vector<const char *> &list, const char *value) {
for (auto &v : list) {
if (strcmp(value, v) == 0) return true;
}
return false;
}
class MessageContext {
public:
MessageContext() : ctx_(nullptr) {}
~MessageContext() { delete ctx_; }
inline Context *context() {
std::call_once(init_flag, [=]() { ctx_ = Context::create(); });
return ctx_;
}
private:
Context *ctx_;
std::once_flag init_flag;
};
MessageContext message_context;
struct SubMaster::SubMessage {
std::string name;
SubSocket *socket = nullptr;
float freq = 0.0f;
bool updated = false, alive = false, valid = false, ignore_alive;
uint64_t rcv_time = 0, rcv_frame = 0;
void *allocated_msg_reader = nullptr;
bool is_polled = false;
capnp::FlatArrayMessageReader *msg_reader = nullptr;
AlignedBuffer aligned_buf;
cereal::Event::Reader event;
};
SubMaster::SubMaster(const std::vector<const char *> &service_list, const std::vector<const char *> &poll,
const char *address, const std::vector<const char *> &ignore_alive) {
poller_ = Poller::create();
for (auto name : service_list) {
assert(services.count(std::string(name)) > 0);
service serv = services.at(std::string(name));
SubSocket *socket = SubSocket::create(message_context.context(), name, address ? address : "127.0.0.1", true, true, serv.queue_size);
assert(socket != 0);
bool is_polled = inList(poll, name) || poll.empty();
if (is_polled) poller_->registerSocket(socket);
SubMessage *m = new SubMessage{
.name = name,
.socket = socket,
.freq = serv.frequency,
.ignore_alive = inList(ignore_alive, name),
.allocated_msg_reader = malloc(sizeof(capnp::FlatArrayMessageReader)),
.is_polled = is_polled};
m->msg_reader = new (m->allocated_msg_reader) capnp::FlatArrayMessageReader({});
messages_[socket] = m;
services_[name] = m;
}
}
void SubMaster::update(int timeout) {
for (auto &kv : messages_) kv.second->updated = false;
auto sockets = poller_->poll(timeout);
// add non-polled sockets for non-blocking receive
for (auto &kv : messages_) {
SubMessage *m = kv.second;
SubSocket *s = kv.first;
if (!m->is_polled) sockets.push_back(s);
}
uint64_t current_time = nanos_since_boot();
std::vector<std::pair<std::string, cereal::Event::Reader>> messages;
for (auto s : sockets) {
Message *msg = s->receive(true);
if (msg == nullptr) continue;
SubMessage *m = messages_.at(s);
m->msg_reader->~FlatArrayMessageReader();
capnp::ReaderOptions options;
options.traversalLimitInWords = kj::maxValue; // Don't limit
m->msg_reader = new (m->allocated_msg_reader) capnp::FlatArrayMessageReader(m->aligned_buf.align(msg), options);
delete msg;
messages.push_back({m->name, m->msg_reader->getRoot<cereal::Event>()});
}
update_msgs(current_time, messages);
}
void SubMaster::update_msgs(uint64_t current_time, const std::vector<std::pair<std::string, cereal::Event::Reader>> &messages){
if (++frame == UINT64_MAX) frame = 1;
for (auto &kv : messages) {
auto m_find = services_.find(kv.first);
if (m_find == services_.end()){
continue;
}
SubMessage *m = m_find->second;
m->event = kv.second;
m->updated = true;
m->rcv_time = current_time;
m->rcv_frame = frame;
m->valid = m->event.getValid();
if (SIMULATION) m->alive = true;
}
if (!SIMULATION) {
for (auto &kv : messages_) {
SubMessage *m = kv.second;
m->alive = (m->freq <= (1e-5) || ((current_time - m->rcv_time) * (1e-9)) < (10.0 / m->freq));
}
}
}
bool SubMaster::all_(const std::vector<const char *> &service_list, bool valid, bool alive) {
int found = 0;
for (auto &kv : messages_) {
SubMessage *m = kv.second;
if (service_list.size() == 0 || inList(service_list, m->name.c_str())) {
found += (!valid || m->valid) && (!alive || (m->alive || m->ignore_alive));
}
}
return service_list.size() == 0 ? found == messages_.size() : found == service_list.size();
}
void SubMaster::drain() {
while (true) {
auto polls = poller_->poll(0);
if (polls.size() == 0)
break;
for (auto sock : polls) {
Message *msg = sock->receive(true);
delete msg;
}
}
}
bool SubMaster::updated(const char *name) const {
return services_.at(name)->updated;
}
bool SubMaster::alive(const char *name) const {
return services_.at(name)->alive;
}
bool SubMaster::valid(const char *name) const {
return services_.at(name)->valid;
}
uint64_t SubMaster::rcv_frame(const char *name) const {
return services_.at(name)->rcv_frame;
}
uint64_t SubMaster::rcv_time(const char *name) const {
return services_.at(name)->rcv_time;
}
cereal::Event::Reader &SubMaster::operator[](const char *name) const {
return services_.at(name)->event;
}
SubMaster::~SubMaster() {
delete poller_;
for (auto &kv : messages_) {
SubMessage *m = kv.second;
m->msg_reader->~FlatArrayMessageReader();
free(m->allocated_msg_reader);
delete m->socket;
delete m;
}
}
PubMaster::PubMaster(const std::vector<const char *> &service_list) {
for (auto name : service_list) {
assert(services.count(name) > 0);
service serv = services.at(std::string(name));
PubSocket *socket = PubSocket::create(message_context.context(), name, true, serv.queue_size);
assert(socket);
sockets_[name] = socket;
}
}
int PubMaster::send(const char *name, MessageBuilder &msg) {
auto bytes = msg.toBytes();
return send(name, bytes.begin(), bytes.size());
}
PubMaster::~PubMaster() {
for (auto s : sockets_) delete s.second;
}
+185
View File
@@ -0,0 +1,185 @@
import os
import capnp
import multiprocessing
import numbers
import random
import threading
import time
from parameterized import parameterized
import pytest
from cereal import log, car
import cereal.messaging as messaging
from cereal.services import SERVICE_LIST
events = [evt for evt in log.Event.schema.union_fields if evt in SERVICE_LIST.keys()]
def random_sock():
return random.choice(events)
def random_socks(num_socks=10):
return list({random_sock() for _ in range(num_socks)})
def random_bytes(length=1000):
return bytes([random.randrange(0xFF) for _ in range(length)])
def zmq_sleep(t=1):
if "ZMQ" in os.environ:
time.sleep(t)
# TODO: this should take any capnp struct and returrn a msg with random populated data
def random_carstate():
fields = ["vEgo", "aEgo", "brake", "steeringAngleDeg"]
msg = messaging.new_message("carState")
cs = msg.carState
for f in fields:
setattr(cs, f, random.random() * 10)
return msg
# TODO: this should compare any capnp structs
def assert_carstate(cs1, cs2):
for f in car.CarState.schema.non_union_fields:
# TODO: check all types
val1, val2 = getattr(cs1, f), getattr(cs2, f)
if isinstance(val1, numbers.Number):
assert val1 == val2, f"{f}: sent '{val1}' vs recvd '{val2}'"
def delayed_send(delay, sock, dat):
def send_func():
sock.send(dat)
threading.Timer(delay, send_func).start()
class TestMessaging:
def setUp(self):
# TODO: ZMQ tests are too slow; all sleeps will need to be
# replaced with logic to block on the necessary condition
if "ZMQ" in os.environ:
pytest.skip()
# ZMQ pub socket takes too long to die
# sleep to prevent multiple publishers error between tests
zmq_sleep()
@parameterized.expand(events)
def test_new_message(self, evt):
try:
msg = messaging.new_message(evt)
except capnp.lib.capnp.KjException:
msg = messaging.new_message(evt, random.randrange(200))
assert (time.monotonic() - msg.logMonoTime) < 0.1
assert not msg.valid
assert evt == msg.which()
@parameterized.expand(events)
def test_pub_sock(self, evt):
messaging.pub_sock(evt)
@parameterized.expand(events)
def test_sub_sock(self, evt):
messaging.sub_sock(evt)
@parameterized.expand([
(messaging.drain_sock, capnp._DynamicStructReader),
(messaging.drain_sock_raw, bytes),
])
def test_drain_sock(self, func, expected_type):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sub_sock = messaging.sub_sock(sock, timeout=1000)
zmq_sleep()
# no wait and no msgs in queue
msgs = func(sub_sock)
assert isinstance(msgs, list)
assert len(msgs) == 0
# no wait but msgs are queued up
num_msgs = random.randrange(3, 10)
for _ in range(num_msgs):
pub_sock.send(messaging.new_message(sock).to_bytes())
time.sleep(0.1)
msgs = func(sub_sock)
assert isinstance(msgs, list)
assert all(isinstance(msg, expected_type) for msg in msgs)
assert len(msgs) == num_msgs
def test_recv_sock(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sub_sock = messaging.sub_sock(sock, timeout=100)
zmq_sleep()
# no wait and no msg in queue, socket should timeout
recvd = messaging.recv_sock(sub_sock)
assert recvd is None
# no wait and one msg in queue
msg = random_carstate()
pub_sock.send(msg.to_bytes())
time.sleep(0.01)
recvd = messaging.recv_sock(sub_sock)
assert isinstance(recvd, capnp._DynamicStructReader)
# https://github.com/python/mypy/issues/13038
assert_carstate(msg.carState, recvd.carState)
def test_recv_one(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sub_sock = messaging.sub_sock(sock, timeout=1000)
zmq_sleep()
# no msg in queue, socket should timeout
recvd = messaging.recv_one(sub_sock)
assert recvd is None
# one msg in queue
msg = random_carstate()
pub_sock.send(msg.to_bytes())
recvd = messaging.recv_one(sub_sock)
assert isinstance(recvd, capnp._DynamicStructReader)
assert_carstate(msg.carState, recvd.carState)
@pytest.mark.xfail(condition="ZMQ" in os.environ, reason='ZMQ detected')
def test_recv_one_or_none(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sub_sock = messaging.sub_sock(sock)
zmq_sleep()
# no msg in queue, socket shouldn't block
recvd = messaging.recv_one_or_none(sub_sock)
assert recvd is None
# one msg in queue
msg = random_carstate()
pub_sock.send(msg.to_bytes())
recvd = messaging.recv_one_or_none(sub_sock)
assert isinstance(recvd, capnp._DynamicStructReader)
assert_carstate(msg.carState, recvd.carState)
def test_recv_one_retry(self):
sock = "carState"
sock_timeout = 0.1
pub_sock = messaging.pub_sock(sock)
sub_sock = messaging.sub_sock(sock, timeout=round(sock_timeout*1000))
zmq_sleep()
# this test doesn't work with ZMQ since multiprocessing interrupts it
if "ZMQ" not in os.environ:
# wait 5 socket timeouts and make sure it's still retrying
p = multiprocessing.Process(target=messaging.recv_one_retry, args=(sub_sock,))
p.start()
time.sleep(sock_timeout*5)
assert p.is_alive()
p.terminate()
# wait 5 socket timeouts before sending
msg = random_carstate()
start_time = time.monotonic()
delayed_send(sock_timeout*5, pub_sock, msg.to_bytes())
recvd = messaging.recv_one_retry(sub_sock)
assert (time.monotonic() - start_time) >= sock_timeout*5
assert isinstance(recvd, capnp._DynamicStructReader)
assert_carstate(msg.carState, recvd.carState)
@@ -0,0 +1,160 @@
import random
import time
from typing import Sized, cast
import cereal.messaging as messaging
from cereal.messaging.tests.test_messaging import events, random_sock, random_socks, \
random_bytes, random_carstate, assert_carstate, \
zmq_sleep
from cereal.services import SERVICE_LIST
class TestSubMaster:
def setup_method(self):
# ZMQ pub socket takes too long to die
# sleep to prevent multiple publishers error between tests
zmq_sleep(3)
def test_init(self):
sm = messaging.SubMaster(events)
for p in [sm.updated, sm.recv_time, sm.recv_frame, sm.alive,
sm.sock, sm.data, sm.logMonoTime, sm.valid]:
assert len(cast(Sized, p)) == len(events)
def test_init_state(self):
socks = random_socks()
sm = messaging.SubMaster(socks)
assert sm.frame == -1
assert not any(sm.updated.values())
assert not any(sm.seen.values())
on_demand = {s: SERVICE_LIST[s].frequency <= 1e-5 for s in sm.services}
assert all(sm.alive[s] == sm.valid[s] == sm.freq_ok[s] == on_demand[s] for s in sm.services)
assert all(t == 0. for t in sm.recv_time.values())
assert all(f == 0 for f in sm.recv_frame.values())
assert all(t == 0 for t in sm.logMonoTime.values())
for p in [sm.updated, sm.recv_time, sm.recv_frame, sm.alive,
sm.sock, sm.data, sm.logMonoTime, sm.valid]:
assert len(cast(Sized, p)) == len(socks)
def test_getitem(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sm = messaging.SubMaster([sock,])
zmq_sleep()
msg = random_carstate()
pub_sock.send(msg.to_bytes())
sm.update(1000)
assert_carstate(msg.carState, sm[sock])
# TODO: break this test up to individually test SubMaster.update and SubMaster.update_msgs
def test_update(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sm = messaging.SubMaster([sock,])
zmq_sleep()
for i in range(10):
msg = messaging.new_message(sock)
pub_sock.send(msg.to_bytes())
sm.update(1000)
assert sm.frame == i
assert all(sm.updated.values())
def test_update_timeout(self):
sock = random_sock()
sm = messaging.SubMaster([sock,])
timeout = random.randrange(1000, 3000)
start_time = time.monotonic()
sm.update(timeout)
t = time.monotonic() - start_time
assert t >= timeout/1000.
assert t < 3
assert not any(sm.updated.values())
def test_avg_frequency_checks(self):
for poll in (True, False):
sm = messaging.SubMaster(["modelV2", "carParams", "carState", "cameraOdometry", "liveCalibration"],
poll=("modelV2" if poll else None),
frequency=(20. if not poll else None))
checks = {
"carState": (20, 20),
"modelV2": (20, 20 if poll else 10),
"cameraOdometry": (20, 10),
"liveCalibration": (4, 4),
"carParams": (None, None),
"userBookmark": (None, None),
}
for service, (max_freq, min_freq) in checks.items():
if max_freq is not None:
assert sm._check_avg_freq(service)
assert sm.freq_tracker[service].max_freq == max_freq*1.2
assert sm.freq_tracker[service].min_freq == min_freq*0.8
else:
assert not sm._check_avg_freq(service)
def test_alive(self):
pass
def test_ignore_alive(self):
pass
def test_valid(self):
pass
# SubMaster should always conflate
def test_conflate(self):
sock = "carState"
pub_sock = messaging.pub_sock(sock)
sm = messaging.SubMaster([sock,])
n = 10
for i in range(n+1):
msg = messaging.new_message(sock)
msg.carState.vEgo = i
pub_sock.send(msg.to_bytes())
time.sleep(0.01)
sm.update(1000)
assert sm[sock].vEgo == n
class TestPubMaster:
def setup_method(self):
# ZMQ pub socket takes too long to die
# sleep to prevent multiple publishers error between tests
zmq_sleep(3)
def test_init(self):
messaging.PubMaster(events)
def test_send(self):
socks = random_socks()
pm = messaging.PubMaster(socks)
sub_socks = {s: messaging.sub_sock(s, conflate=True, timeout=1000) for s in socks}
zmq_sleep()
# PubMaster accepts either a capnp msg builder or bytes
for capnp in [True, False]:
for i in range(100):
sock = socks[i % len(socks)]
if capnp:
try:
msg = messaging.new_message(sock)
except Exception:
msg = messaging.new_message(sock, random.randrange(50))
else:
msg = random_bytes()
pm.send(sock, msg)
recvd = sub_socks[sock].receive()
if capnp:
msg.clear_write_flag()
msg = msg.to_bytes()
assert msg == recvd, i
+21
View File
@@ -0,0 +1,21 @@
import os
import tempfile
from typing import Dict
from parameterized import parameterized
import cereal.services as services
from cereal.services import SERVICE_LIST
class TestServices:
@parameterized.expand(SERVICE_LIST.keys())
def test_services(self, s):
service = SERVICE_LIST[s]
assert service.frequency <= 104
assert service.decimation != 0
def test_generated_header(self):
with tempfile.NamedTemporaryFile(suffix=".h") as f:
ret = os.system(f"python3 {services.__file__} > {f.name} && clang++ {f.name} -std=c++11")
assert ret == 0, "generated services header is not valid C"
+105
View File
@@ -0,0 +1,105 @@
/* THIS IS AN AUTOGENERATED FILE, PLEASE EDIT services.py */
#ifndef __SERVICES_H
#define __SERVICES_H
#include <map>
#include <string>
struct service { std::string name; bool should_log; float frequency; int decimation; size_t queue_size; };
static std::map<std::string, service> services = {
{ "gyroscope", {"gyroscope", true, 104.000000, 104, 256000}},
{ "accelerometer", {"accelerometer", true, 104.000000, 104, 256000}},
{ "magnetometer", {"magnetometer", true, 25.000000, -1, 256000}},
{ "lightSensor", {"lightSensor", true, 100.000000, 100, 256000}},
{ "temperatureSensor", {"temperatureSensor", true, 2.000000, 200, 256000}},
{ "gpsNMEA", {"gpsNMEA", true, 9.000000, -1, 256000}},
{ "deviceState", {"deviceState", true, 2.000000, 1, 256000}},
{ "chestnutState", {"chestnutState", true, 10.000000, 10, 256000}},
{ "touch", {"touch", true, 20.000000, 1, 256000}},
{ "can", {"can", true, 100.000000, 2053, 10485760}},
{ "controlsState", {"controlsState", true, 100.000000, 10, 2097152}},
{ "selfdriveState", {"selfdriveState", true, 100.000000, 10, 256000}},
{ "pandaStates", {"pandaStates", true, 10.000000, 1, 256000}},
{ "peripheralState", {"peripheralState", true, 2.000000, 1, 256000}},
{ "radarState", {"radarState", true, 20.000000, 5, 256000}},
{ "roadEncodeIdx", {"roadEncodeIdx", false, 20.000000, 1, 256000}},
{ "liveTracks", {"liveTracks", true, 20.000000, -1, 256000}},
{ "sendcan", {"sendcan", true, 100.000000, 139, 2097152}},
{ "logMessage", {"logMessage", true, 0.000000, -1, 256000}},
{ "errorLogMessage", {"errorLogMessage", true, 0.000000, 1, 256000}},
{ "liveCalibration", {"liveCalibration", true, 4.000000, 4, 256000}},
{ "liveTorqueParameters", {"liveTorqueParameters", true, 4.000000, 1, 256000}},
{ "liveDelay", {"liveDelay", true, 4.000000, 1, 256000}},
{ "androidLog", {"androidLog", true, 0.000000, -1, 256000}},
{ "carState", {"carState", true, 100.000000, 10, 256000}},
{ "carControl", {"carControl", true, 100.000000, 10, 256000}},
{ "carOutput", {"carOutput", true, 100.000000, 10, 256000}},
{ "longitudinalPlan", {"longitudinalPlan", true, 20.000000, 10, 256000}},
{ "lateralManeuverPlan", {"lateralManeuverPlan", true, 20.000000, -1, 256000}},
{ "driverAssistance", {"driverAssistance", true, 20.000000, 20, 256000}},
{ "procLog", {"procLog", true, 0.500000, 15, 10485760}},
{ "gpsLocationExternal", {"gpsLocationExternal", true, 10.000000, 10, 256000}},
{ "gpsLocation", {"gpsLocation", true, 1.000000, 1, 256000}},
{ "ubloxGnss", {"ubloxGnss", true, 10.000000, -1, 256000}},
{ "qcomGnss", {"qcomGnss", true, 2.000000, -1, 256000}},
{ "gnssMeasurements", {"gnssMeasurements", true, 10.000000, 10, 256000}},
{ "clocks", {"clocks", true, 0.100000, 1, 256000}},
{ "ubloxRaw", {"ubloxRaw", true, 20.000000, -1, 256000}},
{ "livePose", {"livePose", true, 20.000000, 4, 256000}},
{ "liveParameters", {"liveParameters", true, 20.000000, 5, 256000}},
{ "cameraOdometry", {"cameraOdometry", true, 20.000000, 10, 256000}},
{ "thumbnail", {"thumbnail", true, 0.016667, 1, 256000}},
{ "onroadEvents", {"onroadEvents", true, 1.000000, 1, 256000}},
{ "carParams", {"carParams", true, 0.020000, 1, 256000}},
{ "roadCameraState", {"roadCameraState", true, 20.000000, 20, 256000}},
{ "driverCameraState", {"driverCameraState", true, 20.000000, 20, 256000}},
{ "driverEncodeIdx", {"driverEncodeIdx", false, 20.000000, 1, 256000}},
{ "driverStateV2", {"driverStateV2", true, 20.000000, 10, 256000}},
{ "driverMonitoringState", {"driverMonitoringState", true, 20.000000, 10, 256000}},
{ "wideRoadEncodeIdx", {"wideRoadEncodeIdx", false, 20.000000, 1, 256000}},
{ "wideRoadCameraState", {"wideRoadCameraState", true, 20.000000, 20, 256000}},
{ "drivingModelData", {"drivingModelData", true, 20.000000, 10, 256000}},
{ "modelV2", {"modelV2", true, 20.000000, -1, 10485760}},
{ "managerState", {"managerState", true, 2.000000, 1, 256000}},
{ "uploaderState", {"uploaderState", true, 0.000000, 1, 256000}},
{ "navInstruction", {"navInstruction", true, 1.000000, 10, 256000}},
{ "navRoute", {"navRoute", true, 0.000000, -1, 256000}},
{ "navThumbnail", {"navThumbnail", true, 0.000000, -1, 256000}},
{ "qRoadEncodeIdx", {"qRoadEncodeIdx", false, 20.000000, -1, 256000}},
{ "userBookmark", {"userBookmark", true, 0.000000, 1, 256000}},
{ "soundPressure", {"soundPressure", true, 10.000000, 10, 256000}},
{ "rawAudioData", {"rawAudioData", false, 20.000000, -1, 256000}},
{ "bookmarkButton", {"bookmarkButton", true, 0.000000, 1, 256000}},
{ "audioFeedback", {"audioFeedback", true, 0.000000, 1, 256000}},
{ "visionSpeedLimitBookmark", {"visionSpeedLimitBookmark", false, 0.000000, 1, 256000}},
{ "roadEncodeData", {"roadEncodeData", false, 20.000000, -1, 10485760}},
{ "driverEncodeData", {"driverEncodeData", false, 20.000000, -1, 10485760}},
{ "wideRoadEncodeData", {"wideRoadEncodeData", false, 20.000000, -1, 10485760}},
{ "qRoadEncodeData", {"qRoadEncodeData", false, 20.000000, -1, 10485760}},
{ "uiDebug", {"uiDebug", true, 0.000000, 1, 256000}},
{ "testJoystick", {"testJoystick", true, 0.000000, -1, 256000}},
{ "alertDebug", {"alertDebug", true, 20.000000, 5, 256000}},
{ "livestreamWideRoadEncodeIdx", {"livestreamWideRoadEncodeIdx", false, 20.000000, -1, 256000}},
{ "livestreamRoadEncodeIdx", {"livestreamRoadEncodeIdx", false, 20.000000, -1, 256000}},
{ "livestreamDriverEncodeIdx", {"livestreamDriverEncodeIdx", false, 20.000000, -1, 256000}},
{ "livestreamWideRoadEncodeData", {"livestreamWideRoadEncodeData", false, 20.000000, -1, 2097152}},
{ "livestreamRoadEncodeData", {"livestreamRoadEncodeData", false, 20.000000, -1, 2097152}},
{ "livestreamDriverEncodeData", {"livestreamDriverEncodeData", false, 20.000000, -1, 2097152}},
{ "customReserved9", {"customReserved9", true, 0.000000, 1, 256000}},
{ "starpilotLateralState", {"starpilotLateralState", true, 100.000000, 10, 256000}},
{ "customReservedRawData0", {"customReservedRawData0", true, 0.000000, -1, 256000}},
{ "customReservedRawData1", {"customReservedRawData1", true, 0.000000, -1, 256000}},
{ "customReservedRawData2", {"customReservedRawData2", true, 0.000000, -1, 256000}},
{ "starpilotCarControl", {"starpilotCarControl", true, 100.000000, 10, 256000}},
{ "starpilotCarParams", {"starpilotCarParams", true, 0.020000, 1, 256000}},
{ "starpilotCarState", {"starpilotCarState", true, 100.000000, 10, 256000}},
{ "starpilotDeviceState", {"starpilotDeviceState", true, 2.000000, 1, 256000}},
{ "starpilotModelV2", {"starpilotModelV2", true, 20.000000, -1, 256000}},
{ "starpilotOnroadEvents", {"starpilotOnroadEvents", true, 1.000000, 1, 256000}},
{ "starpilotPlan", {"starpilotPlan", true, 20.000000, 10, 256000}},
{ "starpilotRadarState", {"starpilotRadarState", true, 20.000000, 5, 256000}},
{ "starpilotSelfdriveState", {"starpilotSelfdriveState", true, 100.000000, 10, 256000}},
{ "mapdExtendedOut", {"mapdExtendedOut", true, 1.000000, 1, 2097152}},
{ "mapdIn", {"mapdIn", true, 1.000000, 1, 2097152}},
{ "mapdOut", {"mapdOut", true, 20.000000, 20, 2097152}},
};
#endif
+152
View File
@@ -0,0 +1,152 @@
#!/usr/bin/env python3
from enum import IntEnum
from typing import Optional
# TODO: this should be automatically determined using the capnp schema
class QueueSize(IntEnum):
BIG = 10 * 1024 * 1024 # 10MB - video frames, large AI outputs
MEDIUM = 2 * 1024 * 1024 # 2MB - high freq (CAN), livestream
SMALL = 250 * 1024 # 250KB - most services
class Service:
def __init__(self, should_log: bool, frequency: float, decimation: Optional[int] = None,
queue_size: QueueSize = QueueSize.SMALL):
self.should_log = should_log
self.frequency = frequency
self.decimation = decimation
self.queue_size = queue_size
_services: dict[str, tuple] = {
# service: (should_log, frequency, qlog decimation (optional))
# note: the "EncodeIdx" packets will still be in the log
"gyroscope": (True, 104., 104),
"accelerometer": (True, 104., 104),
"magnetometer": (True, 25.),
"lightSensor": (True, 100., 100),
"temperatureSensor": (True, 2., 200),
"gpsNMEA": (True, 9.),
"deviceState": (True, 2., 1),
"chestnutState": (True, 10., 10),
"touch": (True, 20., 1),
"can": (True, 100., 2053, QueueSize.BIG), # decimation gives ~3 msgs in a full segment
"controlsState": (True, 100., 10, QueueSize.MEDIUM),
"selfdriveState": (True, 100., 10),
"pandaStates": (True, 10., 1),
"peripheralState": (True, 2., 1),
"radarState": (True, 20., 5),
"roadEncodeIdx": (False, 20., 1),
"liveTracks": (True, 20.),
"sendcan": (True, 100., 139, QueueSize.MEDIUM),
"logMessage": (True, 0.),
"errorLogMessage": (True, 0., 1),
"liveCalibration": (True, 4., 4),
"liveTorqueParameters": (True, 4., 1),
"liveDelay": (True, 4., 1),
"androidLog": (True, 0.),
"carState": (True, 100., 10),
"carControl": (True, 100., 10),
"carOutput": (True, 100., 10),
"longitudinalPlan": (True, 20., 10),
"lateralManeuverPlan": (True, 20.),
"driverAssistance": (True, 20., 20),
"procLog": (True, 0.5, 15, QueueSize.BIG),
"gpsLocationExternal": (True, 10., 10),
"gpsLocation": (True, 1., 1),
"ubloxGnss": (True, 10.),
"qcomGnss": (True, 2.),
"gnssMeasurements": (True, 10., 10),
"clocks": (True, 0.1, 1),
"ubloxRaw": (True, 20.),
"livePose": (True, 20., 4),
"liveParameters": (True, 20., 5),
"cameraOdometry": (True, 20., 10),
"thumbnail": (True, 1 / 60., 1),
"onroadEvents": (True, 1., 1),
"carParams": (True, 0.02, 1),
"roadCameraState": (True, 20., 20),
"driverCameraState": (True, 20., 20),
"driverEncodeIdx": (False, 20., 1),
"driverStateV2": (True, 20., 10),
"driverMonitoringState": (True, 20., 10),
"wideRoadEncodeIdx": (False, 20., 1),
"wideRoadCameraState": (True, 20., 20),
"drivingModelData": (True, 20., 10),
"modelV2": (True, 20., None, QueueSize.BIG),
"managerState": (True, 2., 1),
"uploaderState": (True, 0., 1),
"navInstruction": (True, 1., 10),
"navRoute": (True, 0.),
"navThumbnail": (True, 0.),
"qRoadEncodeIdx": (False, 20.),
"userBookmark": (True, 0., 1),
"soundPressure": (True, 10., 10),
"rawAudioData": (False, 20.),
"bookmarkButton": (True, 0., 1),
"audioFeedback": (True, 0., 1),
"visionSpeedLimitBookmark": (False, 0., 1),
"roadEncodeData": (False, 20., None, QueueSize.BIG),
"driverEncodeData": (False, 20., None, QueueSize.BIG),
"wideRoadEncodeData": (False, 20., None, QueueSize.BIG),
"qRoadEncodeData": (False, 20., None, QueueSize.BIG),
# debug
"uiDebug": (True, 0., 1),
"testJoystick": (True, 0.),
"alertDebug": (True, 20., 5),
"livestreamWideRoadEncodeIdx": (False, 20.),
"livestreamRoadEncodeIdx": (False, 20.),
"livestreamDriverEncodeIdx": (False, 20.),
"livestreamWideRoadEncodeData": (False, 20., None, QueueSize.MEDIUM),
"livestreamRoadEncodeData": (False, 20., None, QueueSize.MEDIUM),
"livestreamDriverEncodeData": (False, 20., None, QueueSize.MEDIUM),
"customReserved9": (True, 0., 1),
"starpilotLateralState": (True, 100., 10),
"customReservedRawData0": (True, 0.),
"customReservedRawData1": (True, 0.),
"customReservedRawData2": (True, 0.),
# StarPilot variables
"starpilotCarControl": (True, 100., 10),
"starpilotCarParams": (True, 0.02, 1),
"starpilotCarState": (True, 100., 10),
"starpilotDeviceState": (True, 2., 1),
"starpilotModelV2": (True, 20.),
"starpilotOnroadEvents": (True, 1., 1),
"starpilotPlan": (True, 20., 10),
"starpilotRadarState": (True, 20., 5),
"starpilotSelfdriveState": (True, 100., 10),
"mapdExtendedOut": (True, 1., 1, QueueSize.MEDIUM),
"mapdIn": (True, 1., 1, QueueSize.MEDIUM),
"mapdOut": (True, 20., 20, QueueSize.MEDIUM),
}
SERVICE_LIST = {name: Service(*vals) for
idx, (name, vals) in enumerate(_services.items())}
def build_header():
h = ""
h += "/* THIS IS AN AUTOGENERATED FILE, PLEASE EDIT services.py */\n"
h += "#ifndef __SERVICES_H\n"
h += "#define __SERVICES_H\n"
h += "#include <map>\n"
h += "#include <string>\n"
h += "struct service { std::string name; bool should_log; float frequency; int decimation; size_t queue_size; };\n"
h += "static std::map<std::string, service> services = {\n"
for k, v in SERVICE_LIST.items():
should_log = "true" if v.should_log else "false"
decimation = -1 if v.decimation is None else v.decimation
h += ' { "%s", {"%s", %s, %f, %d, %d}},\n' % \
(k, k, should_log, v.frequency, decimation, v.queue_size)
h += "};\n"
h += "#endif\n"
return h
if __name__ == "__main__":
print(build_header())
+2
View File
@@ -0,0 +1,2 @@
*.cpp
!params_pyx.cpp
+35
View File
@@ -0,0 +1,35 @@
Import('env', 'envCython', 'arch')
common_libs = [
'params.cc',
'swaglog.cc',
'util.cc',
'watchdog.cc',
'ratekeeper.cc'
]
_common = env.Library('common', common_libs, LIBS="json11")
files = [
'clutil.cc',
]
_gpucommon = env.Library('gpucommon', files)
Export('_common', '_gpucommon')
if GetOption('extras'):
env.Program('tests/test_common',
['tests/test_runner.cc', 'tests/test_params.cc', 'tests/test_util.cc', 'tests/test_swaglog.cc'],
LIBS=[_common, 'json11', 'zmq', 'pthread'])
# Cython bindings
params_python = envCython.Program('params_pyx.so', 'params_pyx.pyx', LIBS=envCython['LIBS'] + [_common, 'zmq', 'json11'])
SConscript([
'transformations/SConscript',
])
Import('transformations_python')
common_python = [params_python, transformations_python]
Export('common_python')
+64
View File
@@ -0,0 +1,64 @@
import jwt
import os
import requests
from datetime import datetime, timedelta, UTC
from openpilot.system.hardware.hw import Paths
from openpilot.system.version import get_version
from openpilot.starpilot.common.starpilot_utilities import use_konik_server
API_HOST = os.getenv('API_HOST', f"https://api.{'konik.ai' if use_konik_server() else 'commadotai.com'}")
# name: jwt signature algorithm
KEYS = {"id_rsa": "RS256",
"id_ecdsa": "ES256"}
class Api:
def __init__(self, dongle_id):
self.dongle_id = dongle_id
self.jwt_algorithm, self.private_key, _ = get_key_pair()
def get(self, *args, **kwargs):
return self.request('GET', *args, **kwargs)
def post(self, *args, **kwargs):
return self.request('POST', *args, **kwargs)
def request(self, method, endpoint, timeout=None, access_token=None, **params):
return api_get(endpoint, method=method, timeout=timeout, access_token=access_token, **params)
def get_token(self, payload_extra=None, expiry_hours=1):
now = datetime.now(UTC).replace(tzinfo=None)
payload = {
'identity': self.dongle_id,
'nbf': now,
'iat': now,
'exp': now + timedelta(hours=expiry_hours)
}
if payload_extra is not None:
payload.update(payload_extra)
token = jwt.encode(payload, self.private_key, algorithm=self.jwt_algorithm)
if isinstance(token, bytes):
token = token.decode('utf8')
return token
def api_get(endpoint, method='GET', timeout=None, access_token=None, session=None, **params):
headers = {}
if access_token is not None:
headers['Authorization'] = "JWT " + access_token
headers['User-Agent'] = "openpilot-" + get_version()
# TODO: add session to Api
req = requests if session is None else session
return req.request(method, API_HOST + "/" + endpoint, timeout=timeout, headers=headers, params=params)
def get_key_pair() -> tuple[str, str, str] | tuple[None, None, None]:
for key in KEYS:
if os.path.isfile(Paths.persist_root() + f'/comma/{key}') and os.path.isfile(Paths.persist_root() + f'/comma/{key}.pub'):
with open(Paths.persist_root() + f'/comma/{key}') as private, open(Paths.persist_root() + f'/comma/{key}.pub') as public:
return KEYS[key], private.read(), public.read()
return None, None, None
-15
View File
@@ -1,15 +0,0 @@
import requests
from selfdrive.version import version
def api_get(endpoint, method='GET', timeout=None, access_token=None, **params):
backend = "https://api.commadotai.com/"
headers = {}
if access_token is not None:
headers['Authorization'] = "JWT "+access_token
headers['User-Agent'] = "openpilot-" + version
return requests.request(method, backend+endpoint, timeout=timeout, headers = headers, params=params)
+2 -2
View File
@@ -1,4 +1,4 @@
import os
BASEDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../"))
+129
View File
@@ -0,0 +1,129 @@
#include "common/clutil.h"
#include <cassert>
#include <iostream>
#include <memory>
#include "common/util.h"
#include "common/swaglog.h"
namespace { // helper functions
template <typename Func, typename Id, typename Name>
std::string get_info(Func get_info_func, Id id, Name param_name) {
size_t size = 0;
CL_CHECK(get_info_func(id, param_name, 0, NULL, &size));
std::string info(size, '\0');
CL_CHECK(get_info_func(id, param_name, size, info.data(), NULL));
return info;
}
inline std::string get_platform_info(cl_platform_id id, cl_platform_info name) { return get_info(&clGetPlatformInfo, id, name); }
inline std::string get_device_info(cl_device_id id, cl_device_info name) { return get_info(&clGetDeviceInfo, id, name); }
void cl_print_info(cl_platform_id platform, cl_device_id device) {
size_t work_group_size = 0;
cl_device_type device_type = 0;
clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(work_group_size), &work_group_size, NULL);
clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(device_type), &device_type, NULL);
const char *type_str = "Other...";
switch (device_type) {
case CL_DEVICE_TYPE_CPU: type_str ="CL_DEVICE_TYPE_CPU"; break;
case CL_DEVICE_TYPE_GPU: type_str = "CL_DEVICE_TYPE_GPU"; break;
case CL_DEVICE_TYPE_ACCELERATOR: type_str = "CL_DEVICE_TYPE_ACCELERATOR"; break;
}
LOGD("vendor: %s", get_platform_info(platform, CL_PLATFORM_VENDOR).c_str());
LOGD("platform version: %s", get_platform_info(platform, CL_PLATFORM_VERSION).c_str());
LOGD("profile: %s", get_platform_info(platform, CL_PLATFORM_PROFILE).c_str());
LOGD("extensions: %s", get_platform_info(platform, CL_PLATFORM_EXTENSIONS).c_str());
LOGD("name: %s", get_device_info(device, CL_DEVICE_NAME).c_str());
LOGD("device version: %s", get_device_info(device, CL_DEVICE_VERSION).c_str());
LOGD("max work group size: %zu", work_group_size);
LOGD("type = %d, %s", (int)device_type, type_str);
}
void cl_print_build_errors(cl_program program, cl_device_id device) {
cl_build_status status;
clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_STATUS, sizeof(status), &status, NULL);
size_t log_size;
clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size);
std::string log(log_size, '\0');
clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, log_size, &log[0], NULL);
LOGE("build failed; status=%d, log: %s", status, log.c_str());
}
std::string resolve_program_path(const char *path) {
std::string resolved_path(path);
if (util::file_exists(resolved_path)) {
return resolved_path;
}
const std::string basedir = util::getenv("BASEDIR", "");
if (!basedir.empty()) {
// Handle repository-relative paths, e.g. "selfdrive/modeld/transforms/transform.cl".
if (!resolved_path.empty() && resolved_path.front() != '/') {
const std::string candidate = basedir + "/" + resolved_path;
if (util::file_exists(candidate)) {
return candidate;
}
}
// Recover from build-path-embedded absolute paths like "/work/selfdrive/...".
for (const char *marker : {"/selfdrive/", "/starpilot/", "/common/"}) {
if (const size_t idx = resolved_path.find(marker); idx != std::string::npos) {
const std::string candidate = basedir + "/" + resolved_path.substr(idx + 1);
if (util::file_exists(candidate)) {
LOGW("OpenCL source path remapped: %s -> %s", resolved_path.c_str(), candidate.c_str());
return candidate;
}
}
}
}
return resolved_path;
}
} // namespace
cl_device_id cl_get_device_id(cl_device_type device_type) {
cl_uint num_platforms = 0;
CL_CHECK(clGetPlatformIDs(0, NULL, &num_platforms));
std::unique_ptr<cl_platform_id[]> platform_ids = std::make_unique<cl_platform_id[]>(num_platforms);
CL_CHECK(clGetPlatformIDs(num_platforms, &platform_ids[0], NULL));
for (size_t i = 0; i < num_platforms; ++i) {
LOGD("platform[%zu] CL_PLATFORM_NAME: %s", i, get_platform_info(platform_ids[i], CL_PLATFORM_NAME).c_str());
// Get first device
if (cl_device_id device_id = NULL; clGetDeviceIDs(platform_ids[i], device_type, 1, &device_id, NULL) == 0 && device_id) {
cl_print_info(platform_ids[i], device_id);
return device_id;
}
}
LOGE("No valid openCL platform found");
assert(0);
return nullptr;
}
cl_context cl_create_context(cl_device_id device_id) {
return CL_CHECK_ERR(clCreateContext(NULL, 1, &device_id, NULL, NULL, &err));
}
void cl_release_context(cl_context context) {
clReleaseContext(context);
}
cl_program cl_program_from_file(cl_context ctx, cl_device_id device_id, const char* path, const char* args) {
return cl_program_from_source(ctx, device_id, util::read_file(resolve_program_path(path)), args);
}
cl_program cl_program_from_source(cl_context ctx, cl_device_id device_id, const std::string& src, const char* args) {
const char *csrc = src.c_str();
cl_program prg = CL_CHECK_ERR(clCreateProgramWithSource(ctx, 1, &csrc, NULL, &err));
if (int err = clBuildProgram(prg, 1, &device_id, args, NULL, NULL); err != 0) {
cl_print_build_errors(prg, device_id);
assert(0);
}
return prg;
}
+28
View File
@@ -0,0 +1,28 @@
#pragma once
#ifdef __APPLE__
#include <OpenCL/cl.h>
#else
#include <CL/cl.h>
#endif
#include <string>
#define CL_CHECK(_expr) \
do { \
assert(CL_SUCCESS == (_expr)); \
} while (0)
#define CL_CHECK_ERR(_expr) \
({ \
cl_int err = CL_INVALID_VALUE; \
__typeof__(_expr) _ret = _expr; \
assert(_ret&& err == CL_SUCCESS); \
_ret; \
})
cl_device_id cl_get_device_id(cl_device_type device_type);
cl_context cl_create_context(cl_device_id device_id);
void cl_release_context(cl_context context);
cl_program cl_program_from_source(cl_context ctx, cl_device_id device_id, const std::string& src, const char* args = nullptr);
cl_program cl_program_from_file(cl_context ctx, cl_device_id device_id, const char* path, const char* args);
+29
View File
@@ -0,0 +1,29 @@
import numpy as np
# conversions
class CV:
# Speed
MPH_TO_KPH = 1.609344
KPH_TO_MPH = 1. / MPH_TO_KPH
MS_TO_KPH = 3.6
KPH_TO_MS = 1. / MS_TO_KPH
MS_TO_MPH = MS_TO_KPH * KPH_TO_MPH
MPH_TO_MS = MPH_TO_KPH * KPH_TO_MS
MS_TO_KNOTS = 1.9438
KNOTS_TO_MS = 1. / MS_TO_KNOTS
# Angle
DEG_TO_RAD = np.pi / 180.
RAD_TO_DEG = 1. / DEG_TO_RAD
# Mass
LB_TO_KG = 0.453592
# StarPilot variables
METER_TO_FOOT = 3.28084
FOOT_TO_METER = 1. / METER_TO_FOOT
CM_TO_INCH = 1. / 2.54
INCH_TO_CM = 1. / CM_TO_INCH
ACCELERATION_DUE_TO_GRAVITY = 9.81 # m/s^2
-220
View File
@@ -1,220 +0,0 @@
import re
import os
import struct
import bitstring
import sys
import numbers
from collections import namedtuple
def int_or_float(s):
# return number, trying to maintain int format
try:
return int(s)
except ValueError:
return float(s)
DBCSignal = namedtuple(
"DBCSignal", ["name", "start_bit", "size", "is_little_endian", "is_signed",
"factor", "offset", "tmin", "tmax", "units"])
class dbc(object):
def __init__(self, fn):
self.name, _ = os.path.splitext(os.path.basename(fn))
with open(fn) as f:
self.txt = f.read().split("\n")
self._warned_addresses = set()
# regexps from https://github.com/ebroecker/canmatrix/blob/master/canmatrix/importdbc.py
bo_regexp = re.compile("^BO\_ (\w+) (\w+) *: (\w+) (\w+)")
sg_regexp = re.compile("^SG\_ (\w+) : (\d+)\|(\d+)@(\d+)([\+|\-]) \(([0-9.+\-eE]+),([0-9.+\-eE]+)\) \[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] \"(.*)\" (.*)")
sgm_regexp = re.compile("^SG\_ (\w+) (\w+) *: (\d+)\|(\d+)@(\d+)([\+|\-]) \(([0-9.+\-eE]+),([0-9.+\-eE]+)\) \[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] \"(.*)\" (.*)")
# A dictionary which maps message ids to tuples ((name, size), signals).
# name is the ASCII name of the message.
# size is the size of the message in bytes.
# signals is a list signals contained in the message.
# signals is a list of DBCSignal in order of increasing start_bit.
self.msgs = {}
# lookup to bit reverse each byte
self.bits_index = [(i & ~0b111) + ((-i-1) & 0b111) for i in xrange(64)]
for l in self.txt:
l = l.strip()
if l.startswith("BO_ "):
# new group
dat = bo_regexp.match(l)
if dat is None:
print "bad BO", l
name = dat.group(2)
size = int(dat.group(3))
ids = int(dat.group(1), 0) # could be hex
if ids in self.msgs:
sys.exit("Duplicate address detected %d %s" % (ids, self.name))
self.msgs[ids] = ((name, size), [])
if l.startswith("SG_ "):
# new signal
dat = sg_regexp.match(l)
go = 0
if dat is None:
dat = sgm_regexp.match(l)
go = 1
if dat is None:
print "bad SG", l
sgname = dat.group(1)
start_bit = int(dat.group(go+2))
signal_size = int(dat.group(go+3))
is_little_endian = int(dat.group(go+4))==1
is_signed = dat.group(go+5)=='-'
factor = int_or_float(dat.group(go+6))
offset = int_or_float(dat.group(go+7))
tmin = int_or_float(dat.group(go+8))
tmax = int_or_float(dat.group(go+9))
units = dat.group(go+10)
self.msgs[ids][1].append(
DBCSignal(sgname, start_bit, signal_size, is_little_endian,
is_signed, factor, offset, tmin, tmax, units))
for msg in self.msgs.viewvalues():
msg[1].sort(key=lambda x: x.start_bit)
self.msg_name_to_address = {}
for address, m in self.msgs.items():
name = m[0][0]
self.msg_name_to_address[name] = address
def lookup_msg_id(self, msg_id):
if not isinstance(msg_id, numbers.Number):
msg_id = self.msg_name_to_address[msg_id]
return msg_id
def encode(self, msg_id, dd):
"""Encode a CAN message using the dbc.
Inputs:
msg_id: The message ID.
dd: A dictionary mapping signal name to signal data.
"""
msg_id = self.lookup_msg_id(msg_id)
# TODO: Stop using bitstring, which is super slow.
msg_def = self.msgs[msg_id]
size = msg_def[0][1]
bsf = bitstring.Bits(hex="00"*size)
for s in msg_def[1]:
ival = dd.get(s.name)
if ival is not None:
ival = (ival / s.factor) - s.offset
ival = int(round(ival))
# should pack this
if s.is_little_endian:
ss = s.start_bit
else:
ss = self.bits_index[s.start_bit]
if s.is_signed:
tbs = bitstring.Bits(int=ival, length=s.size)
else:
tbs = bitstring.Bits(uint=ival, length=s.size)
lpad = bitstring.Bits(bin="0b"+"0"*ss)
rpad = bitstring.Bits(bin="0b"+"0"*(8*size-(ss+s.size)))
tbs = lpad+tbs+rpad
bsf |= tbs
return bsf.tobytes()
def decode(self, x, arr=None, debug=False):
"""Decode a CAN message using the dbc.
Inputs:
x: A collection with elements (address, time, data), where address is
the CAN address, time is the bus time, and data is the CAN data as a
hex string.
arr: Optional list of signals which should be decoded and returned.
debug: True to print debugging statements.
Returns:
A tuple (name, data), where name is the name of the CAN message and data
is the decoded result. If arr is None, data is a dict of properties.
Otherwise data is a list of the same length as arr.
Returns (None, None) if the message could not be decoded.
"""
if arr is None:
out = {}
else:
out = [None]*len(arr)
msg = self.msgs.get(x[0])
if msg is None:
if x[0] not in self._warned_addresses:
#print("WARNING: Unknown message address {}".format(x[0]))
self._warned_addresses.add(x[0])
return None, None
name = msg[0][0]
if debug:
print name
blen = 8*len(x[2])
st = x[2].rjust(8, '\x00')
le, be = None, None
for s in msg[1]:
if arr is not None and s[0] not in arr:
continue
# big or little endian?
# see http://vi-firmware.openxcplatform.com/en/master/config/bit-numbering.html
if s[3] is False:
ss = self.bits_index[s[1]]
if be is None:
be = struct.unpack(">Q", st)[0]
x2_int = be
data_bit_pos = (blen - (ss + s[2]))
else:
if le is None:
le = struct.unpack("<Q", st)[0]
x2_int = le
ss = s[1]
data_bit_pos = ss
if data_bit_pos < 0:
continue
ival = (x2_int >> data_bit_pos) & ((1 << (s[2])) - 1)
if s[4] and (ival & (1<<(s[2]-1))): # signed
ival -= (1<<s[2])
# control the offset
ival = (ival * s[5]) + s[6]
#if debug:
# print "%40s %2d %2d %7.2f %s" % (s[0], s[1], s[2], ival, s[-1])
if arr is None:
out[s[0]] = ival
else:
out[arr.index(s[0])] = ival
return name, out
def get_signals(self, msg):
msg = self.lookup_msg_id(msg)
return [sgs.name for sgs in self.msgs[msg][1]]
if __name__ == "__main__":
from opendbc import DBC_PATH
dbc_test = dbc(os.path.join(DBC_PATH, sys.argv[1]))
print dbc_test.get_signals(0xe4)
+109
View File
@@ -0,0 +1,109 @@
#!/usr/bin/env python3
import io
import math
import os
import sys
from pathlib import Path
CHUNK_SIZE = 45 * 1024 * 1024 # 45MB, under GitHub's 50MB limit
def get_chunk_name(name, idx, num_chunks):
return f"{name}.chunk{idx + 1:02d}of{num_chunks:02d}"
def get_manifest_path(name):
return f"{name}.chunkmanifest"
def _chunk_paths(path, num_chunks):
return [get_manifest_path(path)] + [get_chunk_name(path, i, num_chunks) for i in range(num_chunks)]
def get_chunk_paths(path, file_size):
num_chunks = math.ceil(file_size / CHUNK_SIZE)
return _chunk_paths(path, num_chunks)
get_chunk_targets = get_chunk_paths
def chunk_file(path, targets):
manifest_path, *chunk_paths = targets
with open(path, 'rb') as f:
data = f.read()
actual_num_chunks = max(1, math.ceil(len(data) / CHUNK_SIZE))
assert len(chunk_paths) >= actual_num_chunks, f"Allowed {len(chunk_paths)} chunks but needs at least {actual_num_chunks}, for path {path}"
for i, chunk_path in enumerate(chunk_paths):
with open(chunk_path, 'wb') as f:
f.write(data[i * CHUNK_SIZE:(i + 1) * CHUNK_SIZE])
Path(manifest_path).write_text(str(len(chunk_paths)))
os.remove(path)
def get_existing_chunks(path):
if os.path.isfile(path):
return [path]
manifest_path = get_manifest_path(path)
if os.path.isfile(manifest_path):
num_chunks = int(Path(manifest_path).read_text().strip())
return _chunk_paths(path, num_chunks)
raise FileNotFoundError(path)
def file_chunked_exists(path) -> bool:
return os.path.isfile(path) or os.path.isfile(get_manifest_path(path))
class ChunkStream(io.RawIOBase):
def __init__(self, paths):
self._paths = iter(paths)
self._file = None
def readable(self):
return True
def readinto(self, buffer):
count = 0
view = memoryview(buffer)
while count < len(buffer):
if self._file is None:
path = next(self._paths, None)
if path is None:
break
self._file = open(path, "rb")
bytes_read = self._file.readinto(view[count:])
if not bytes_read:
self._file.close()
self._file = None
continue
count += bytes_read
return count
def close(self):
if self._file is not None:
self._file.close()
self._file = None
super().close()
def open_file_chunked(path):
chunks = get_existing_chunks(path)
if chunks and chunks[0] == get_manifest_path(path):
chunks = chunks[1:]
return io.BufferedReader(ChunkStream(chunks))
def read_file_chunked(path):
manifest_path = get_manifest_path(path)
if os.path.isfile(manifest_path):
num_chunks = int(Path(manifest_path).read_text().strip())
return b''.join(Path(get_chunk_name(path, i, num_chunks)).read_bytes() for i in range(num_chunks))
if os.path.isfile(path):
return Path(path).read_bytes()
raise FileNotFoundError(path)
if __name__ == "__main__":
file_path = sys.argv[1]
chunk_file(file_path, get_chunk_targets(file_path, os.path.getsize(file_path)))
+34
View File
@@ -0,0 +1,34 @@
class FirstOrderFilter:
def __init__(self, x0, rc, dt, initialized=True):
self.x = x0
self.dt = dt
self.update_alpha(rc)
self.initialized = initialized
def update_alpha(self, rc):
self.alpha = self.dt / (rc + self.dt)
def update(self, x):
if self.initialized:
self.x = (1. - self.alpha) * self.x + self.alpha * x
else:
self.initialized = True
self.x = x
return self.x
class BounceFilter(FirstOrderFilter):
def __init__(self, x0, rc, dt, initialized=True, bounce=2):
self.velocity = FirstOrderFilter(0.0, 0.15, dt)
self.bounce = bounce
super().__init__(x0, rc, dt, initialized)
def update(self, x):
super().update(x)
scale = self.dt / (1.0 / 60.0) # tuned at 60 fps
self.velocity.x += (x - self.x) * self.bounce * scale * self.dt
self.velocity.update(0.0)
if abs(self.velocity.x) < 1e-5:
self.velocity.x = 0.0
self.x += self.velocity.x
return self.x
-104
View File
@@ -1,104 +0,0 @@
class HONDA:
CIVIC = "HONDA CIVIC 2016 TOURING"
ACURA_ILX = "ACURA ILX 2016 ACURAWATCH PLUS"
CRV = "HONDA CR-V 2016 TOURING"
ODYSSEY = "HONDA ODYSSEY 2018 EX-L"
ACURA_RDX = "ACURA RDX 2018 ACURAWATCH PLUS"
class TOYOTA:
PRIUS = "TOYOTA PRIUS 2017"
RAV4H = "TOYOTA RAV4 2017 HYBRID"
RAV4 = "TOYOTA RAV4 2017"
COROLLA = "TOYOTA COROLLA 2017"
LEXUS_RXH = "LEXUS RX HYBRID 2017"
_FINGERPRINTS = {
HONDA.ACURA_ILX: {
1024L: 5, 513L: 5, 1027L: 5, 1029L: 8, 929L: 4, 1057L: 5, 777L: 8, 1034L: 5, 1036L: 8, 398L: 3, 399L: 7, 145L: 8, 660L: 8, 985L: 3, 923L: 2, 542L: 7, 773L: 7, 800L: 8, 432L: 7, 419L: 8, 420L: 8, 1030L: 5, 422L: 8, 808L: 8, 428L: 8, 304L: 8, 819L: 7, 821L: 5, 57L: 3, 316L: 8, 545L: 4, 464L: 8, 1108L: 8, 597L: 8, 342L: 6, 983L: 8, 344L: 8, 804L: 8, 1039L: 8, 476L: 4, 892L: 8, 490L: 8, 1064L: 7, 882L: 2, 884L: 7, 887L: 8, 888L: 8, 380L: 8, 1365L: 5,
# sent messages
0xe4: 5, 0x1fa: 8, 0x200: 3, 0x30c: 8, 0x33d: 5,
},
HONDA.ACURA_RDX: {
57L: 3, 145L: 8, 229L: 4, 308L: 5, 316L: 8, 342L: 6, 344L: 8, 380L: 8, 392L: 6, 398L: 3, 399L: 6, 404L: 4, 420L: 8, 422L: 8, 426L: 8, 432L: 7, 464L: 8, 474L: 5, 476L: 4, 487L: 4, 490L: 8, 506L: 8, 542L: 7, 545L: 4, 597L: 8, 660L: 8, 773L: 7, 777L: 8, 780L: 8, 800L: 8, 804L: 8, 808L: 8, 819L: 7, 821L: 5, 829L: 5, 882L: 2, 884L: 7, 887L: 8, 888L: 8, 892L: 8, 923L: 2, 929L: 4, 963L: 8, 965L: 8, 966L: 8, 967L: 8, 983L: 8, 985L: 3, 1024L: 5, 1027L: 5, 1029L: 8, 1033L: 5, 1034L: 5, 1036L: 8, 1039L: 8, 1057L: 5, 1064L: 7, 1108L: 8, 1365L: 5, 1424L: 5, 1729L: 1
},
HONDA.CIVIC: {
1024L: 5, 513L: 5, 1027L: 5, 1029L: 8, 777L: 8, 1036L: 8, 1039L: 8, 1424L: 5, 401L: 8, 148L: 8, 662L: 4, 985L: 3, 795L: 8, 773L: 7, 800L: 8, 545L: 6, 420L: 8, 806L: 8, 808L: 8, 1322L: 5, 427L: 3, 428L: 8, 304L: 8, 432L: 7, 57L: 3, 450L: 8, 929L: 8, 330L: 8, 1302L: 8, 464L: 8, 1361L: 5, 1108L: 8, 597L: 8, 470L: 2, 344L: 8, 804L: 8, 399L: 7, 476L: 7, 1633L: 8, 487L: 4, 892L: 8, 490L: 8, 493L: 5, 884L: 8, 891L: 8, 380L: 8, 1365L: 5,
# sent messages
0xe4: 5, 0x1fa: 8, 0x200: 3, 0x30c: 8, 0x33d: 5, 0x35e: 8, 0x39f: 8,
},
HONDA.CRV: {
57L: 3, 145L: 8, 316L: 8, 340L: 8, 342L: 6, 344L: 8, 380L: 8, 398L: 3, 399L: 6, 401L: 8, 420L: 8, 422L: 8, 426L: 8, 432L: 7, 464L: 8, 474L: 5, 476L: 4, 487L: 4, 490L: 8, 493L: 3, 507L: 1, 542L: 7, 545L: 4, 597L: 8, 660L: 8, 661L: 4, 773L: 7, 777L: 8, 800L: 8, 804L: 8, 808L: 8, 882L: 2, 884L: 7, 888L: 8, 891L: 8, 892L: 8, 923L: 2, 929L: 8, 983L: 8, 985L: 3, 1024L: 5, 1027L: 5, 1029L: 8, 1033L: 5, 1036L: 8, 1039L: 8, 1057L: 5, 1064L: 7, 1108L: 8, 1125L: 8, 1296L: 8, 1365L: 5, 1424L: 5, 1600L: 5, 1601L: 8,
# sent messages
0x194: 4, 0x1fa: 8, 0x30c: 8, 0x33d: 5,
},
HONDA.ODYSSEY: {
57L: 3, 148L: 8, 228L: 5, 229L: 4, 316L: 8, 342L: 6, 344L: 8, 380L: 8, 399L: 7, 411L: 5, 419L: 8, 420L: 8, 427L: 3, 432L: 7, 450L: 8, 463L: 8, 464L: 8, 476L: 4, 490L: 8, 506L: 8, 542L: 7, 545L: 6, 597L: 8, 662L: 4, 773L: 7, 777L: 8, 780L: 8, 795L: 8, 800L: 8, 804L: 8, 806L: 8, 808L: 8, 817L: 4, 819L: 7, 821L: 5, 825L: 4, 829L: 5, 837L: 5, 856L: 7, 862L: 8, 871L: 8, 881L: 8, 882L: 4, 884L: 8, 891L: 8, 892L: 8, 905L: 8, 923L: 2, 927L: 8, 929L: 8, 963L: 8, 965L: 8, 966L: 8, 967L: 8, 983L: 8, 985L: 3, 1029L: 8, 1036L: 8, 1052L: 8, 1064L: 7, 1088L: 8, 1089L: 8, 1092L: 1, 1108L: 8, 1110L: 8, 1125L: 8, 1296L: 8, 1302L: 8, 1600L: 5, 1601L: 8, 1612L: 5, 1613L: 5, 1614L: 5, 1615L: 8, 1616L: 5, 1619L: 5, 1623L: 5, 1668L: 5
},
TOYOTA.RAV4: {
36L: 8, 37L: 8, 170L: 8, 180L: 8, 186L: 4, 426L: 6, 452L: 8, 464L: 8, 466L: 8, 467L: 8, 547L: 8, 548L: 8, 552L: 4, 562L: 4, 608L: 8, 610L: 5, 643L: 7, 705L: 8, 725L: 2, 740L: 5, 800L: 8, 835L: 8, 836L: 8, 849L: 4, 869L: 7, 870L: 7, 871L: 2, 896L: 8, 897L: 8, 900L: 6, 902L: 6, 905L: 8, 911L: 8, 916L: 3, 918L: 7, 921L: 8, 933L: 8, 944L: 8, 945L: 8, 951L: 8, 955L: 4, 956L: 8, 979L: 2, 998L: 5, 999L: 7, 1000L: 8, 1001L: 8, 1005L: 2, 1008L: 2, 1014L: 8, 1017L: 8, 1041L: 8, 1042L: 8, 1043L: 8, 1044L: 8, 1056L: 8, 1059L: 1, 1114L: 8, 1161L: 8, 1162L: 8, 1163L: 8, 1176L: 8, 1177L: 8, 1178L: 8, 1179L: 8, 1180L: 8, 1181L: 8, 1190L: 8, 1191L: 8, 1192L: 8, 1196L: 8, 1227L: 8, 1228L: 8, 1235L: 8, 1237L: 8, 1263L: 8, 1264L: 8, 1279L: 8, 1408L: 8, 1409L: 8, 1410L: 8, 1552L: 8, 1553L: 8, 1554L: 8, 1555L: 8, 1556L: 8, 1557L: 8, 1561L: 8, 1562L: 8, 1568L: 8, 1569L: 8, 1570L: 8, 1571L: 8, 1572L: 8, 1584L: 8, 1589L: 8, 1592L: 8, 1593L: 8, 1595L: 8, 1596L: 8, 1597L: 8, 1600L: 8, 1656L: 8, 1664L: 8, 1728L: 8, 1745L: 8, 1779L: 8, 1904L: 8, 1912L: 8, 1990L: 8, 1998L: 8
},
TOYOTA.RAV4H: {
36L: 8, 37L: 8, 170L: 8, 180L: 8, 186L: 4, 426L: 6, 452L: 8, 464L: 8, 466L: 8, 467L: 8, 547L: 8, 548L: 8, 552L: 4, 562L: 4, 608L: 8, 610L: 5, 643L: 7, 705L: 8, 725L: 2, 740L: 5, 800L: 8, 835L: 8, 836L: 8, 849L: 4, 869L: 7, 870L: 7, 871L: 2, 896L: 8, 897L: 8, 900L: 6, 902L: 6, 905L: 8, 911L: 8, 916L: 3, 918L: 7, 921L: 8, 933L: 8, 944L: 8, 945L: 8, 951L: 8, 955L: 8, 956L: 8, 979L: 2, 998L: 5, 999L: 7, 1000L: 8, 1001L: 8, 1008L: 2, 1014L: 8, 1017L: 8, 1041L: 8, 1042L: 8, 1043L: 8, 1044L: 8, 1056L: 8, 1059L: 1, 1114L: 8, 1161L: 8, 1162L: 8, 1163L: 8, 1176L: 8, 1177L: 8, 1178L: 8, 1179L: 8, 1180L: 8, 1181L: 8, 1190L: 8, 1191L: 8, 1192L: 8, 1196L: 8, 1227L: 8, 1228L: 8, 1235L: 8, 1237L: 8, 1263L: 8, 1279L: 8, 1408L: 8, 1409L: 8, 1410L: 8, 1552L: 8, 1553L: 8, 1554L: 8, 1555L: 8, 1556L: 8, 1557L: 8, 1561L: 8, 1562L: 8, 1568L: 8, 1569L: 8, 1570L: 8, 1571L: 8, 1572L: 8, 1584L: 8, 1589L: 8, 1592L: 8, 1593L: 8, 1595L: 8, 1596L: 8, 1597L: 8, 1600L: 8, 1656L: 8, 1664L: 8, 1728L: 8, 1745L: 8, 1779L: 8, 1904L: 8, 1912L: 8, 1990L: 8, 1998L: 8, 581L: 5, 296: 8, 560L: 7, 713L: 8, 550L: 8, 608L: 8, 37L: 8, 36L: 8, 950L: 8, 1198L: 8, 1197L: 8, 1199L: 8, 1212L: 8, 953L: 3, 1264L: 8, 1184L: 8, 1005L: 2, 1185L: 8, 1232L: 8, 1186L: 8
},
TOYOTA.PRIUS: [{
36L: 8, 37L: 8, 166L: 8, 170L: 8, 180L: 8, 295L: 8, 296L: 8, 426L: 6, 452L: 8, 466L: 8, 467L: 8, 550L: 8, 552L: 4, 560L: 7, 562L: 6, 581L: 5, 608L: 8, 610L: 8, 614L: 8, 643L: 7, 658L: 8, 713L: 8, 740L: 5, 742L: 8, 743L: 8, 800L: 8, 810L: 2, 814L: 8, 829L: 2, 830L: 7, 835L: 8, 836L: 8, 863L: 8, 869L: 7, 870L: 7, 871L: 2, 898L: 8, 900L: 6, 902L: 6, 905L: 8, 918L: 8, 921L: 8, 933L: 8, 944L: 8, 945L: 8, 950L: 8, 951L: 8, 953L: 8, 955L: 8, 956L: 8, 971L: 7, 975L: 5, 993L: 8, 998L: 5, 999L: 7, 1000L: 8, 1001L: 8, 1014L: 8, 1017L: 8, 1020L: 8, 1041L: 8, 1042L: 8, 1044L: 8, 1056L: 8, 1057L: 8, 1059L: 1, 1071L: 8, 1077L: 8, 1082L: 8, 1083L: 8, 1084L: 8, 1085L: 8, 1086L: 8, 1114L: 8, 1132L: 8, 1161L: 8, 1162L: 8, 1163L: 8, 1175L: 8, 1227L: 8, 1228L: 8, 1235L: 8, 1237L: 8, 1279L: 8, 1552L: 8, 1553L: 8, 1556L: 8, 1557L: 8, 1568L: 8, 1570L: 8, 1571L: 8, 1572L: 8, 1595L: 8, 1777L: 8, 1779L: 8, 1904L: 8, 1912L: 8, 1990L: 8, 1998L: 8
},
# Prius Prime
{
36L: 8, 37L: 8, 166L: 8, 170L: 8, 180L: 8, 295L: 8, 296L: 8, 426L: 6, 452L: 8, 466L: 8, 467L: 8, 550L: 8, 552L: 4, 560L: 7, 562L: 6, 581L: 5, 608L: 8, 610L: 8, 614L: 8, 643L: 7, 658L: 8, 713L: 8, 740L: 5, 742L: 8, 743L: 8, 800L: 8, 810L: 2, 814L: 8, 824L: 2, 829L: 2, 830L: 7, 835L: 8, 836L: 8, 863L: 8, 869L: 7, 870L: 7, 871L: 2,898L: 8, 900L: 6, 902L: 6, 905L: 8, 913L: 8, 918L: 8, 921L: 8, 933L: 8, 944L: 8, 945L: 8, 950L: 8, 951L: 8, 953L: 8, 955L: 8, 956L: 8, 971L: 7, 974L: 8, 975L: 5, 993L: 8, 998L: 5, 999L: 7, 1000L: 8, 1001L: 8, 1014L: 8, 1017L: 8, 1020L: 8, 1041L: 8, 1042L: 8, 1044L: 8, 1056L: 8, 1057L: 8, 1059L: 1, 1071L: 8, 1076L: 8, 1077L: 8, 1082L: 8, 1083L: 8, 1084L: 8, 1085L: 8, 1086L: 8, 1114L: 8, 1132L: 8, 1161L: 8, 1162L: 8, 1163L: 8, 1164L: 8, 1165L: 8, 1166L: 8, 1167L: 8, 1175L: 8, 1227L: 8, 1228L: 8, 1235L: 8, 1237L: 8, 1279L: 8, 1552L: 8, 1553L: 8, 1556L: 8, 1557L: 8, 1568L: 8, 1570L: 8, 1571L: 8, 1572L: 8, 1595L: 8, 1777L: 8, 1779L: 8, 1904L: 8, 1912L: 8, 1990L: 8, 1998L: 8
},
# Taiwanese Prius Prime
{
36L: 8, 37L: 8, 166L: 8, 170L: 8, 180L: 8, 295L: 8, 296L: 8, 426L: 6, 452L: 8, 466L: 8, 467L: 8, 550L: 8, 552L: 4, 560L: 7, 562L: 6, 581L: 5, 608L: 8, 610L: 8, 614L: 8, 643L: 7, 658L: 8, 713L: 8, 740L: 5, 742L: 8, 743L: 8, 800L: 8, 810L: 2, 814L: 8, 824L: 2, 829L: 2, 830L: 7, 835L: 8, 836L: 8, 845L: 5, 863L: 8, 869L: 7, 870L: 7, 871L: 2,898L: 8, 900L: 6, 902L: 6, 905L: 8, 913L: 8, 918L: 8, 921L: 8, 933L: 8, 944L: 8, 945L: 8, 950L: 8, 951L: 8, 953L: 8, 955L: 8, 956L: 8, 971L: 7, 974L: 8, 975L: 5, 993L: 8, 998L: 5, 999L: 7, 1000L: 8, 1001L: 8, 1005L: 2, 1014L: 8, 1017L: 8, 1020L: 8, 1041L: 8, 1042L: 8, 1044L: 8, 1056L: 8, 1057L: 8, 1059L: 1, 1071L: 8, 1076L: 8, 1077L: 8, 1082L: 8, 1083L: 8, 1084L: 8, 1085L: 8, 1086L: 8, 1114L: 8, 1132L: 8, 1161L: 8, 1162L: 8, 1163L: 8, 1164L: 8, 1165L: 8, 1166L: 8, 1167L: 8, 1175L: 8, 1227L: 8, 1228L: 8, 1235L: 8, 1237L: 8, 1264L: 8, 1279L: 8, 1552L: 8, 1553L: 8, 1556L: 8, 1557L: 8, 1568L: 8, 1570L: 8, 1571L: 8, 1572L: 8, 1595L: 8, 1777L: 8, 1779L: 8, 1904L: 8, 1912L: 8, 1990L: 8, 1998L: 8
}
],
TOYOTA.COROLLA: {
36: 8, 37: 8, 170: 8, 180: 8, 186: 4, 426: 6, 452: 8, 464: 8, 466: 8, 467: 8, 547: 8, 548: 8, 552: 4, 608: 8, 610: 5, 643: 7, 705: 8, 740: 5, 800: 8, 835: 8, 836: 8, 849: 4, 869: 7, 870: 7, 871: 2, 896: 8, 897: 8, 900: 6, 902: 6, 905: 8, 911: 8, 916: 2, 921: 8, 933: 8, 944: 8, 945: 8, 951: 8, 955: 4, 956: 8, 979: 2, 992: 8, 998: 5, 999: 7, 1000: 8, 1001: 8, 1017: 8, 1041: 8, 1042: 8, 1043: 8, 1044: 8, 1056: 8, 1059: 1, 1114: 8, 1161: 8, 1162: 8, 1163: 8, 1196: 8, 1227: 8, 1235: 8, 1279: 8, 1552: 8, 1553: 8, 1556: 8, 1557: 8, 1561: 8, 1562: 8, 1568: 8, 1569: 8, 1570: 8, 1571: 8, 1572: 8, 1584: 8, 1589: 8, 1592: 8, 1596: 8, 1597: 8, 1600: 8, 1664: 8, 1728: 8, 1779: 8, 1904: 8, 1912: 8, 1990: 8, 1998: 8
},
TOYOTA.LEXUS_RXH: {
36: 8, 37: 8, 166: 8, 170: 8, 180: 8, 295: 8, 296: 8, 426: 6, 452: 8, 466: 8, 467: 8, 550: 8, 552: 4, 560: 7, 562: 6, 581: 5, 608: 8, 610: 5, 643: 7, 658: 8, 713: 8, 740: 5, 742: 8, 743: 8, 800: 8, 810: 2, 812: 3, 814: 8, 830: 7, 835: 8, 836: 8, 845: 5, 863: 8, 869: 7, 870: 7, 871: 2, 898: 8, 900: 6, 902: 6, 905: 8, 913: 8, 918: 8, 921: 8, 933: 8, 944: 8, 945: 8, 950: 8, 951: 8, 953: 8, 955: 8, 956: 8, 971: 7, 975: 6, 993: 8, 998: 5, 999: 7, 1000: 8, 1001: 8, 1005: 2, 1014: 8, 1017: 8, 1020: 8, 1041: 8, 1042: 8, 1044: 8, 1056: 8, 1059: 1, 1063: 8, 1071: 8, 1077: 8, 1082: 8, 1114: 8, 1161: 8, 1162: 8, 1163: 8, 1164: 8, 1165: 8, 1166: 8, 1167: 8, 1227: 8, 1228: 8, 1235: 8, 1237: 8, 1264: 8, 1279: 8, 1552: 8, 1553: 8, 1556: 8, 1557: 8, 1568: 8, 1570: 8, 1571: 8, 1572: 8, 1575: 8, 1595: 8, 1777: 8, 1779: 8, 1808: 8, 1810: 8, 1816: 8, 1818: 8, 1840: 8, 1848: 8, 1904: 8, 1912: 8, 1940: 8, 1941: 8, 1948: 8, 1949: 8, 1952: 8, 1956: 8, 1960: 8, 1964: 8, 1986: 8, 1990: 8, 1994: 8, 1998: 8, 2004: 8, 2012: 8
},
}
# support additional internal only fingerprints
try:
from common.fingerprints_internal import add_additional_fingerprints
add_additional_fingerprints(_FINGERPRINTS)
except ImportError:
pass
def is_valid_for_fingerprint(msg, car_fingerprint):
adr = msg.address
return msg.src != 0 or (adr in car_fingerprint and car_fingerprint[adr] == len(msg.dat))
def eliminate_incompatible_cars(msg, candidate_cars):
"""Removes cars that could not have sent msg.
Inputs:
msg: A cereal/log CanData message from the car.
candidate_cars: A list of cars to consider.
Returns:
A list containing the subset of candidate_cars that could have sent msg.
"""
compatible_cars = []
for car_name in candidate_cars:
car_fingerprints = _FINGERPRINTS[car_name]
if not isinstance(car_fingerprints, list):
car_fingerprints = [car_fingerprints]
for fingerprint in car_fingerprints:
if is_valid_for_fingerprint(msg, fingerprint):
compatible_cars.append(car_name)
break
return compatible_cars
def all_known_cars():
"""Returns a list of all known car strings."""
return _FINGERPRINTS.keys()
+42
View File
@@ -0,0 +1,42 @@
from functools import cache
import subprocess
from openpilot.common.utils import run_cmd, run_cmd_default
@cache
def get_commit(cwd: str = None, branch: str = "HEAD") -> str:
return run_cmd_default(["git", "rev-parse", branch], cwd=cwd)
@cache
def get_commit_date(cwd: str = None, commit: str = "HEAD") -> str:
return run_cmd_default(["git", "show", "--no-patch", "--format='%ct %ci'", commit], cwd=cwd)
@cache
def get_short_branch(cwd: str = None) -> str:
return run_cmd_default(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd=cwd)
@cache
def get_branch(cwd: str = None) -> str:
return run_cmd_default(["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"], cwd=cwd)
@cache
def get_origin(cwd: str = None) -> str:
try:
local_branch = run_cmd(["git", "name-rev", "--name-only", "HEAD"], cwd=cwd)
tracking_remote = run_cmd(["git", "config", "branch." + local_branch + ".remote"], cwd=cwd)
return run_cmd(["git", "config", "remote." + tracking_remote + ".url"], cwd=cwd)
except subprocess.CalledProcessError: # Not on a branch, fallback
return run_cmd_default(["git", "config", "--get", "remote.origin.url"], cwd=cwd)
@cache
def get_normalized_origin(cwd: str = None) -> str:
return get_origin(cwd) \
.replace("git@", "", 1) \
.replace(".git", "", 1) \
.replace("https://", "", 1) \
.replace(":", "/", 1)
+89
View File
@@ -0,0 +1,89 @@
import os
import fcntl
import ctypes
from functools import cache
def gpio_init(pin: int, output: bool) -> None:
try:
with open(f"/sys/class/gpio/gpio{pin}/direction", 'wb') as f:
f.write(b"out" if output else b"in")
except Exception as e:
print(f"Failed to set gpio {pin} direction: {e}")
def gpio_set(pin: int, high: bool) -> None:
try:
with open(f"/sys/class/gpio/gpio{pin}/value", 'wb') as f:
f.write(b"1" if high else b"0")
except Exception as e:
print(f"Failed to set gpio {pin} value: {e}")
def gpio_read(pin: int) -> bool | None:
val = None
try:
with open(f"/sys/class/gpio/gpio{pin}/value", 'rb') as f:
val = bool(int(f.read().strip()))
except Exception as e:
print(f"Failed to set gpio {pin} value: {e}")
return val
def gpio_export(pin: int) -> None:
if os.path.isdir(f"/sys/class/gpio/gpio{pin}"):
return
try:
with open("/sys/class/gpio/export", 'w') as f:
f.write(str(pin))
except Exception:
print(f"Failed to export gpio {pin}")
@cache
def get_irq_action(irq: int) -> list[str]:
try:
with open(f"/sys/kernel/irq/{irq}/actions") as f:
actions = f.read().strip().split(',')
return actions
except FileNotFoundError:
return []
def get_irqs_for_action(action: str) -> list[str]:
ret = []
with open("/proc/interrupts") as f:
for l in f.readlines():
irq = l.split(':')[0].strip()
if irq.isdigit() and action in get_irq_action(irq):
ret.append(irq)
return ret
# *** gpiochip ***
class gpioevent_data(ctypes.Structure):
_fields_ = [
("timestamp", ctypes.c_uint64),
("id", ctypes.c_uint32),
]
class gpioevent_request(ctypes.Structure):
_fields_ = [
("lineoffset", ctypes.c_uint32),
("handleflags", ctypes.c_uint32),
("eventflags", ctypes.c_uint32),
("label", ctypes.c_char * 32),
("fd", ctypes.c_int)
]
def gpiochip_get_ro_value_fd(label: str, gpiochip_id: int, pin: int) -> int:
GPIOEVENT_REQUEST_BOTH_EDGES = 0x3
GPIOHANDLE_REQUEST_INPUT = 0x1
GPIO_GET_LINEEVENT_IOCTL = 0xc030b404
rq = gpioevent_request()
rq.lineoffset = pin
rq.handleflags = GPIOHANDLE_REQUEST_INPUT
rq.eventflags = GPIOEVENT_REQUEST_BOTH_EDGES
rq.label = label.encode('utf-8')[:31] + b'\0'
fd = os.open(f"/dev/gpiochip{gpiochip_id}", os.O_RDONLY)
fcntl.ioctl(fd, GPIO_GET_LINEEVENT_IOCTL, rq)
os.close(fd)
return int(rq.fd)
+8
View File
@@ -0,0 +1,8 @@
from openpilot.common.params import Params
def get_gps_location_service(params: Params) -> str:
if params.get_bool("UbloxAvailable"):
return "gpsLocationExternal"
else:
return "gpsLocation"
-251
View File
@@ -1,251 +0,0 @@
import abc
import numpy as np
# The EKF class contains the framework for an Extended Kalman Filter, but must be subclassed to use.
# A subclass must implement:
# 1) calc_transfer_fun(); see bottom of file for more info.
# 2) __init__() to initialize self.state, self.covar, and self.process_noise appropriately
# Alternatively, the existing implementations of EKF can be used (e.g. EKF2D)
# Sensor classes are optionally used to pass measurement information into the EKF, to keep
# sensor parameters and processing methods for a each sensor together.
# Sensor classes have a read() method which takes raw sensor data and returns
# a SensorReading object, which can be passed to the EKF update() method.
# For usage, see run_ekf1d.py in selfdrive/new for a simple example.
# ekf.predict(dt) should be called between update cycles with the time since it was last called.
# Ideally, predict(dt) should be called at a relatively constant rate.
# update() should be called once per sensor, and can be called multiple times between predict steps.
# Access and set the state of the filter directly with ekf.state and ekf.covar.
class SensorReading:
# Given a perfect model and no noise, data = obs_model * state
def __init__(self, data, covar, obs_model):
self.data = data
self.obs_model = obs_model
self.covar = covar
def __repr__(self):
return "SensorReading(data={}, covar={}, obs_model={})".format(
repr(self.data), repr(self.covar), repr(self.obs_model))
# A generic sensor class that does no pre-processing of data
class SimpleSensor:
# obs_model can be
# a full observation model matrix, or
# an integer or tuple of indices into ekf.state, indicating which variables are being directly observed
# covar can be
# a full covariance matrix
# a float or tuple of individual covars for each component of the sensor reading
# dims is the number of states in the EKF
def __init__(self, obs_model, covar, dims):
# Allow for integer covar/obs_model
if not hasattr(obs_model, "__len__"):
obs_model = (obs_model, )
if not hasattr(covar, "__len__"):
covar = (covar, )
# Full observation model passed
if dims in np.array(obs_model).shape:
self.obs_model = np.asmatrix(obs_model)
self.covar = np.asmatrix(covar)
# Indices of unit observations passed
else:
self.obs_model = np.matlib.zeros((len(obs_model), dims))
self.obs_model[:, list(obs_model)] = np.identity(len(obs_model))
if np.asarray(covar).ndim == 2:
self.covar = np.asmatrix(covar)
elif len(covar) == len(obs_model):
self.covar = np.matlib.diag(covar)
else:
self.covar = np.matlib.identity(len(obs_model)) * covar
def read(self, data, covar=None):
if covar:
self.covar = covar
return SensorReading(data, self.covar, self.obs_model)
class EKF:
__metaclass__ = abc.ABCMeta
def __init__(self, debug=False):
self.DEBUG = debug
def __str__(self):
return "EKF(state={}, covar={})".format(self.state, self.covar)
# Measurement update
# Reading should be a SensorReading object with data, covar, and obs_model attributes
def update(self, reading):
# Potential improvements:
# deal with negative covars
# add noise to really low covars to ensure stability
# use mahalanobis distance to reject outliers
# wrap angles after state updates and innovation
# y = z - H*x
innovation = reading.data - reading.obs_model * self.state
if self.DEBUG:
print "reading:\n",reading.data
print "innovation:\n",innovation
# S = H*P*H' + R
innovation_covar = reading.obs_model * self.covar * reading.obs_model.T + reading.covar
# K = P*H'*S^-1
kalman_gain = self.covar * reading.obs_model.T * np.linalg.inv(
innovation_covar)
if self.DEBUG:
print "gain:\n", kalman_gain
print "innovation_covar:\n", innovation_covar
print "innovation: ", innovation
print "test: ", self.covar * reading.obs_model.T * (
reading.obs_model * self.covar * reading.obs_model.T + reading.covar *
0).I
# x = x + K*y
self.state += kalman_gain*innovation
# print "covar", np.diag(self.covar)
#self.state[(roll_vel, yaw_vel, pitch_vel),:] = reading.data
# Standard form: P = (I - K*H)*P
# self.covar = (self.identity - kalman_gain*reading.obs_model) * self.covar
# Use the Joseph form for numerical stability: P = (I-K*H)*P*(I - K*H)' + K*R*K'
aux_mtrx = (self.identity - kalman_gain * reading.obs_model)
self.covar = aux_mtrx * self.covar * aux_mtrx.T + kalman_gain * reading.covar * kalman_gain.T
if self.DEBUG:
print "After update"
print "state\n", self.state
print "covar:\n",self.covar
def update_scalar(self, reading):
# like update but knowing that measurement is a scalar
# this avoids matrix inversions and speeds up (surprisingly) drived.py a lot
# innovation = reading.data - np.matmul(reading.obs_model, self.state)
# innovation_covar = np.matmul(np.matmul(reading.obs_model, self.covar), reading.obs_model.T) + reading.covar
# kalman_gain = np.matmul(self.covar, reading.obs_model.T)/innovation_covar
# self.state += np.matmul(kalman_gain, innovation)
# aux_mtrx = self.identity - np.matmul(kalman_gain, reading.obs_model)
# self.covar = np.matmul(aux_mtrx, np.matmul(self.covar, aux_mtrx.T)) + np.matmul(kalman_gain, np.matmul(reading.covar, kalman_gain.T))
# written without np.matmul
es = np.einsum
ABC_T = "ij,jk,lk->il"
AB_T = "ij,kj->ik"
AB = "ij,jk->ik"
innovation = reading.data - es(AB, reading.obs_model, self.state)
innovation_covar = es(ABC_T, reading.obs_model, self.covar,
reading.obs_model) + reading.covar
kalman_gain = es(AB_T, self.covar, reading.obs_model) / innovation_covar
self.state += es(AB, kalman_gain, innovation)
aux_mtrx = self.identity - es(AB, kalman_gain, reading.obs_model)
self.covar = es(ABC_T, aux_mtrx, self.covar, aux_mtrx) + \
es(ABC_T, kalman_gain, reading.covar, kalman_gain)
# Prediction update
def predict(self, dt):
es = np.einsum
ABC_T = "ij,jk,lk->il"
AB = "ij,jk->ik"
# State update
transfer_fun, transfer_fun_jacobian = self.calc_transfer_fun(dt)
# self.state = np.matmul(transfer_fun, self.state)
# self.covar = np.matmul(np.matmul(transfer_fun_jacobian, self.covar), transfer_fun_jacobian.T) + self.process_noise * dt
# x = f(x, u), written in the form x = A(x, u)*x
self.state = es(AB, transfer_fun, self.state)
# P = J*P*J' + Q
self.covar = es(ABC_T, transfer_fun_jacobian, self.covar,
transfer_fun_jacobian) + self.process_noise * dt #!dt
#! Clip covariance to avoid explosions
self.covar = np.clip(self.covar,-1e10,1e10)
@abc.abstractmethod
def calc_transfer_fun(self, dt):
"""Return a tuple with the transfer function and transfer function jacobian
The transfer function and jacobian should both be a numpy matrix of size DIMSxDIMS
The transfer function matrix A should satisfy the state-update equation
x_(k+1) = A * x_k
The jacobian J is the direct jacobian A*x_k. For linear systems J=A.
Current implementations calculate A and J as functions of state. Control input
can be added trivially by adding a control parameter to predict() and calc_tranfer_update(),
and using it during calculation of A and J
"""
class FastEKF1D(EKF):
"""Fast version of EKF for 1D problems with scalar readings."""
def __init__(self, dt, var_init, Q):
super(FastEKF1D, self).__init__(False)
self.state = [0, 0]
self.covar = [var_init, var_init, 0]
# Process Noise
self.dtQ0 = dt * Q[0]
self.dtQ1 = dt * Q[1]
def update(self, reading):
raise NotImplementedError
def update_scalar(self, reading):
# TODO(mgraczyk): Delete this for speed.
# assert np.all(reading.obs_model == [1, 0])
rcov = reading.covar[0, 0]
x = self.state
S = self.covar
innovation = reading.data - x[0]
innovation_covar = S[0] + rcov
k0 = S[0] / innovation_covar
k1 = S[2] / innovation_covar
x[0] += k0 * innovation
x[1] += k1 * innovation
mk = 1 - k0
S[1] += k1 * (k1 * (S[0] + rcov) - 2 * S[2])
S[2] = mk * (S[2] - k1 * S[0]) + rcov * k0 * k1
S[0] = mk * mk * S[0] + rcov * k0 * k0
def predict(self, dt):
# State update
x = self.state
x[0] += dt * x[1]
# P = J*P*J' + Q
S = self.covar
S[0] += dt * (2 * S[2] + dt * S[1]) + self.dtQ0
S[2] += dt * S[1]
S[1] += self.dtQ1
# Clip covariance to avoid explosions
S = max(-1e10, min(S, 1e10))
def calc_transfer_fun(self, dt):
tf = np.identity(2)
tf[0, 1] = dt
tfj = tf
return tf, tfj
-23
View File
@@ -1,23 +0,0 @@
import numpy as np
class KF1D:
# this EKF assumes constant covariance matrix, so calculations are much simpler
# the Kalman gain also needs to be precomputed using the control module
def __init__(self, x0, A, C, K):
self.x = x0
self.A = A
self.C = C
self.K = K
self.A_K = self.A - np.dot(self.K, self.C)
# K matrix needs to be pre-computed as follow:
# import control
# (x, l, K) = control.dare(np.transpose(self.A), np.transpose(self.C), Q, R)
# self.K = np.transpose(K)
def update(self, meas):
self.x = np.dot(self.A_K, self.x) + np.dot(self.K, meas)
return self.x
Binary file not shown.
+136 -29
View File
@@ -1,14 +1,23 @@
import io
import os
import sys
import copy
import json
import time
import uuid
import socket
import logging
import traceback
import numpy as np
from threading import local
from collections import OrderedDict
from contextlib import contextmanager
LOG_TIMESTAMPS = "LOG_TIMESTAMPS" in os.environ
def json_handler(obj):
if isinstance(obj, np.bool_):
return bool(obj)
# if isinstance(obj, (datetime.date, datetime.time)):
# return obj.isoformat()
return repr(obj)
@@ -18,7 +27,7 @@ def json_robust_dumps(obj):
class NiceOrderedDict(OrderedDict):
def __str__(self):
return '{'+', '.join("%r: %r" % p for p in self.iteritems())+'}'
return json_robust_dumps(self)
class SwagFormatter(logging.Formatter):
def __init__(self, swaglogger):
@@ -60,10 +69,57 @@ class SwagFormatter(logging.Formatter):
return record_dict
def format(self, record):
if self.swaglogger is None:
raise Exception("must set swaglogger before calling format()")
return json_robust_dumps(self.format_dict(record))
_tmpfunc = lambda: 0
_srcfile = os.path.normcase(_tmpfunc.__code__.co_filename)
class SwagLogFileFormatter(SwagFormatter):
def fix_kv(self, k, v):
# append type to names to preserve legacy naming in logs
# avoids overlapping key namespaces with different types
# e.g. log.info() creates 'msg' -> 'msg$s'
# log.event() creates 'msg.health.logMonoTime' -> 'msg.health.logMonoTime$i'
# because overlapping namespace 'msg' caused problems
if isinstance(v, (str, bytes)):
k += "$s"
elif isinstance(v, float):
k += "$f"
elif isinstance(v, bool):
k += "$b"
elif isinstance(v, int):
k += "$i"
elif isinstance(v, dict):
nv = {}
for ik, iv in v.items():
ik, iv = self.fix_kv(ik, iv)
nv[ik] = iv
v = nv
elif isinstance(v, list):
k += "$a"
return k, v
def format(self, record):
if isinstance(record, str):
v = json.loads(record)
else:
v = self.format_dict(record)
mk, mv = self.fix_kv('msg', v['msg'])
del v['msg']
v[mk] = mv
v['id'] = uuid.uuid4().hex
return json_robust_dumps(v)
class SwagErrorFilter(logging.Filter):
def filter(self, record):
return record.levelno < logging.ERROR
def _tmpfunc():
return 0
def _srcfile():
return os.path.normcase(_tmpfunc.__code__.co_filename)
class SwagLogger(logging.Logger):
def __init__(self):
@@ -74,28 +130,6 @@ class SwagLogger(logging.Logger):
self.log_local = local()
self.log_local.ctx = {}
def findCaller(self):
"""
Find the stack frame of the caller so that we can note the source
file name, line number and function name.
"""
# f = currentframe()
f = sys._getframe(3)
#On some versions of IronPython, currentframe() returns None if
#IronPython isn't run with -X:Frames.
if f is not None:
f = f.f_back
rv = "(unknown file)", 0, "(unknown function)"
while hasattr(f, "f_code"):
co = f.f_code
filename = os.path.normcase(co.co_filename)
if filename in (logging._srcfile, _srcfile):
f = f.f_back
continue
rv = (co.co_filename, f.f_lineno, co.co_name)
break
return rv
def local_ctx(self):
try:
return self.log_local.ctx
@@ -122,21 +156,94 @@ class SwagLogger(logging.Logger):
def bind_global(self, **kwargs):
self.global_ctx.update(kwargs)
def event(self, event_name, *args, **kwargs):
def event(self, event, *args, **kwargs):
evt = NiceOrderedDict()
evt['event'] = event_name
evt['event'] = event
if args:
evt['args'] = args
evt.update(kwargs)
self.info(evt)
if 'error' in kwargs:
self.error(evt)
elif 'debug' in kwargs:
self.debug(evt)
else:
self.info(evt)
def timestamp(self, event_name):
if LOG_TIMESTAMPS:
t = time.monotonic()
tstp = NiceOrderedDict()
tstp['timestamp'] = NiceOrderedDict()
tstp['timestamp']["event"] = event_name
tstp['timestamp']["time"] = t*1e9
self.debug(tstp)
def findCaller(self, stack_info=False, stacklevel=1):
"""
Find the stack frame of the caller so that we can note the source
file name, line number and function name.
"""
f = sys._getframe(3)
#On some versions of IronPython, currentframe() returns None if
#IronPython isn't run with -X:Frames.
if f is not None:
f = f.f_back
orig_f = f
while f and stacklevel > 1:
f = f.f_back
stacklevel -= 1
if not f:
f = orig_f
rv = "(unknown file)", 0, "(unknown function)", None
while hasattr(f, "f_code"):
co = f.f_code
filename = os.path.normcase(co.co_filename)
if filename == _srcfile:
f = f.f_back
continue
sinfo = None
if stack_info:
sio = io.StringIO()
sio.write('Stack (most recent call last):\n')
traceback.print_stack(f, file=sio)
sinfo = sio.getvalue()
if sinfo[-1] == '\n':
sinfo = sinfo[:-1]
sio.close()
rv = (co.co_filename, f.f_lineno, co.co_name, sinfo)
break
return rv
if __name__ == "__main__":
log = SwagLogger()
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
stdout_handler.addFilter(SwagErrorFilter())
log.addHandler(stdout_handler)
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setLevel(logging.ERROR)
log.addHandler(stderr_handler)
log.info("asdasd %s", "a")
log.info({'wut': 1})
log.warning("warning")
log.error("error")
log.critical("critical")
log.event("test", x="y")
with log.ctx():
stdout_handler.setFormatter(SwagFormatter(log))
stderr_handler.setFormatter(SwagFormatter(log))
log.bind(user="some user")
log.info("in req")
log.event("do_req")
print("")
log.warning("warning")
print("")
log.error("error")
print("")
log.critical("critical")
print("")
log.event("do_req", a=1, b="c")
+45
View File
@@ -0,0 +1,45 @@
HTML_REPLACEMENTS = [
(r'&', r'&amp;'),
(r'"', r'&quot;'),
]
def parse_markdown(text: str, tab_length: int = 2) -> str:
lines = text.split("\n")
output: list[str] = []
list_level = 0
def end_outstanding_lists(level: int, end_level: int) -> int:
while level > end_level:
level -= 1
output.append("</ul>")
if level > 0:
output.append("</li>")
return end_level
for i, line in enumerate(lines):
if i + 1 < len(lines) and lines[i + 1].startswith("==="): # heading
output.append(f"<h1>{line}</h1>")
elif line.startswith("==="):
pass
elif line.lstrip().startswith("* "): # list
line_level = 1 + line.count(" " * tab_length, 0, line.index("*"))
if list_level >= line_level:
list_level = end_outstanding_lists(list_level, line_level)
else:
list_level += 1
if list_level > 1:
output[-1] = output[-1].replace("</li>", "")
output.append("<ul>")
output.append(f"<li>{line.replace('*', '', 1).lstrip()}</li>")
else:
list_level = end_outstanding_lists(list_level, 0)
if len(line) > 0:
output.append(line)
end_outstanding_lists(list_level, 0)
output_str = "\n".join(output) + "\n"
for (fr, to) in HTML_REPLACEMENTS:
output_str = output_str.replace(fr, to)
return output_str
+8 -11
View File
@@ -1,8 +1,7 @@
#ifndef COMMON_MAT_H
#define COMMON_MAT_H
#pragma once
typedef struct vec3 {
float v[3];
float v[3];
} vec3;
typedef struct vec4 {
@@ -10,14 +9,14 @@ typedef struct vec4 {
} vec4;
typedef struct mat3 {
float v[3*3];
float v[3*3];
} mat3;
typedef struct mat4 {
float v[4*4];
} mat4;
static inline mat3 matmul3(const mat3 a, const mat3 b) {
static inline mat3 matmul3(const mat3 &a, const mat3 &b) {
mat3 ret = {{0.0}};
for (int r=0; r<3; r++) {
for (int c=0; c<3; c++) {
@@ -31,7 +30,7 @@ static inline mat3 matmul3(const mat3 a, const mat3 b) {
return ret;
}
static inline vec3 matvecmul3(const mat3 a, const vec3 b) {
static inline vec3 matvecmul3(const mat3 &a, const vec3 &b) {
vec3 ret = {{0.0}};
for (int r=0; r<3; r++) {
for (int c=0; c<3; c++) {
@@ -41,7 +40,7 @@ static inline vec3 matvecmul3(const mat3 a, const vec3 b) {
return ret;
}
static inline mat4 matmul(const mat4 a, const mat4 b) {
static inline mat4 matmul(const mat4 &a, const mat4 &b) {
mat4 ret = {{0.0}};
for (int r=0; r<4; r++) {
for (int c=0; c<4; c++) {
@@ -55,7 +54,7 @@ static inline mat4 matmul(const mat4 a, const mat4 b) {
return ret;
}
static inline vec4 matvecmul(const mat4 a, const vec4 b) {
static inline vec4 matvecmul(const mat4 &a, const vec4 &b) {
vec4 ret = {{0.0}};
for (int r=0; r<4; r++) {
for (int c=0; c<4; c++) {
@@ -67,7 +66,7 @@ static inline vec4 matvecmul(const mat4 a, const vec4 b) {
// scales the input and output space of a transformation matrix
// that assumes pixel-center origin.
static inline mat3 transform_scale_buffer(const mat3 in, float s) {
static inline mat3 transform_scale_buffer(const mat3 &in, float s) {
// in_pt = ( transform(out_pt/s + 0.5) - 0.5) * s
mat3 transform_out = {{
@@ -84,5 +83,3 @@ static inline mat3 transform_scale_buffer(const mat3 in, float s) {
return matmul3(transform_in, matmul3(in, transform_out));
}
#endif
+50
View File
@@ -0,0 +1,50 @@
"""
Utilities for generating mock messages for testing.
example in common/tests/test_mock.py
"""
import functools
import threading
from cereal.messaging import PubMaster
from cereal.services import SERVICE_LIST
from openpilot.common.mock.generators import generate_livePose
from openpilot.common.realtime import Ratekeeper
MOCK_GENERATOR = {
"livePose": generate_livePose
}
def generate_messages_loop(services: list[str], done: threading.Event):
pm = PubMaster(services)
rk = Ratekeeper(100)
i = 0
while not done.is_set():
for s in services:
should_send = i % (100/SERVICE_LIST[s].frequency) == 0
if should_send:
message = MOCK_GENERATOR[s]()
pm.send(s, message)
i += 1
rk.keep_time()
def mock_messages(services: list[str] | str):
if isinstance(services, str):
services = [services]
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
done = threading.Event()
t = threading.Thread(target=generate_messages_loop, args=(services, done))
t.start()
try:
return func(*args, **kwargs)
finally:
done.set()
t.join()
return wrapper
return decorator
+14
View File
@@ -0,0 +1,14 @@
from cereal import messaging
def generate_livePose():
msg = messaging.new_message('livePose')
meas = {'x': 0.0, 'y': 0.0, 'z': 0.0, 'xStd': 0.0, 'yStd': 0.0, 'zStd': 0.0, 'valid': True}
msg.livePose.orientationNED = meas
msg.livePose.velocityDevice = meas
msg.livePose.angularVelocityDevice = meas
msg.livePose.accelerationDevice = meas
msg.livePose.inputsOK = True
msg.livePose.posenetOK = True
msg.livePose.sensorsOK = True
return msg

Some files were not shown because too many files have changed in this diff Show More