btclock-web-flasher/index.html
2024-07-09 12:26:01 +02:00

281 lines
9.3 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>BTClock Web Tools</title>
<meta name="description" content="Easily allow users to flash new firmware for the BTClock." />
<meta name="viewport" content="width=device-width" />
<meta name="color-scheme" content="dark light" />
<style>
/* antonio-latin-400-normal */
@font-face {
font-family: 'Antonio';
font-style: normal;
font-display: swap;
font-weight: 600;
src:
url(fonts/antonio/webfonts/antonio-latin-600-normal.woff2) format('woff2'),
url(fonts/antonio/webfonts/antonio-latin-600-normal.woff2) format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-display: auto;
font-weight: 400;
src: url(fonts/ubuntu/webfonts/ubuntu-latin-400-normal.woff2) format('woff2'),
url(fonts/ubuntu/webfonts/ubuntu-latin-400-normal.woff2) format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-display: auto;
font-weight: 700;
src: url(fonts/ubuntu/webfonts/ubuntu-latin-700-normal.woff2) format('woff2'),
url(fonts/ubuntu/webfonts/ubuntu-latin-700-normal.woff2) format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
body {
font-family: 'Ubuntu', sans-serif;
padding: 0;
margin: 0;
line-height: 1.4;
}
.content {
max-width: 600px;
margin: 0 auto;
padding: 12px;
}
h1 {
font-family: 'Antonio';
}
h2 {
margin-top: 2em;
}
h3 {
margin-top: 1.5em;
}
.projects a {
color: initial;
text-decoration: none;
}
.project .logo img {
height: 50px;
}
.project .name {
margin-top: 8px;
}
a {
color: #03a9f4;
}
.screenshot img {
max-width: 100%;
box-shadow: rgb(0 0 0 / 20%) 0px 2px 1px -1px,
rgb(0 0 0 / 14%) 0px 1px 1px 0px, rgb(0 0 0 / 12%) 0px 1px 3px 0px;
border-radius: 4px;
}
.screenshot i {
margin-top: 4px;
display: block;
}
.hidden {
display: none;
}
.footer {
margin-top: 24px;
border-top: 1px solid #ccc;
padding-top: 24px;
text-align: center;
}
.footer .initiative {
font-style: italic;
margin-top: 16px;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #333;
color: #fff;
}
a {
color: #58a6ff;
}
}
</style>
<script module>
import(
"https://unpkg.com/esp-web-tools/dist/web/install-button.js?module"
);
</script>
</head>
<body>
<div class="content">
<h1>BTClock Web Installer</h1>
<!-- V3 start -->
<h2>Version 3</h2>
<h3>2.13 inch displays (rev. A)</h3>
<p><small>In most cases you have this version. All versions before block #841273 (2024-04-28) are rev. A.</small></p>
<esp-web-install-button manifest="manifest_btclock_v3_213.json">
<i slot="unsupported">
The flasher is not available because your browser does not support Web
Serial. Open this page in Google Chrome or Microsoft Edge instead<span class="not-supported-i hidden">
(but not on your iOS device)</span>.
</i>
<slot name="activate">Install using multiple parts</slot>
</esp-web-install-button>
<h3>2.13 inch displays (rev. B)</h3>
<p><small>First released on block #841273 (2024-04-28). If on the back it shows rev. B below the block hash, and you have a BOOT button next to the RESET button you have rev. B.</small></p>
<esp-web-install-button manifest="manifest_btclock_v3_213_revb.json">
<i slot="unsupported">
The flasher is not available because your browser does not support Web
Serial. Open this page in Google Chrome or Microsoft Edge instead<span class="not-supported-i hidden">
(but not on your iOS device)</span>.
</i>
<button slot="activate">I'm 100% sure I have the rev. B version, install it</button>
<slot name="activate">Install using multiple parts</slot>
</esp-web-install-button>
<h4>2.9 inch displays (custom, experimental)</h4>
<p><small>Offered as a courtesy, if you have the kit or bought it pre-built, you need the 2.13 inch version.</small></p>
<esp-web-install-button manifest="manifest_btclock_v3_29.json">
<i slot="unsupported">
The flasher is not available because your browser does not support Web
Serial. Open this page in Google Chrome or Microsoft Edge instead<span class="not-supported-i hidden">
(but not on your iOS device)</span>.
</i>
<slot name="activate">Install using multiple parts</slot>
<button slot="activate">I know what I'm doing. Install 2.9 inch version</button>
</esp-web-install-button>
<ul>
<li><a href="https://github.com/btclock/btclock_v3/actions/workflows/tagging.yml">GitHub action compiling the
V3
firmware</a></li>
<li><a href="https://github.com/btclock/btclock_v3/releases">Release to be flashed</a><br>
<code id="commitHashV3"></code> / <code id="buildDateV3"></code>
</li>
<li><a href="https://github.com/btclock/btclock_v3">V3 Source</a></li>
</ul>
<!-- V3 end -->
<hr>
<!-- V2 start -->
<h2>Version 2</h2>
<esp-web-install-button manifest="manifest_btclock.json">
<i slot="unsupported">
The flasher is not available because your browser does not support Web
Serial. Open this page in Google Chrome or Microsoft Edge instead<span class="not-supported-i hidden">
(but not on your iOS device)</span>.
</i>
</esp-web-install-button>
<!-- V2 end -->
<h3>Verify, don't trust</h2>
<ul>
<li><a href="https://github.com/btclock/btclock_v2/actions/workflows/workflow.yml">GitHub action compiling the
V2
firmware</a></li>
<li><a href="https://github.com/btclock/btclock_v2/releases">Release to be flashed</a><br>
<code id="commitHash"></code> / <code id="buildDate"></code>
</li>
<li><a href="https://github.com/btclock/web-flasher">Source code of this website</a></li>
</ul>
<hr>
<p>When you are building it yourself, the first time you have to put the S3 mini in to boot mode: Press both side buttons at the same time
(RST/BOOT),
then first release the RST button and then the boot button.</p>
<p>
If this website does not work, you can download <code>full-firmware.bin</code> from the releases page and use <a
href="https://web.esphome.io/">ESPHome Web Flasher</a> to flash it instead.
</p>
<h2>How it works</h2>
<p>
ESP Web Tools works by using
<a href="https://developer.mozilla.org/docs/Web/API/Web_Serial_API">Web Serial</a> and a manifest which
describes
the firmware. ESP Web Tools detects the
chipset of the connected ESP device and automatically selects the right
firmware variant from the manifest.
</p>
<p>
Web Serial is available in Google Chrome and Microsoft Edge
browsers<span class="not-supported-i hidden">
(but not on your iOS device)</span>. Android support should be possible but has not been implemented yet.
</p>
<div class="footer">
<div class="initiative">
ESP Web Tools is a project by
<a href="https://esphome.io">ESPHome</a>.<br />
Development is funded by
<a href="https://www.nabucasa.com">Nabu Casa</a>.
</div>
<div>
ESP Web Tools is
<a href="https://github.com/esphome/esp-web-tools">open source</a>.
</div>
</div>
</div>
<script>
if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
document.querySelector(".not-supported-i").classList.remove("hidden");
}
fetch("firmware/commit.txt")
.then(response => response.text())
.then((response) => {
document.getElementById('commitHash').innerHTML = response;
})
.catch(err => console.log(err))
fetch("firmware/date.txt")
.then(response => response.text())
.then((response) => {
document.getElementById('buildDate').innerHTML = new Date(response.trim()).toLocaleString();
})
.catch(err => console.log(err))
fetch("firmware_v3/commit.txt")
.then(response => response.text())
.then((response) => {
document.getElementById('commitHashV3').innerHTML = response;
})
.catch(err => console.log(err))
fetch("firmware_v3/date.txt")
.then(response => response.text())
.then((response) => {
document.getElementById('buildDateV3').innerHTML = new Date(response.trim()).toLocaleString();
})
.catch(err => console.log(err))
</script>
</body>
</html>