* feat: add ZeroClaw firmware for ESP32 and Nucleo * Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control. * Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting. * Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols. * Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms. * Created README files for both firmware projects detailing setup, build, and usage instructions. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat: enhance hardware peripheral support and documentation - Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO). - Updated `AGENTS.md` to include new extension points for peripherals and their configuration. - Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards. - Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support. - Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage. - Implemented new tools for hardware memory reading and board information retrieval in the agent loop. This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework. * feat: add ZeroClaw firmware for ESP32 and Nucleo * Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control. * Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting. * Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols. * Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms. * Created README files for both firmware projects detailing setup, build, and usage instructions. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat: enhance hardware peripheral support and documentation - Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO). - Updated `AGENTS.md` to include new extension points for peripherals and their configuration. - Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards. - Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support. - Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage. - Implemented new tools for hardware memory reading and board information retrieval in the agent loop. This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework. * feat: Introduce hardware auto-discovery and expanded configuration options for agents, hardware, and security. * chore: update dependencies and improve probe-rs integration - Updated `Cargo.lock` to remove specific version constraints for several dependencies, including `zerocopy`, `syn`, and `strsim`, allowing for more flexibility in version resolution. - Upgraded `bincode` and `bitfield` to their latest versions, enhancing serialization and memory management capabilities. - Updated `Cargo.toml` to reflect the new version of `probe-rs` from `0.24` to `0.30`, improving hardware probing functionality. - Refactored code in `src/hardware` and `src/tools` to utilize the new `SessionConfig` for session management in `probe-rs`, ensuring better compatibility and performance. - Cleaned up documentation in `docs/datasheets/nucleo-f401re.md` by removing unnecessary lines. * fix: apply cargo fmt * docs: add hardware architecture diagram. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
83 lines
2.9 KiB
Rust
83 lines
2.9 KiB
Rust
//! Flash ZeroClaw Nucleo-F401RE firmware via probe-rs.
|
|
//!
|
|
//! Builds the Embassy firmware and flashes via ST-Link (built into Nucleo).
|
|
//! Requires: cargo install probe-rs-tools --locked
|
|
|
|
use anyhow::{Context, Result};
|
|
use std::path::PathBuf;
|
|
use std::process::Command;
|
|
|
|
const CHIP: &str = "STM32F401RETx";
|
|
const TARGET: &str = "thumbv7em-none-eabihf";
|
|
|
|
/// Check if probe-rs CLI is available (from probe-rs-tools).
|
|
pub fn probe_rs_available() -> bool {
|
|
Command::new("probe-rs")
|
|
.arg("--version")
|
|
.output()
|
|
.map(|o| o.status.success())
|
|
.unwrap_or(false)
|
|
}
|
|
|
|
/// Flash ZeroClaw Nucleo firmware. Builds from firmware/zeroclaw-nucleo.
|
|
pub fn flash_nucleo_firmware() -> Result<()> {
|
|
if !probe_rs_available() {
|
|
anyhow::bail!(
|
|
"probe-rs not found. Install it:\n cargo install probe-rs-tools --locked\n\n\
|
|
Or: curl -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh\n\n\
|
|
Connect Nucleo via USB (ST-Link). Then run this command again."
|
|
);
|
|
}
|
|
|
|
// CARGO_MANIFEST_DIR = repo root (zeroclaw's Cargo.toml)
|
|
let repo_root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
|
|
let firmware_dir = repo_root.join("firmware").join("zeroclaw-nucleo");
|
|
if !firmware_dir.join("Cargo.toml").exists() {
|
|
anyhow::bail!(
|
|
"Nucleo firmware not found at {}. Run from zeroclaw repo root.",
|
|
firmware_dir.display()
|
|
);
|
|
}
|
|
|
|
println!("Building ZeroClaw Nucleo firmware...");
|
|
let build = Command::new("cargo")
|
|
.args(["build", "--release", "--target", TARGET])
|
|
.current_dir(&firmware_dir)
|
|
.output()
|
|
.context("cargo build failed")?;
|
|
|
|
if !build.status.success() {
|
|
let stderr = String::from_utf8_lossy(&build.stderr);
|
|
anyhow::bail!("Build failed:\n{}", stderr);
|
|
}
|
|
|
|
let elf_path = firmware_dir
|
|
.join("target")
|
|
.join(TARGET)
|
|
.join("release")
|
|
.join("zeroclaw-nucleo");
|
|
|
|
if !elf_path.exists() {
|
|
anyhow::bail!("Built binary not found at {}", elf_path.display());
|
|
}
|
|
|
|
println!("Flashing to Nucleo-F401RE (connect via USB)...");
|
|
let flash = Command::new("probe-rs")
|
|
.args(["run", "--chip", CHIP, elf_path.to_str().unwrap()])
|
|
.output()
|
|
.context("probe-rs run failed")?;
|
|
|
|
if !flash.status.success() {
|
|
let stderr = String::from_utf8_lossy(&flash.stderr);
|
|
anyhow::bail!(
|
|
"Flash failed:\n{}\n\n\
|
|
Ensure Nucleo is connected via USB. The ST-Link is built into the board.",
|
|
stderr
|
|
);
|
|
}
|
|
|
|
println!("ZeroClaw Nucleo firmware flashed successfully.");
|
|
println!("The Nucleo now supports: ping, capabilities, gpio_read, gpio_write.");
|
|
println!("Add to config.toml: board = \"nucleo-f401re\", transport = \"serial\", path = \"/dev/ttyACM0\"");
|
|
Ok(())
|
|
}
|