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
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- **RB23xx driver** — Soft-AP discovery (`RB2300_*` / `RB2310_*` / `RB2302_*`),
WPA2-PSK join (factory password, never logged), and firmware `.bin` upload
via `POST /upload?p=/{filename}` matching the `rb` CLI. Max 5 MiB, 120 s
deadline, no retries. A TCP reset after a full write is success (decoder
reboot). Soft-AP only.

### Changed

- Firmware job limits (max bytes, allowed reach modes, ESP `.app.bin`
requirement, RST-after-write) and Soft-AP PSK come from driver
`capabilities` instead of per-driver branches in shared runtime code.
- `update_firmware` is now a `DeviceDriver` trait method (uniform
`filename` parameter); the registry no longer manually dispatches with
per-driver signatures.
- WPA2-PSK join falls back to `wpa_supplicant` on the programming
interface when nl80211 CONNECT with a PMK does not produce carrier
(brcmfmac on Pi 5 does not offload the 4-way handshake). The supplicant
is killed on radio release.
- LongFred Soft-AP commissioning addresses are now `192.168.4.1` / source
`192.168.4.2` (ESP-IDF default, same as WiFred). This no longer overlaps
the BigFred hub LAN (`192.168.0.0/24`). Requires matching LongFred
Expand Down
99 changes: 99 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ crates/
wp-proto/ socket wire types + 4-byte-LE length+JSON framing
wp-core/ DeviceDriver trait, capabilities, typed errors
wp-link/ radio (nl80211/rtnetlink) + bounded HTTP client
wp-drivers/ wifred/, longfred/ — Soft-AP programming drivers
wp-drivers/ wifred/, longfred/, rb23xx/ — Soft-AP programming drivers
wp-fake/ FakeRadio + Soft-AP HTTP mocks (dev / tests)
wp-client/ Rust client SDK (mirrors go/client)
wireless-programmer/ bin: socket server, job registry, dispatch + CLI
Expand All @@ -45,10 +45,12 @@ wireless-programmer daemon --interface fake --verbose
# Standalone Soft-AP HTTP mock only (no IPC / radio)
wireless-programmer fake --driver wifred --bind 127.0.0.1:8070
wireless-programmer fake --driver longfred
wireless-programmer fake --driver rb23xx
```

With `--interface fake`, scan always returns one WiFred and one LongFred
candidate; programming talks to an in-process HTTP mock on `127.0.0.1`.
With `--interface fake`, scan always returns one WiFred, one LongFred, and
one RB23xx candidate; programming talks to an in-process HTTP mock on
`127.0.0.1`.

## Memory profile

Expand Down
5 changes: 3 additions & 2 deletions crates/wireless-programmer/src/cli/fake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use super::{init_tracing, LogLevel};
/// `fake` arguments — runs only the Soft-AP HTTP mock (no daemon / radio / IPC).
#[derive(Debug, Parser)]
pub struct FakeArgs {
/// Driver to emulate (`wifred` | `longfred`).
/// Driver to emulate (`wifred` | `longfred` | `rb23xx`).
#[arg(long)]
pub driver: String,

Expand All @@ -38,8 +38,9 @@ pub fn run_fake(args: FakeArgs) -> ExitCode {
let device: Arc<tokio::sync::Mutex<dyn wp_fake::FakeDevice>> = match args.driver.as_str() {
"wifred" => Arc::new(tokio::sync::Mutex::new(wp_fake::WifredFake::new())),
"longfred" => Arc::new(tokio::sync::Mutex::new(wp_fake::LongFredFake::new())),
"rb23xx" => Arc::new(tokio::sync::Mutex::new(wp_fake::Rb23xxFake::new())),
other => {
tracing::error!("unknown driver {other:?}; expected wifred or longfred");
tracing::error!("unknown driver {other:?}; expected wifred, longfred, or rb23xx");
return ExitCode::FAILURE;
}
};
Expand Down
2 changes: 1 addition & 1 deletion crates/wireless-programmer/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ pub struct UpdateFirmwareArgs {
/// CSV partition table for ELF USB flashes (default: `partitions.csv` next to `--file`).
#[arg(long)]
pub partition_table: Option<PathBuf>,
/// Path to a LongFred image (`.app.bin`, merged `.bin`, or ELF).
/// Path to a firmware image (LongFred `.app.bin` / ELF, or RB23xx `.bin`).
#[arg(long)]
pub file: PathBuf,
/// Do not stream job progress after starting the job.
Expand Down
Loading
Loading