Skip to content

Commit 047b6de

Browse files
committed
[green] Correct pre-activation public claims
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 9218cd7 commit 047b6de

8 files changed

Lines changed: 173 additions & 57 deletions

File tree

.github/ISSUE_TEMPLATE/bug.yml

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,61 @@ body:
3131
validations:
3232
required: true
3333
- type: input
34-
id: hardware
34+
id: profile
3535
attributes:
36-
label: Hardware and platform
37-
description: Exact board/profile and iPadOS, Android, browser, or desktop version
36+
label: Exact installer profile ID
37+
description: For installer problems, use the exact profile ID shown on /flash; otherwise enter "Not installer-related."
38+
validations:
39+
required: true
40+
- type: input
41+
id: module
42+
attributes:
43+
label: Exact board model and module marking
44+
description: Copy the board model and the text printed on the module; enter "Not applicable" only when no board is involved.
45+
validations:
46+
required: true
47+
- type: input
48+
id: memory
49+
attributes:
50+
label: Memory configuration
51+
description: Flash capacity, PSRAM capacity, and PSRAM type (Octal, Quad, none, or unknown).
52+
validations:
53+
required: true
54+
- type: input
55+
id: browser
56+
attributes:
57+
label: Browser
58+
description: Browser name and exact version; enter "Not applicable" when the browser is not involved.
59+
validations:
60+
required: true
61+
- type: input
62+
id: operating_system
63+
attributes:
64+
label: Desktop operating system
65+
description: Desktop operating system and exact version; enter "Not applicable" when the installer is not involved.
66+
validations:
67+
required: true
68+
- type: input
69+
id: installer_stage
70+
attributes:
71+
label: Failed installer stage
72+
description: For example page load, browser check, profile selection, artifact verification, port selection, erase, write, verification, first boot, or recovery; otherwise enter "Not installer-related."
73+
validations:
74+
required: true
75+
- type: input
76+
id: tablet
77+
attributes:
78+
label: Exact tablet or device model
79+
description: Name the iPad or Android device used with the app; enter "Not applicable" only when the app is not involved.
80+
validations:
81+
required: true
82+
- type: input
83+
id: tablet_os
84+
attributes:
85+
label: Tablet operating system
86+
description: Tablet operating system and exact version (iPadOS or Android); enter "Not applicable" only when the app is not involved.
87+
validations:
88+
required: true
3889
- type: textarea
3990
id: steps
4091
attributes:

README.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ compatible microcontroller board over Bluetooth Low Energy. Its normal
1313
workflow needs no USB serial connection, Wi-Fi onboarding, cloud account, or
1414
telemetry.
1515

16-
- Website and browser installer: [pyble.dev](https://pyble.dev)
16+
- Website and browser-installer status: [pyble.dev](https://pyble.dev)
1717
- iPad external beta:
1818
[join with TestFlight](https://testflight.apple.com/join/yU4e8s6d)
1919
- License: [MIT](LICENSE)
@@ -27,7 +27,7 @@ telemetry.
2727
</p>
2828
2929
<p align="center">
30-
<em>Actual PyBLE app: a GPIO 48 NeoPixel Blocks program and its generated MicroPython on the pictured ESP32-S3 board.</em>
30+
<em>Actual PyBLE app in landscape: GPIO 48 NeoPixel Blocks beside the generated MicroPython.</em>
3131
</p>
3232

3333
## What works
@@ -62,16 +62,17 @@ BLE GATT peripheral. It supports:
6262
- board naming and identify support; and
6363
- upstream MicroPython’s standard `neopixel` module.
6464

65-
The public browser installer currently offers qualified images for:
65+
The public browser installer is currently unavailable pending v0.4.2 HIL on
66+
both exact current profiles:
6667

67-
| Installer profile | Typical target | Availability |
68-
| ----------------- | ---------------------------------- | ------------------------------------------- |
69-
| `esp32-4mb` | Classic ESP32, 4 MB flash | Available |
70-
| `esp32-s3-n16r8` | ESP32-S3, 16 MB flash / 8 MB PSRAM | Available |
71-
| `esp32-c3-4mb` | ESP32-C3, 4 MB flash | Source target; public installer pending HIL |
68+
| Installer profile | Exact target constraint | Public status |
69+
| ----------------- | ------------------------------------------------------------ | --------------------------------------------------- |
70+
| `esp32-4mb` | Classic ESP32, 4 MiB external SPI flash; no PSRAM assumed | v0.4.2 HIL pending; installer unavailable |
71+
| `esp32-s3-n16r8` | ESP32-S3, 16 MiB flash / 8 MiB Octal PSRAM; N16R8-class only | v0.4.2 HIL pending; installer unavailable |
72+
| `esp32-c3-4mb` | ESP32-C3, 4 MiB external SPI flash; no PSRAM assumed | Planned; no public image; exact-profile HIL pending |
7273

73-
These are the initial validated ports, not a chip-family allowlist. A future
74-
board is compatible when it has a maintained PyBLE agent port, BLE GATT
74+
These are the initial port targets, not a chip-family allowlist. A future board
75+
is compatible when it has a maintained PyBLE agent port, BLE GATT
7576
peripheral support, adequate resources, PBLE/1 conformance, recovery testing,
7677
and hardware-validation evidence. Stock MicroPython plus generic Bluetooth
7778
hardware is not sufficient by itself.
@@ -102,14 +103,17 @@ shared conformance corpus, documentation, and CI atomically.
102103

103104
## Try PyBLE
104105

105-
1. Open [pyble.dev/flash](https://pyble.dev/flash) in desktop Chrome or Edge.
106-
2. Select the exact supported profile for your board and flash the qualified
107-
agent firmware. Flashing erases the board; review the installer warning and
108-
back up files first.
109-
3. Install the iPad beta from
106+
1. Install the iPad beta from
110107
[TestFlight](https://testflight.apple.com/join/yU4e8s6d), or build the
111108
Flutter app locally.
112-
4. Open PyBLE, scan for the board, connect, and run an example.
109+
2. Check [pyble.dev/flash](https://pyble.dev/flash) in desktop Chrome or Edge.
110+
The public installer is currently unavailable pending v0.4.2 HIL. Wait for
111+
that page to show an active release version, your exact profile, and an
112+
enabled install action.
113+
3. Only after that gate opens, back up the board, confirm its exact memory
114+
profile, and use the one-time wired installer. Flashing erases the board.
115+
4. Open PyBLE, scan for the provisioned board, connect, and run an example over
116+
BLE.
113117

114118
See [support and troubleshooting](https://pyble.dev/support) for browser,
115119
Bluetooth, and recovery requirements.
-1.93 KB
Loading

tools/web/public/social/pyble-beta-og-1200x630.svg

Lines changed: 7 additions & 6 deletions
Loading

tools/web/src/app/globals.css

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,7 @@ h3 {
999999
.target-grid > div {
10001000
display: flex;
10011001
min-width: 0;
1002-
min-height: 190px;
1002+
min-height: 275px;
10031003
padding: 25px 17px;
10041004
align-items: center;
10051005
justify-content: flex-end;
@@ -1062,19 +1062,39 @@ h3 {
10621062

10631063
.target-grid strong {
10641064
color: var(--white);
1065-
font-size: 0.95rem;
1065+
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
1066+
font-size: 0.78rem;
10661067
}
10671068

10681069
.target-grid small {
10691070
color: #899db6;
10701071
font-size: 0.68rem;
10711072
}
10721073

1074+
.target-grid__target-name {
1075+
margin-top: 6px;
1076+
color: #dceaff;
1077+
font-size: 0.78rem;
1078+
font-weight: 700;
1079+
}
1080+
1081+
.target-grid__constraint {
1082+
margin-top: 10px;
1083+
line-height: 1.45;
1084+
}
1085+
1086+
.target-grid .target-grid__status {
1087+
margin-top: 9px;
1088+
color: var(--warning);
1089+
font-weight: 700;
1090+
line-height: 1.4;
1091+
}
1092+
10731093
.target-grid > .target-grid__target--planned {
10741094
border-style: dashed;
10751095
}
10761096

1077-
.target-grid__target--planned small {
1097+
.target-grid__target--planned .target-grid__status {
10781098
color: var(--warning);
10791099
}
10801100

tools/web/src/app/page.tsx

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const steps = [
5757
{
5858
number: "01",
5959
title: "Provision once",
60-
body: "Install matching PyBLE-enabled MicroPython firmware once. Initial beta images are available for compatible ESP32 targets.",
60+
body: "After v0.4.2 passes HIL, use USB once to install the exact matching PyBLE-enabled MicroPython profile. The public installer is unavailable during qualification.",
6161
},
6262
{
6363
number: "02",
@@ -87,10 +87,11 @@ export default function HomePage() {
8787
<h1>Code your MicroPython board. Leave the cable behind.</h1>
8888
<p className="hero__lede">
8989
PyBLE is a free, tablet-first IDE designed for boards that run
90-
MicroPython and support Bluetooth Low Energy. The current firmware
91-
release supports qualified classic ESP32 and ESP32-S3 module
92-
profiles. ESP32-C3 and more microcontroller families remain
93-
planned.
90+
MicroPython and support Bluetooth Low Energy. Public v0.4.2
91+
firmware is pending HIL for the exact esp32-4mb and esp32-s3-n16r8
92+
profiles. The public browser installer stays unavailable until
93+
both exact profiles pass HIL. ESP32-C3 and more microcontroller
94+
families remain planned.
9495
</p>
9596
<div className="button-row">
9697
<Link className="button button--primary" href="#testflight">
@@ -248,20 +249,26 @@ export default function HomePage() {
248249
{initialFirmwareTargets.map((target) => (
249250
<div
250251
className={
251-
target.availability === "Planned profile"
252+
target.planned
252253
? "target-grid__target target-grid__target--planned"
253254
: "target-grid__target"
254255
}
255-
key={target.name}
256+
key={target.id}
256257
>
257258
<span className="target-grid__chip" aria-hidden="true">
258259
<i />
259260
<i />
260261
<i />
261262
<i />
262263
</span>
263-
<strong>{target.name}</strong>
264-
<small>{target.availability}</small>
264+
<strong>{target.id}</strong>
265+
<span className="target-grid__target-name">
266+
{target.target}
267+
</span>
268+
<small className="target-grid__constraint">
269+
{target.constraint}
270+
</small>
271+
<small className="target-grid__status">{target.status}</small>
265272
</div>
266273
))}
267274
</div>
@@ -339,9 +346,10 @@ export default function HomePage() {
339346
<p className="eyebrow">External testing is open</p>
340347
<h2 id="testflight-title">Join the PyBLE beta on TestFlight.</h2>
341348
<p className="beta-invite__lede">
342-
Install the free iPad beta through Apple TestFlight. Then use
343-
desktop Chrome to provision a supported board and start coding
344-
over Bluetooth Low Energy.
349+
Install the free iPad beta through Apple TestFlight now. Public
350+
board provisioning will open only after v0.4.2 passes HIL on both
351+
exact release profiles; after that one-time USB setup, everyday
352+
coding runs over Bluetooth Low Energy.
345353
</p>
346354
<div className="button-row beta-invite__actions">
347355
<a
@@ -354,7 +362,7 @@ export default function HomePage() {
354362
<ArrowIcon />
355363
</a>
356364
<Link className="button button--secondary" href="/flash">
357-
Install board firmware
365+
Check firmware status
358366
</Link>
359367
</div>
360368
</div>

tools/web/src/app/support/page.tsx

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
// Part of PyBLE (https://pyble.dev) — see /LICENSE.
33

4-
import { MailIcon } from "@/components/icons";
4+
import { ExternalIcon, MailIcon } from "@/components/icons";
55
import { PageIntro } from "@/components/page-intro";
66
import { pageMetadata, siteConfig } from "@/lib/site";
77

@@ -13,11 +13,15 @@ export const metadata = pageMetadata({
1313
});
1414

1515
const diagnosticItems = [
16-
"Board and chip family",
16+
"Exact installer profile ID (or “not installer-related”)",
17+
"Exact board model and module marking",
18+
"Flash capacity, PSRAM capacity, and PSRAM type",
19+
"Browser name/version and desktop OS name/version",
20+
"Failed installer stage and redacted error text",
21+
"Exact tablet or device model",
22+
"Tablet OS: iPadOS or Android name/version",
1723
"PyBLE app and agent versions",
18-
"iPadOS or Android version",
1924
"The exact steps that caused the problem",
20-
"Relevant console text and a screenshot",
2125
] as const;
2226

2327
export default function SupportPage() {
@@ -38,12 +42,12 @@ export default function SupportPage() {
3842
<li>
3943
<span>1</span>
4044
<div>
41-
<h3>Install the matching firmware once</h3>
45+
<h3>Check firmware status before installing</h3>
4246
<p>
43-
The public installer supports only esp32-4mb and
44-
esp32-s3-n16r8. ESP32-C3 is not currently available. Use the
45-
reviewed image supplied for your exact target; this initial
46-
step uses a cable.
47+
The public installer is unavailable while v0.4.2 HIL runs
48+
for esp32-4mb and esp32-s3-n16r8. ESP32-C3 is not currently
49+
available. Wait for the installer status to show an active
50+
release and enabled action; this initial step uses a cable.
4751
</p>
4852
</div>
4953
</li>
@@ -139,21 +143,29 @@ export default function SupportPage() {
139143
<aside className="report-card">
140144
<MailIcon />
141145
<p className="eyebrow">Send a useful report</p>
142-
<h2>Include these five things</h2>
146+
<h2>Include these exact details</h2>
143147
<ul>
144148
{diagnosticItems.map((item) => (
145149
<li key={item}>{item}</li>
146150
))}
147151
</ul>
148152
<a
149153
className="button button--primary"
150-
href={`mailto:${siteConfig.supportEmail}`}
154+
href={siteConfig.bugReportUrl}
155+
target="_blank"
156+
rel="noopener noreferrer"
151157
>
152-
{siteConfig.supportEmail}
158+
Open the GitHub bug template
159+
<ExternalIcon />
153160
</a>
154161
<p className="fine-print">
155162
Please remove Wi-Fi passwords, access tokens, and other private data
156-
from screenshots or code before sending.
163+
and personal identifiers from screenshots or code before sending.
164+
For a private, non-security support question, email{" "}
165+
<a href={`mailto:${siteConfig.supportEmail}`}>
166+
{siteConfig.supportEmail}
167+
</a>
168+
.
157169
</p>
158170
</aside>
159171
</div>

0 commit comments

Comments
 (0)