Skip to content

Commit 2b5bee7

Browse files
Instructions wall -> guided flow (#177)
* start flow * device pics * no font flashing for flasher * fix buidl * readme * lil more * lil more * fast mode * zadig * lil polish * tiny assets * better unsupported browser * fix up storage screen * rm dark mode * links * lil friendlier * lil more
1 parent b6098a9 commit 2b5bee7

File tree

16 files changed

+685
-265
lines changed

16 files changed

+685
-265
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,9 @@ bun dev
1414
Open [http://localhost:5173](http://localhost:5173) with your browser to see the result.
1515

1616
You can start editing the page by modifying `src/app/index.jsx`. The page auto-updates as you edit the file.
17+
18+
**Helpful for debugging**
19+
* [chrome://usb-internals/](chrome://usb-internals/)
20+
* [chrome://device-log/](chrome://device-log/)
21+
* Add `?fast=1` to the URL to skip flashing the system partition (the slowest). Useful for testing the full flow quickly.
22+
* Add `?windows=1` to the URL to force Windows mode (shows Zadig driver instructions). Useful for testing the Windows flow on other platforms.

deploy-preview.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
set -e
3+
4+
BRANCH="${1:-$(git branch --show-current)}"
5+
6+
bun run build
7+
bunx wrangler pages deploy dist --project-name=connect --branch="$BRANCH"
8+
9+
echo ""
10+
echo "Preview URL: https://${BRANCH}.connect-d5y.pages.dev"

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
<meta
88
name="description"
9-
content="Update your comma device to the latest software"
9+
content="Restore your comma device to a fresh factory state"
1010
/>
1111
<title>flash.comma.ai</title>
1212
</head>

src/app/Flash.jsx

Lines changed: 544 additions & 72 deletions
Large diffs are not rendered by default.

src/app/index.jsx

Lines changed: 37 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -1,180 +1,50 @@
1-
import { Suspense, lazy } from 'react'
1+
import Flash from './Flash'
22

3-
import comma from '../assets/comma.svg'
4-
import qdlPortsFour from '../assets/qdl-ports-four.svg'
5-
import qdlPortsThree from '../assets/qdl-ports-three.svg'
6-
import zadigCreateNewDevice from '../assets/zadig_create_new_device.png'
7-
import zadigForm from '../assets/zadig_form.png'
8-
9-
import { isLinux, isWindows } from '../utils/platform'
10-
11-
const Flash = lazy(() => import('./Flash'))
3+
function DiscordIcon({ className }) {
4+
return (
5+
<svg className={className} viewBox="0 0 24 24" fill="currentColor">
6+
<path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" />
7+
</svg>
8+
)
9+
}
1210

13-
const VENDOR_ID = '05C6'
14-
const PRODUCT_ID = '9008'
15-
const DETACH_SCRIPT = 'for d in /sys/bus/usb/drivers/qcserial/*-*; do [ -e "$d" ] && echo -n "$(basename $d)" | sudo tee /sys/bus/usb/drivers/qcserial/unbind > /dev/null; done';
11+
function GitHubIcon({ className }) {
12+
return (
13+
<svg className={className} viewBox="0 0 24 24" fill="currentColor">
14+
<path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z" />
15+
</svg>
16+
)
17+
}
1618

17-
function CopyText({ children: text }) {
18-
return <div className="relative text-sm">
19-
<pre className="font-mono pt-12">{text}</pre>
20-
<button
21-
className="absolute top-2 right-2 bg-blue-600 hover:bg-blue-500 active:bg-blue-300 transition-colors text-white p-1 rounded-md"
22-
onClick={() => navigator.clipboard.writeText(text)}
23-
>
24-
Copy
25-
</button>
26-
</div>;
19+
function CommaIcon({ className }) {
20+
return (
21+
<svg className={className} viewBox="2 3 42 42" fill="currentColor">
22+
<path fillRule="evenodd" clipRule="evenodd" d="M16.6964 40C16.6964 39.2596 16.6385 38.6393 16.7236 38.0415C16.7599 37.7865 17.0575 37.5135 17.3001 37.3595C18.4832 36.6087 19.7684 36.0092 20.8699 35.1481C24.4378 32.3587 26.5526 28.6866 26.6682 23.9166C26.7009 22.5622 26.203 22.2238 25.0654 22.7514C21.7817 24.2746 18.2505 23.3815 16.3659 20.5509C14.3107 17.4636 14.6001 13.3531 17.0626 10.6562C20.2079 7.21156 25.3833 7.10849 28.9522 10.3982C31.09 12.3688 32.1058 14.9132 32.3591 17.8074C33.2084 27.5032 28.3453 35.495 19.4941 39.0057C18.6181 39.353 17.7198 39.6382 16.6964 40Z" />
23+
</svg>
24+
)
2725
}
2826

2927
export default function App() {
3028
const version = import.meta.env.VITE_PUBLIC_GIT_SHA || 'dev'
3129
console.info(`flash.comma.ai version: ${version}`)
3230
return (
33-
<div className="flex flex-col lg:flex-row flex-wrap">
34-
<main className="p-12 md:p-16 lg:p-20 xl:p-24 w-screen max-w-none lg:max-w-prose lg:w-auto h-auto lg:h-screen lg:overflow-y-auto prose dark:prose-invert prose-green bg-white dark:bg-gray-900">
35-
<section>
36-
<img src={comma} alt="comma" width={128} height={128} className="dark:invert" />
37-
<h1>flash.comma.ai</h1>
38-
<p>
39-
This tool allows you to flash AGNOS onto your comma device. AGNOS is the Ubuntu-based operating system for
40-
your <a href="https://comma.ai/shop/comma-four" target="_blank">comma 3/3X/4</a>.
41-
</p>
42-
</section>
43-
<hr />
44-
45-
<section>
46-
<h2>Requirements</h2>
47-
<ul>
48-
<li>
49-
A web browser which supports <a href="https://caniuse.com/webusb" target="_blank">WebUSB</a>
50-
{" "}(such as Google Chrome, Microsoft Edge, Opera), running on Windows, macOS, Linux, or Android.
51-
</li>
52-
<li>
53-
A good quality USB-C cable to connect the device to your computer. <span title="SuperSpeed">USB 3</span>
54-
{" "}is recommended for faster flashing speed.
55-
</li>
56-
<li>
57-
Another USB-C cable and a charger, to power the device outside your car.
58-
</li>
59-
</ul>
60-
{isWindows && (<>
61-
<h3>USB Driver</h3>
62-
<p>You need additional driver software for Windows before you connect your device.</p>
63-
<ol>
64-
<li>
65-
Download and run <a href="https://zadig.akeo.ie/" target="_blank">Zadig</a>.
66-
</li>
67-
<li>
68-
Under <code>Device</code> in the menu bar, select <code>Create New Device</code>.
69-
<img
70-
src={zadigCreateNewDevice}
71-
alt="Zadig Create New Device"
72-
width={575}
73-
height={254}
74-
/>
75-
</li>
76-
<li>
77-
Fill in three fields. The first field is just a description and you can fill in anything. The next two
78-
fields are very important. Fill them in with <code>{VENDOR_ID}</code> and <code>{PRODUCT_ID}</code>
79-
respectively. Press &quot;Install Driver&quot; and give it a few minutes to install.
80-
<img
81-
src={zadigForm}
82-
alt="Zadig Form"
83-
width={575}
84-
height={254}
85-
/>
86-
</li>
87-
</ol>
88-
<p>No additional software is required for macOS, Linux or Android.</p>
89-
</>)}
90-
</section>
91-
<hr />
92-
93-
<section>
94-
<h2>Flashing</h2>
95-
<p>Follow these steps to put your device into QDL mode:</p>
96-
<ol>
97-
<li>Unplug the device and wait for the LED to switch off.</li>
98-
<li>First, connect the device to your computer using the <strong>lower</strong> <span className="whitespace-nowrap">USB-C</span> port <strong>(port 1)</strong>.</li>
99-
<li>Second, connect power to the <strong>upper</strong> <span className="whitespace-nowrap">OBD-C</span> port <strong>(port 2)</strong>.</li>
100-
</ol>
101-
<img
102-
src={qdlPortsFour}
103-
alt="image showing comma four and two ports. the right port is labeled 1. the left port is labeled 2."
104-
width={225}
105-
height={150}
106-
/>
107-
<img
108-
src={qdlPortsThree}
109-
alt="image showing comma three and two ports. the lower port is labeled 1. the upper port is labeled 2."
110-
width={450}
111-
height={300}
112-
/>
113-
<p>Your device&apos;s screen will remain blank for the entire flashing process. This is normal.</p>
114-
{isLinux && (<>
115-
<strong>Note for Linux users</strong>
116-
<p>
117-
On Linux systems, devices in QDL mode are automatically bound to the kernel&apos;s qcserial driver, and
118-
need to be unbound before we can access the device. Copy the script below into your terminal and run it
119-
after plugging in your device.
120-
</p>
121-
<CopyText>{DETACH_SCRIPT}</CopyText>
122-
</>)}
123-
<p>
124-
Next, click the button to start flashing. From the prompt select the device which starts with
125-
&ldquo;QUSB_BULK&rdquo;.
126-
</p>
127-
<p>
128-
The process can take 30+ minutes depending on your internet connection and system performance. Do not
129-
unplug the device until all steps are complete.
130-
</p>
131-
</section>
132-
<hr />
133-
134-
<section>
135-
<h2>Troubleshooting</h2>
136-
<h3>Lost connection</h3>
137-
<p>
138-
Try using high quality USB 3 cables. You should also try different USB ports on the front or back of your
139-
computer. If you&apos;re using a USB hub, try connecting directly to your computer instead.
140-
</p>
141-
<h3>My device&apos;s screen is blank</h3>
142-
<p>
143-
This is normal in QDL mode. You can verify that the &ldquo;QUSB_BULK&rdquo; device shows up when you press
144-
the Flash button to know that it is working correctly.
145-
</p>
146-
<h3>My device says &ldquo;fastboot mode&rdquo;</h3>
147-
<p>
148-
You may have followed outdated instructions for flashing. Please read the instructions above for putting
149-
your device into QDL mode.
150-
</p>
151-
<h3>General Tips</h3>
152-
<ul>
153-
<li>Try another computer or OS</li>
154-
<li>Try different USB ports on your computer</li>
155-
<li>Try different USB-C cables; low quality cables are often the source of problems. Note that the included OBD-C cable will not work.</li>
156-
</ul>
157-
<h3>Other questions</h3>
158-
<p>
159-
If you need help, join our <a href="https://discord.comma.ai" target="_blank">Discord server</a> and go to
160-
the <strong>#hw-three-3x</strong> channel.
161-
</p>
162-
</section>
163-
164-
<div className="hidden lg:block">
165-
<hr />
166-
flash.comma.ai version: <a href={`https://github.com/commaai/flash/tree/${version}`} target="_blank"><code>{version}</code></a>
167-
</div>
168-
</main>
169-
170-
<div className="lg:flex-1 h-[700px] lg:h-screen bg-gray-100 dark:bg-gray-800">
171-
<Suspense fallback={<p className="text-black dark:text-white">Loading...</p>}>
172-
<Flash />
173-
</Suspense>
31+
<div className="h-screen w-screen bg-gray-100">
32+
<Flash />
33+
<div className="absolute top-4 right-4 flex items-center gap-6">
34+
<a href="https://comma.ai" target="_blank" rel="noopener noreferrer" title="comma.ai" className="text-gray-400 hover:text-[#51ff00] transition-colors">
35+
<CommaIcon className="w-12 h-12" />
36+
</a>
37+
<a href="https://discord.comma.ai" target="_blank" rel="noopener noreferrer" title="Discord" className="text-gray-400 hover:text-[#51ff00] transition-colors">
38+
<DiscordIcon className="w-12 h-12" />
39+
</a>
40+
<a href="https://github.com/commaai/flash" target="_blank" rel="noopener noreferrer" title="GitHub" className="text-gray-400 hover:text-[#51ff00] transition-colors">
41+
<GitHubIcon className="w-12 h-12" />
42+
</a>
17443
</div>
175-
176-
<div className="w-screen max-w-none p-12 md:p-16 prose dark:prose-invert bg-white dark:bg-gray-900 lg:hidden">
177-
flash.comma.ai version: <a href={`https://github.com/commaai/flash/tree/${version}`} target="_blank"><code>{version}</code></a>
44+
<div className="absolute bottom-4 left-4 text-sm text-gray-500">
45+
<a href={`https://github.com/commaai/flash/tree/${version}`} target="_blank" className="hover:underline">
46+
{version}
47+
</a>
17848
</div>
17949
</div>
18050
)

src/assets/comma3X.webp

52.4 KB
Loading

src/assets/four_screen_on.webp

90.9 KB
Loading

src/assets/qdl-ports-four.svg

Lines changed: 1 addition & 1 deletion
Loading

src/assets/qdl-ports-three.svg

Lines changed: 1 addition & 1 deletion
Loading

src/config.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ const config = {
33
release_mici: 'https://raw.githubusercontent.com/commaai/openpilot/ccf7361798a2b7ff36f5065dffb602eb40c22302/system/hardware/tici/all-partitions.json',
44
release_tizi: 'https://raw.githubusercontent.com/commaai/openpilot/927548621be1be0c2c9063868b93d1f5020904de/system/hardware/tici/all-partitions.json',
55
release_tici: 'https://raw.githubusercontent.com/commaai/openpilot/927548621be1be0c2c9063868b93d1f5020904de/system/hardware/tici/all-partitions.json',
6-
master: 'https://raw.githubusercontent.com/commaai/openpilot/master/system/hardware/tici/all-partitions.json',
76
},
87
loader: {
98
url: 'https://raw.githubusercontent.com/commaai/flash/master/src/QDL/programmer.bin',

0 commit comments

Comments
 (0)