Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions apps/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -109,15 +109,15 @@ <h1>Control a WalkingPad from your browser</h1>
</p>
<p>
Open it in Chrome or Edge and press Connect. Your browser talks to the treadmill over
Bluetooth, the same way it would to a pair of headphones — set the speed, watch your
distance, steps and calories as you walk, and keep a record of every session. Nothing
is sent anywhere: your walks are saved on your own device and never uploaded.
Bluetooth, just as it would to a pair of headphones. Set the speed, watch your
distance, steps and calories as you walk, and keep a record of every session. Your
walks are saved on your own device and never uploaded.
</p>

<h2>Which treadmills work</h2>
<p>
Most of them. Belt Control doesn't go by model name — it asks your treadmill what it
can do when you connect, and adapts to the answer:
Most of them. Belt Control doesn't go by model name. When you connect, it asks your
treadmill what it can do and works from there:
</p>
<ul>
<li><b>Older pads</b> — A1, A1 Pro, C1, C2, P1, R1/R2, K12, T1 and similar.</li>
Expand All @@ -138,15 +138,15 @@ <h2>More</h2>
</ul>

<hr>
<p><small><strong>Safety.</strong> Belt Control commands a motorised treadmill. Only
start it when you can see the belt, and stop it with the treadmill's own controls or
safety key rather than relying on this app — a Bluetooth link can drop while the belt
keeps running. It is not a safety device and is provided without warranty; you use it
at your own risk.</small></p>
<p><small><strong>Safety.</strong> Belt Control runs a motorised treadmill. Only start
it when you can see the belt, and don't count on this app to stop it — use the
treadmill's own controls or safety key, because a Bluetooth connection can drop while
the belt keeps running. It isn't a safety device and comes with no warranty; you use
it at your own risk.</small></p>
<p><small>Belt Control is an independent project. It is not affiliated with, endorsed
by, or sponsored by Beijing KingSmith Technology Co., Ltd. WalkingPad&reg; and
KingSmith&reg; are trademarks of that company, used here only to say which treadmills
this app can talk to.</small></p>
KingSmith&reg; are trademarks of that company, mentioned here only to say which
treadmills this app works with.</small></p>
</div>
<div id="app"></div>
<noscript>
Expand Down
45 changes: 22 additions & 23 deletions apps/web/public/compatible-treadmills/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ <h1>Will it work with my treadmill?</h1>

<p>
That matters more than it sounds. WalkingPads sold under the same model name have shipped
with different parts inside in different years, and the <strong>X21</strong> turns up in
KingSmith's own catalogue in two different versions. A list organised by model name would
be wrong for somebody. Asking the treadmill directly is right for everybody.
with different parts inside in different years, and the <strong>X21</strong> appears in
KingSmith's own catalogue in two versions. A list organised by model name would be wrong
for someone. Asking the treadmill directly works for everyone.
</p>
<p>
So the useful question isn't what your pad is called. It's which of four Bluetooth
Expand Down Expand Up @@ -97,27 +97,25 @@ <h2>The four families</h2>
</div>

<p>
A dash means the treadmill simply doesn't report that number. The app shows a dash rather
than a figure it invented.
A dash means the treadmill doesn't report that number, so the app shows a dash instead of
making one up.
</p>
<p>
On the last row, Belt Control can find and identify your pad but can't drive it yet. If
that's what you get, there's something useful you can do about it — see the bottom of
this page.
For pads in the last row, Belt Control can find and identify them but can't control them
yet. If that's yours, you can help change that — see the bottom of this page.
</p>

<h3>Why some pads have a Pause button and others don't</h3>
<p>
Pausing isn't the same as stopping. A pause keeps your walk running in the background, so
when you start again the treadmill picks up where you left off instead of beginning a new
session at zero.
Pausing isn't the same as stopping. When you pause, the treadmill holds on to your walk,
so when you start again it picks up where you left off instead of starting a new session
from zero.
</p>
<p>
Not every treadmill can do it, and there's no way to ask one in advance — so Belt Control
Not every treadmill can do it, and there's no way to ask one in advance, so Belt Control
tries it and watches what happens. If your pad turns the request down, the app stops the
belt properly, tells you so, and hides the Pause button for the rest of the session. A
belt still moving under a button that says <em>Paused</em> is the one thing most worth
preventing.
belt properly, tells you so, and hides the Pause button for the rest of the session. The
one thing it must never do is say <em>Paused</em> while the belt is still moving.
</p>
<p>
Older pads in the Classic family have no pause at all — not in Belt Control, and not in
Expand All @@ -131,15 +129,15 @@ <h3>Why some calories say "rough estimate"</h3>
knowing nothing about your weight or your pace.
</p>
<p>
Belt Control still shows that figure, but marks it and leaves it out of your weekly and
monthly totals. Quietly adding up a number we don't trust would make every total wrong,
which is worse than leaving a gap.
Belt Control still shows that figure, but marks it and leaves it out of your totals.
Quietly adding up a number we don't trust would make every total wrong, and that's worse
than leaving a gap.
</p>

<h2>Your browser matters more than your treadmill</h2>
<p>
This is what actually stops people. Belt Control connects to your treadmill over
Bluetooth straight from the web page — and not every browser is able to do that.
This is what usually trips people up. Belt Control connects to your treadmill over
Bluetooth straight from the web page, and not every browser can do that.
</p>

<div class="scroller">
Expand Down Expand Up @@ -171,13 +169,14 @@ <h2>Your browser matters more than your treadmill</h2>

<h2>If your pad isn't listed</h2>
<p>
Try it anyway. The lists above are the models we've seen, not the only ones that work —
the app asks your treadmill directly, so an unlisted pad in a known family simply works.
Try it anyway. The lists above are the models we've seen, not the only ones that work.
The app asks your treadmill directly, so an unlisted pad from a known family should just
work.
</p>
<p>
If it doesn't connect, the app keeps a record of what it tried and what your treadmill
said back, and <strong>Send feedback</strong> attaches that record to an email. That
record is the useful part: it's how a pad nobody has seen before gets supported.
record is what makes it possible to add support for a pad nobody has seen before.
</p>

</main>
Expand Down
36 changes: 18 additions & 18 deletions apps/web/public/troubleshooting/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ <h1>When the treadmill won't connect</h1>

<h2>Nothing shows up in the device list</h2>
<p>
That list is drawn by your browser, not by this page, and it only shows what's switched
on and nearby right now. An empty list usually means one of these:
That list comes from your browser, not from this page, and it only shows devices that are
switched on and nearby right now. An empty list usually means one of these:
</p>
<ul>
<li><strong>The treadmill has gone to sleep.</strong> Most pads stop announcing
Expand All @@ -61,7 +61,7 @@ <h3>On a Mac, an empty list often means a permission</h3>

<h2>There's no Connect button, or pressing it does nothing</h2>
<p>
Then your browser can't connect to Bluetooth devices. <strong>Firefox and Safari
That means your browser can't connect to Bluetooth devices. <strong>Firefox and Safari
can't</strong> — and on an iPhone or iPad, every browser is Safari underneath, so
installing Chrome there doesn't help. Chrome, Edge, Opera and Samsung Internet can, on a
computer or on Android.
Expand All @@ -78,9 +78,9 @@ <h2>There's no Connect button, or pressing it does nothing</h2>

<h2>It connects, then drops out after a couple of seconds</h2>
<p>
That's certain KingSmith pads — the KS-C2 and its relatives — behaving exactly as
designed. They hang up on anything that connects and then just listens, within about
three seconds. It isn't a fault, and it isn't a range problem.
That's some KingSmith pads — the KS-C2 and its relatives — doing exactly what they were
designed to do. If something connects and then just listens without saying hello, they
hang up within about three seconds. It isn't a fault, and it isn't a range problem.
</p>
<p>
Belt Control knows the greeting those pads expect, so it shouldn't happen here. If you're
Expand All @@ -89,16 +89,16 @@ <h2>It connects, then drops out after a couple of seconds</h2>

<h2>It connects, but the belt won't start</h2>
<p>
Common on the KS-C2, and the pad does tell us why. Four things to check, in order:
This is common on the KS-C2. Four things to check, in order:
</p>
<ul>
<li><strong>The child lock is on.</strong> The pad reports this, and when it does, the
app says so instead of giving you generic advice. Turn it off at the panel.</li>
<li><strong>The pad is asleep.</strong> KingSmith pads go into standby after about ten
minutes idle, and in standby the motor stops responding — to the app as much as to
anything else. Bluetooth stays up, so it connects fine and then refuses every start.
The app recognises the shape of this (the pad keeps control on its own panel and never
sends its settings) and says so. Wake it from its panel or remote, then press Start.
The app can spot this (the pad keeps control on its own panel and never sends its
settings) and will tell you. Wake it from its panel or remote, then press Start.
Disconnecting and reconnecting does not wake it.</li>
<li><strong>The treadmill's own panel still has control.</strong> After a stop, control
goes back to the pad itself, and in that state it accepts a start command and then
Expand All @@ -107,13 +107,13 @@ <h2>It connects, but the belt won't start</h2>
<li><strong>The pad just refuses, for no visible reason.</strong> On a real KS-C2 a start
is sometimes turned down twice and accepted on the third try, with nothing different
about the third. The app retries a refused start up to three times — only while it's
still saying "starting", and never once you've pressed stop or disconnected. A belt
that lurches into motion long after the app gave up, when you've already stepped off,
is exactly what a retry must never become.</li>
still saying "starting", and never once you've pressed stop or disconnected. That way
the belt can't lurch into motion long after the app gave up and you've stepped
off.</li>
</ul>
<p>
Also worth a glance at the treadmill's own display: an error code there is a hardware
complaint, and no app can talk it out of one.
It's also worth checking the treadmill's own display. An error code there means a
hardware problem, and no app can fix that.
</p>

<h2>The numbers look wrong</h2>
Expand All @@ -129,11 +129,11 @@ <h2>The numbers look wrong</h2>
a stalled connection.
</p>
<p>
Wherever a number is missing you'll see a dash. An app that invents a number to avoid an
empty space is worse than one that admits it doesn't know.
Wherever a number is missing, you'll see a dash. We'd rather admit we don't know than
invent a number to fill the gap.
</p>

<h2>It worked yesterday, and today my pad isn't offered</h2>
<h2>It worked yesterday. Why do I have to pick my pad again?</h2>
<p>
Your browser grants access to one device at a time, and only when you pick it from that
list yourself — it won't hand it over any other way. Belt Control remembers your last
Expand All @@ -148,7 +148,7 @@ <h2>It worked yesterday, and today my pad isn't offered</h2>
<div class="cta">
<p><strong>Still stuck?</strong> The app keeps a record of what it tried and what your
treadmill said back, and <strong>Send feedback</strong> attaches it to an email. That
record is the useful part — it's how a pad nobody has seen before gets supported.</p>
record is what makes it possible to add support for a pad nobody has seen before.</p>
<p><a class="btn" href="/">Open Belt Control</a></p>
</div>

Expand Down
16 changes: 8 additions & 8 deletions apps/web/public/walkingpad-bluetooth-protocol/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ <h2>The four families</h2>
products, matched against advertised name prefixes. Do not copy that approach — the
mapping is not what it looks like, and the <code>0x1234</code> family was initially
missed here precisely because of an assumption about it. Detect from the GATT table
instead. It is both more robust and shorter.
instead. It's sturdier, and it takes less code.
</div>

<h2>Classic WalkingPad — <code>fe00</code></h2>
Expand All @@ -91,10 +91,10 @@ <h2>Classic WalkingPad — <code>fe00</code></h2>
about 400 ms after the mode byte before the start.
</p>
<p>
The leading <em>ask stats</em> is the part that looks like decoration and is not.
Standby parks the same app-control path that has to be woken before anything works, so a
start sent straight after a stop arrives at a pad that is not listening. Without it, only
the first start of a session lands.
The leading <em>ask stats</em> looks optional, but it isn't. Standby parks the same
app-control path that has to be woken before anything works, so a start sent straight
after a stop arrives at a pad that is not listening. Without it, only the first start of
a session lands.
</p>
<p>
Status notifications arrive on <code>fe01</code> with header <code>F8 A2</code>, 18 bytes,
Expand Down Expand Up @@ -288,10 +288,10 @@ <h3>Control, and why a start gets refused</h3>

<h3>Pause is stop, and the pad is what makes it a pause</h3>
<p>
This was open for a long time. The official app visibly carries a pause alongside start and
This stayed an open question for a long time. The official app visibly carries a pause alongside start and
stop, and warns that speed cannot be adjusted while paused, but it builds its command
templates at runtime and early captures only ever exercised <code>runState 1</code>.
<code>runState 2</code> was the obvious guess, and a guess is not something to aim at a
<code>runState 2</code> was the obvious guess, and a guess isn't something you send to a
treadmill.
</p>
<p>Two independent things settled it:</p>
Expand Down Expand Up @@ -361,7 +361,7 @@ <h2>The full reference</h2>
</p>
<p>
If you have a pad that lands on FitShow, or on nothing at all, the app's connection log is
the capture that would let it be decoded properly — and it is one button to send.
exactly the capture needed to decode it properly, and sending it takes one button.
</p>

</main>
Expand Down
Loading
Loading