Public Access
M1 design: glossary for Wi-Fi/IRC, milestone plan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
This commit is contained in:
+19
-2
@@ -41,9 +41,25 @@ Rebroadcasting another Node's packet so it travels further across the mesh.
|
|||||||
_Avoid_: forwarding, repeating
|
_Avoid_: forwarding, repeating
|
||||||
|
|
||||||
**Wi-Fi Service**:
|
**Wi-Fi Service**:
|
||||||
The Service that owns the Wi-Fi radio. It's always in exactly one mode: *Off*, *Connected* (joined to an access point) or *Monitoring* (passively observing). It's Off unless an App asks for another mode.
|
The Service that owns the Wi-Fi radio. It's always in exactly one mode: *Off*, *Connected* (joined to a Saved Network) or *Monitoring* (passively observing). When Wi-Fi is enabled in Settings, it stays Connected whenever a Saved Network is in range. It goes Monitoring only while Wi-Fi Tools needs it, then reconnects.
|
||||||
_Avoid_: network manager
|
_Avoid_: network manager
|
||||||
|
|
||||||
|
**Saved Network**:
|
||||||
|
A Wi-Fi network the device may join on its own (name, password). When several are in range, the strongest wins.
|
||||||
|
_Avoid_: profile, known network
|
||||||
|
|
||||||
|
**IRC Service**:
|
||||||
|
The Service that keeps the IRC connection alive in the background once the IRC App has started it, until the user disconnects. It reconnects after drops, and pauses while the Wi-Fi Service is Monitoring. It does not start by itself after a reboot.
|
||||||
|
_Avoid_: IRC client (that's the App)
|
||||||
|
|
||||||
|
**Buffer**:
|
||||||
|
One IRC conversation shown in the IRC App: the server, a channel, or a private chat with one nick. Each Buffer counts its unread messages.
|
||||||
|
_Avoid_: window, tab, room
|
||||||
|
|
||||||
|
**Mention**:
|
||||||
|
An IRC message containing the user's nick, or any private message. Mentions raise Notifications; other traffic only counts as unread.
|
||||||
|
_Avoid_: highlight, ping
|
||||||
|
|
||||||
**Status Bar**:
|
**Status Bar**:
|
||||||
The strip shown on every screen with system state at a glance: battery, GNSS fix, mesh activity, Wi-Fi mode and unread count.
|
The strip shown on every screen with system state at a glance: battery, GNSS fix, mesh activity, Wi-Fi mode and unread count.
|
||||||
_Avoid_: header, top bar
|
_Avoid_: header, top bar
|
||||||
@@ -93,7 +109,7 @@ The screen where the user deletes old Logs and Captures by category and age, wit
|
|||||||
- The **Launcher** starts **Apps**. Exactly one **App** is in the foreground.
|
- The **Launcher** starts **Apps**. Exactly one **App** is in the foreground.
|
||||||
- **Services** keep running underneath, regardless of which **App** is in the foreground.
|
- **Services** keep running underneath, regardless of which **App** is in the foreground.
|
||||||
- The **Mesh Service** speaks one or more **Mesh Protocols** and tracks the known **Nodes**.
|
- The **Mesh Service** speaks one or more **Mesh Protocols** and tracks the known **Nodes**.
|
||||||
- The **Wi-Fi Service** serves one **App** at a time. Monitoring and Connected are mutually exclusive.
|
- The **Wi-Fi Service** is either Connected or Monitoring, never both. Monitoring pauses the **IRC Service**, which reconnects and rejoins its **Buffers** afterwards.
|
||||||
- **Services** raise **Notifications**; the **Status Bar** summarises **Service** state.
|
- **Services** raise **Notifications**; the **Status Bar** summarises **Service** state.
|
||||||
- A **Sweep** pauses the **Mesh Service**; a **Sniffer** does not.
|
- A **Sweep** pauses the **Mesh Service**; a **Sniffer** does not.
|
||||||
- Every transmission is bounded by the **Region** and its **Duty Cycle Budget**.
|
- Every transmission is bounded by the **Region** and its **Duty Cycle Budget**.
|
||||||
@@ -103,3 +119,4 @@ The screen where the user deletes old Logs and Captures by category and age, wit
|
|||||||
## Flagged ambiguities
|
## Flagged ambiguities
|
||||||
|
|
||||||
- "LoRa" was used both for the radio and for the mesh. Resolved: say **Mesh Service** for the always-on participation and **Mesh Protocol** for the on-air format. The LoRa Scanner **App** uses the radio directly and doesn't speak a **Mesh Protocol**.
|
- "LoRa" was used both for the radio and for the mesh. Resolved: say **Mesh Service** for the always-on participation and **Mesh Protocol** for the on-air format. The LoRa Scanner **App** uses the radio directly and doesn't speak a **Mesh Protocol**.
|
||||||
|
- "Channel" has three meanings here. Resolved: an unqualified **Channel** is the mesh one. The others are always qualified as "IRC channel" (a kind of **Buffer**) and "Wi-Fi channel" (radio frequency, 1–13).
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# M1 — Wi-Fi Service, Wi-Fi Tools, IRC
|
||||||
|
|
||||||
|
**Goal:** the device joins your Wi-Fi by itself, syncs its clock, keeps an IRC session alive in the background, and gives passive Wi-Fi diagnostics with full-frame captures.
|
||||||
|
|
||||||
|
## Decisions (design round 2026-10-02)
|
||||||
|
|
||||||
|
| # | Decision |
|
||||||
|
|---|---|
|
||||||
|
| Q40 | Up to 8 **Saved Networks**, joined strongest-first. Added from a scan or as a hidden network. Open networks are allowed; enterprise (802.1X) is not. |
|
||||||
|
| Q41 / Q48 | The Wi-Fi Service stays **Connected** whenever enabled and a Saved Network is in range. Settings has a Wi-Fi On/Off switch. **Monitoring** happens only while Wi-Fi Tools is open; the device reconnects on exit. |
|
||||||
|
| Q42 | Captures record **full frames**, from a fixed Wi-Fi channel or hopping, to `/captures/wifi/YYYYMMDD-HHMMSS.pcap`. Band-wide views hop across channels 1–13. |
|
||||||
|
| Q43 | The signal tracker clicks faster as the signal gets stronger. On by default, mutable. |
|
||||||
|
| Q44 | IRC shows one Buffer at a time; Tab cycles Buffers. Commands: `/join /part /msg /me /nick /topic /names /quit /raw`. Logs go to `/irc/<network>/<buffer>/YYYY-MM-DD.log`. |
|
||||||
|
| Q45 | TLS verifies server certificates against the bundled certificate authorities. Per server, a self-signed certificate can be pinned on first use. |
|
||||||
|
| Q46 | If RAM is short: switch the frame buffer to 8-bit colour. Keep the AtomS3 Wi-Fi co-processor in mind. |
|
||||||
|
| Q47 | Passwords are stored in NVS without flash encryption (revisit before any public release). |
|
||||||
|
| IRC | The **IRC Service** stays connected in the background once the App has started it, until `/quit` or disconnect. It does not start at boot. |
|
||||||
|
| Q49 | Opening a Monitoring view while IRC is connected asks first. IRC then pauses, and reconnects and rejoins afterwards; its Buffers show the gap. |
|
||||||
|
| Q50 | Reconnects after drops wait 5 s, 10 s, 30 s … up to 5 min. |
|
||||||
|
| Q51 | Mentions and private messages raise Notifications. Other traffic only counts as unread (Status Bar shows the total). |
|
||||||
|
| M0 | The **Storage Clean-up** screen lands here, once IRC Logs and Captures exist. |
|
||||||
|
|
||||||
|
## Done when
|
||||||
|
|
||||||
|
- Wi-Fi joins the strongest Saved Network at boot. The Status Bar shows Wi-Fi state, and the clock is set over NTP.
|
||||||
|
- Settings → Wi-Fi: On/Off, scan and add a network (with password), add a hidden network, forget a network.
|
||||||
|
- The IRC App configures one server (host, port, TLS, nick, SASL or NickServ, auto-join IRC channels). It connects and keeps running after you leave the App. Mentions notify.
|
||||||
|
- IRC reconnects after Wi-Fi loss or a server drop, and rejoins its IRC channels. Logs are written to the SD card (and stop past 90% usage).
|
||||||
|
- Wi-Fi Tools: access-point list, channel occupancy, signal tracker, packet counters, probe requests (logged), and pcap capture that opens in Wireshark.
|
||||||
|
- Settings → Storage → Clean-up deletes IRC Logs, probe Logs and Wi-Fi Captures older than a chosen age, with a preview of the space freed.
|
||||||
|
- Free heap stays above about 40 KB with Wi-Fi, TLS-connected IRC and the UI running.
|
||||||
|
|
||||||
|
## Work breakdown (proposed order)
|
||||||
|
|
||||||
|
1. **Memory baseline:** measure the heap with Wi-Fi Connected plus one TLS connection. Switch the frame buffer to 8-bit if the margin is too thin.
|
||||||
|
2. **Wi-Fi Service:**
|
||||||
|
- Saved Networks in NVS.
|
||||||
|
- Choosing the network (host-tested).
|
||||||
|
- The Off / Connecting / Connected / Monitoring state machine (host-tested).
|
||||||
|
- NTP → Clock.
|
||||||
|
- Status Bar indicator.
|
||||||
|
- Settings → Wi-Fi pages.
|
||||||
|
3. **Log writing:** a Log writer that respects the Storage rules, daily files, and the Storage Clean-up screen (selection logic host-tested).
|
||||||
|
4. **IRC Service** (host-tested core):
|
||||||
|
- message parser and serializer;
|
||||||
|
- registration, SASL PLAIN and NickServ;
|
||||||
|
- PING/PONG;
|
||||||
|
- Buffers with unread counts and Mention detection;
|
||||||
|
- reconnect backoff, and pause/resume around Monitoring.
|
||||||
|
|
||||||
|
Then the TLS transport with the certificate bundle.
|
||||||
|
5. **IRC App:** Buffer view, input line, command parser (host-tested), server settings page.
|
||||||
|
6. **Wi-Fi Tools App:** the six views; a pcap writer (host-tested); channel hopper; clicker for the signal tracker.
|
||||||
Reference in New Issue
Block a user