git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
89 lines
3.2 KiB
PowerShell
89 lines
3.2 KiB
PowerShell
# RuvLLM ESP32 - Cluster Flash Script (Windows)
|
|
# Flashes multiple ESP32s with configured roles
|
|
|
|
param(
|
|
[string]$ConfigFile = "cluster.toml"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
Write-Host @"
|
|
|
|
╔══════════════════════════════════════════════════════════╗
|
|
║ RuvLLM ESP32 - Cluster Flash Tool ║
|
|
╚══════════════════════════════════════════════════════════╝
|
|
|
|
"@ -ForegroundColor Cyan
|
|
|
|
if (-not (Test-Path $ConfigFile)) {
|
|
Write-Host "Error: $ConfigFile not found" -ForegroundColor Red
|
|
Write-Host "Run: .\install.ps1 cluster <num_chips>"
|
|
exit 1
|
|
}
|
|
|
|
# Parse config
|
|
$config = Get-Content $ConfigFile -Raw
|
|
$clusterName = [regex]::Match($config, 'name = "([^"]+)"').Groups[1].Value
|
|
$numChips = [regex]::Match($config, 'chips = (\d+)').Groups[1].Value
|
|
$topology = [regex]::Match($config, 'topology = "([^"]+)"').Groups[1].Value
|
|
|
|
Write-Host "Cluster: $clusterName" -ForegroundColor Green
|
|
Write-Host "Chips: $numChips"
|
|
Write-Host "Topology: $topology"
|
|
Write-Host ""
|
|
|
|
# Build with federation
|
|
Write-Host "Building with federation support..." -ForegroundColor Yellow
|
|
cargo build --release --features federation
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "Build failed!" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Extract ports
|
|
$ports = [regex]::Matches($config, 'port = "([^"]+)"') | ForEach-Object { $_.Groups[1].Value }
|
|
|
|
$chipId = 1
|
|
foreach ($port in $ports) {
|
|
Write-Host ""
|
|
Write-Host "═══════════════════════════════════════════" -ForegroundColor Yellow
|
|
Write-Host "Flashing Chip $chipId to $port" -ForegroundColor Yellow
|
|
Write-Host "═══════════════════════════════════════════" -ForegroundColor Yellow
|
|
|
|
# Check if port exists
|
|
$portExists = [System.IO.Ports.SerialPort]::GetPortNames() -contains $port
|
|
if (-not $portExists) {
|
|
Write-Host "Warning: $port not found, skipping..." -ForegroundColor Red
|
|
$chipId++
|
|
continue
|
|
}
|
|
|
|
# Flash
|
|
$env:RUVLLM_CHIP_ID = $chipId
|
|
$env:RUVLLM_TOTAL_CHIPS = $numChips
|
|
|
|
espflash flash --port $port target\xtensa-esp32-espidf\release\ruvllm-esp32-flash
|
|
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host "✓ Chip $chipId flashed successfully" -ForegroundColor Green
|
|
} else {
|
|
Write-Host "✗ Chip $chipId flash failed" -ForegroundColor Red
|
|
}
|
|
|
|
$chipId++
|
|
|
|
# Wait between flashes
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "═══════════════════════════════════════════" -ForegroundColor Green
|
|
Write-Host "Cluster flash complete!" -ForegroundColor Green
|
|
Write-Host "═══════════════════════════════════════════" -ForegroundColor Green
|
|
Write-Host ""
|
|
Write-Host "To monitor: Open separate terminals and run:"
|
|
foreach ($port in $ports) {
|
|
Write-Host " espflash monitor --port $port"
|
|
}
|