From 057af773e4dea7b1e2217c35458425c6657e5412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 8 Oct 2026 00:26:43 +0200 Subject: [PATCH] Devlog: "Press w", the SD card in a phone's browser (#88) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- site/content/devlog/roro9stack-share/index.md | 184 ++++++++++++++++++ site/content/devlog/roro9stack-share/page.png | Bin 0 -> 36033 bytes .../content/devlog/roro9stack-share/share.png | Bin 0 -> 5719 bytes 3 files changed, 184 insertions(+) create mode 100644 site/content/devlog/roro9stack-share/index.md create mode 100644 site/content/devlog/roro9stack-share/page.png create mode 100644 site/content/devlog/roro9stack-share/share.png diff --git a/site/content/devlog/roro9stack-share/index.md b/site/content/devlog/roro9stack-share/index.md new file mode 100644 index 0000000..5279965 --- /dev/null +++ b/site/content/devlog/roro9stack-share/index.md @@ -0,0 +1,184 @@ ++++ +title = '''Press w''' +description = '''I asked whether roro9stack should get an FTP, SFTP or WebDAV server, to move files to and from my phone. The answer was none of them: a web page. Less than an hour later I pressed one key on the Cardputer, opened my phone's browser, and my SD card was in it. It works, and I'm still grinning.''' +date = 2026-10-08T00:30:00+02:00 + +[extra] +topics = '''ESP32-S3 · HTTP · Files''' +read_label = '''Read how the card got into my phone →''' +uid = '''share: on at http://172.16.42.25/''' +dek = "A short one, written straight after it worked, because I'm too pleased to wait. [roro9stack](/devlog/roro9stack/), my firmware for the M5Stack Cardputer, can now hand its SD card to any browser on the same Wi-Fi: no cable, no app, no computer. One key, one code, done." +byline = '''one question asked, the wrong three answers offered, a fourth taken''' + +[extra.sign] +label = "Apps installed on the phone to make this work" +note = "A browser was already there." +count = "0" + +[[extra.cast]] +name = "The question" +role = "\"FTP, SFTP or WebDAV?\"" +text = "Three ways to serve files, all of which want an app on the phone. I'd have picked one and been mildly unhappy with it for months." + +[[extra.cast]] +name = "The w key" +role = "in the Storage App" +text = "Starts a web server and shows where it is. Back stops it. That is the entire user interface on the device." + +[[extra.cast]] +name = "The code" +role = "six digits, new every time" +text = "On the device's screen and nowhere else. Type it in the page and you're in. Five wrong tries and the door stays shut for a minute." + +[[extra.cast]] +name = "The page" +role = "5.4 KB, one file" +text = "A list of what's on the card, an Upload button, a New folder button, and a Delete next to every row. Served from the firmware's own flash." + +[[extra.cast]] +name = "The storage task" +role = "the only one allowed to touch the card" +text = "Every byte in either direction goes through it, 8 KB at a time. It was there long before this and didn't need to learn anything new." ++++ + +## TL;DR + +- **Press `w` in the Storage App**, scan the QR code with a phone on the same Wi-Fi, and the SD card is a web page: list, download, upload, new folder, delete. +- **Nothing to install**, on the phone or anywhere else. That was the whole point. +- **It runs only while that screen is open.** A six-digit code, new each time, keeps the rest of the network out. +- **It is not encrypted,** and the screen says so. Fine at home; think first elsewhere. +- About **200 KB a second**, one request at a time, 57 KB of flash, 13 KB of memory while it's on. +- Also since [the last post](/devlog/roro9stack-shell/): the device shows **pictures** (v0.16.0), **Fn+p takes a screenshot** anywhere (v0.17.0), and this site has a **search**. + +## It works! + +I'll skip the build-up. I pressed `w`. This came up: + +{{ figure(src="share.png", alt="The Cardputer's screen at 2x: a large QR code on the left; on the right, In a browser, on this network: 172.16.42.25/, Code 825 132 in large blue digits, Nothing asked yet, Not encrypted, and backtick stops sharing.", width=480, height=270, caption="The whole feature, as the device sees it. The code in this picture stopped being valid the moment I pressed Back.") }} + +I picked up my phone, and there was my SD card, in the browser. **It works. That's fucking awesome.** + +Files, from my phone, to a computer the size of a biscuit and back. Over Wi-Fi. With nothing installed on either end that wasn't there this morning. + +Most of this devlog is about things that took a week of measuring and still bit me. This one I can explain to anybody in a sentence: it's a web page with your files on it. + +## The question I asked, and the one I should have + +Until tonight a file reached the card in one of two ways: the Debug Console's `put` command, which wants a PC, a Python script and a token, or pulling the card out. My phone can do neither. So I asked the obvious question: FTP, SFTP or WebDAV? + +The answer was a table, and the table was unkind to all three: + +{% table() %} +| | On the phone | On the device | +|---|---|---| +| FTP | needs an app; passwords in clear | easy | +| SFTP | needs an app | a whole SSH server: hundreds of KB, and a key exchange this chip would feel | +| WebDAV | needs an app, on iOS and Android both | fine, but see the first column | +| **A web page** | **any browser** | a small HTTP server | +{% end %} + +I had been choosing a protocol. What I wanted was to move a file with my thumb. Every phone made in the last fifteen years has exactly one file-transfer client that needs no setup, and it's the browser. + +## What's in it + +**On the device, almost nothing.** `w` starts the server and draws a screen. Back stops it. The server is the one that ships inside ESP-IDF, the framework the firmware is built on, so there was no library to choose. Seven requests: the page, the code, a listing, a download, an upload, a new folder, a delete. + +**The QR code carries the code.** Scan it and you're in without typing; type the address by hand and the page asks for the six digits. The code is made fresh from the hardware random generator each time `w` is pressed, and pressing Back throws every browser out. + +**An upload is just the request's body.** The browser sends the file as it is with a `PUT`, so there is no form to pick apart on a device with 100 KB of free memory. It lands on the card as `photo.jpg.part`, 8 KB at a time, and is renamed when the last byte has arrived. A transfer that dies halfway leaves nothing behind. If the name is taken, the page asks before replacing it, and the device refuses until it has. + +**The Storage App's rules still hold.** The page can't delete the folders the firmware keeps its own files in, and it says why: + +{{ figure(src="page.png", alt="The page in a browser at a phone's width: roro9stack: the SD card, a link SD card, buttons Upload files and New folder, then rows a-web, captures, gemini, gnss, irc, notes, screenshots, updates and wifi, each with a Delete button. Below, in orange: The firmware keeps its files in /notes.", width=390, height=630, caption="The page, at a phone's width, just after it was asked to delete `/notes`. It said no, in the device's own words.") }} + +**Nobody gets to walk out of the card.** `/a-web/../wifi` is refused before anything looks at the disk, by a function with a test that tries a dozen ways of asking. + +## What it isn't + +**Encrypted.** A TLS server costs this device about 40 KB of memory per connection, and it has around 100 KB on a good day. So the files and the code cross the Wi-Fi in clear. On my own network I don't mind. On a hotel's, I'd think about it. The device's screen says "Not encrypted." in plain words every time, because a limit you have to read the docs to find is a trap. + +**Fast.** 200 KB a second, give or take. A 2.6 MB photo takes eleven to seventeen seconds going up. I tried bigger pieces and smaller ones; the numbers moved around more between two runs of the same setting than between settings, so it's 8 KB and I stopped fiddling. + +**Able to do two things at once.** The server answers one request at a time. Start a big download and the page waits until it's done. I found that by asking for a listing in the middle of a download and watching it time out. It's written in the guide and left as it is. + +## What went wrong, for about four minutes each + +**A file that included itself.** The part that can be tested on a PC lived in `web_share.h`. So did the service, in another folder. The service's header said `#include "web_share.h"`, meaning the other one, and the compiler quite reasonably gave it itself. The testable half is now called `share_rules.h`. + +**The scanned address did nothing, sometimes.** If the page was already open and you then went to the same address with the code after the `#`, nothing happened: to a browser that isn't a new page, so the script never ran again. One line, `onhashchange`. Found by a browser test, not by me, which is the right way round. + +That's the list. Two. + +## What I checked, and what I didn't + +Checked, before I went anywhere near my phone: + +- Every request and every refusal, from a PC: wrong code, right code, a path with `..` in it, deleting a protected folder, deleting a folder that isn't empty, uploading over a file that exists. +- **2.6 MB up, then down again, compared byte for byte.** The same. +- The page in a real browser at a phone's width: uploads, a download, a new folder, a delete, a replace. +- Five wrong codes: shut for a minute, for the right code too. A browser that was already in stays in. +- Back: the server is gone and the memory comes back. + +And then on my actual phone, where it works, which is the sentence this post exists for. + +Not checked: Safari. Pulling the card out mid-transfer. Sharing while IRC is connected, when memory is tighter. What happens if the screen turns off while it's sharing. + +## Also since last time + +The day didn't stop at the [last post](/devlog/roro9stack-shell/): + +- **Pictures.** The Storage App opens PNG, JPEG, BMP and GIF files (**v0.16.0**). The interesting part was the PNG decoder: the one in the display library wanted 44 KB in a single block, got it once, and refused the next five pictures. The firmware has its own now, which needs 32. +- **Fn+p** takes a screenshot on any screen (**v0.17.0**), except the one that shows the Debug Console's token, where it politely declines. +- **This site has a [search](/search/).** +- **A WireGuard tunnel** is sitting in a pull request. It works against a test server on my own network and is waiting to meet a real one. + +## By the numbers + +{% table() %} +| | | +|---|---| +| Keys to press on the device | 1 | +| Apps to install on the phone | 0 | +| Digits in the code | 6 | +| Wrong codes before it shuts for a minute | 5 | +| The page | 5.4 KB | +| Flash | 57 KB | +| Memory while sharing | 13 KB | +| Speed | about 200 KB/s | +| Requests at a time | 1 | +| Bytes that differed after 2.6 MB went up and came back | 0 | +| Host tests | 533 | +| Things that went wrong | 2 | +{% end %} + +## Where it stands + +{% steps() %} +1. ~~M0 and M1: the skeleton, Wi-Fi, IRC, Wi-Fi Tools.~~ v0.1.0 to v0.2.1, [the first post](/devlog/roro9stack/). + +2. ~~Updates and debugging over the air.~~ v0.3.0, [Look, no cables](/devlog/roro9stack-ota/). + +3. ~~M2: GNSS.~~ v0.4.0, [Seventeen satellites](/devlog/roro9stack-gnss/). + +4. ~~G1: Gemini.~~ v0.5.0, [A browser in the RAM IRC left over](/devlog/roro9stack-gemini/). + +5. ~~M3: the LoRa radio, listening.~~ v0.6.0, [The loudest thing it hears is itself](/devlog/roro9stack-lora/). + +6. ~~S1: the card, fixed addresses, the System App.~~ v0.6.1 to v0.8.1, [One byte too early](/devlog/roro9stack-s1/). + +7. ~~F1 and the start of R1: files, notes, signed releases, updates from Gitea.~~ v0.9.0 to v0.11.0, [836 bytes](/devlog/roro9stack-f1-r1/). + +8. ~~W1: the website, and one firmware with the Debug Console in it.~~ v0.12.0, [It was off](/devlog/roro9stack-console/). + +9. ~~A help key, the Shell, notes of any size.~~ v0.13.0 to v0.15.0, [It said "No"](/devlog/roro9stack-shell/). + +10. ~~Pictures, and a screenshot key.~~ v0.16.0 and v0.17.0. + +11. ~~The card in a phone's browser.~~ This post. Not released yet: it's in a pull request as I write. + +12. Next: the WireGuard tunnel, once it has talked to a real server. And M4, the mesh, which still wants a second node. +{% end %} + +{% signoff() %} +I asked which of three servers to build and got told to build none of them. Then I pressed a key, picked up my phone, and my files were on it. Most of what this firmware does took days of careful measuring to get right. This took less than an evening, and it works, and I'm going to enjoy that at least until the next thing breaks. +{% end %} diff --git a/site/content/devlog/roro9stack-share/page.png b/site/content/devlog/roro9stack-share/page.png new file mode 100644 index 0000000000000000000000000000000000000000..7c759f8ff4db48a7b9b66b9475bda79ec591de15 GIT binary patch literal 36033 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 W!+f=EIbWRNKs5J4behL$=o1ucyVLO>$| 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 literal 0 HcmV?d00001