Pico wiring checks, minimum-change repair, unsatisfiable device diagnosis and physical header wiring.
moon check --deny-warn
moon test --deny-warn
moon run examples| 工程能力 | 本仓库实现 | 可检查的结果 |
|---|---|---|
| RP2040 资源语义 | board.mbt、validate.mbt、candidates.mbt | 功能映射、SPI CS 独占、显式共享总线、PWM 引脚别名与 slice 频率 |
| 既有接线优化 | repair.mbt | 旧接线软偏好与新需求硬锁分离;分支定界求最少信号改线,输出逐项差异与最优性标志 |
| 可复现无解诊断 | diagnose.mbt | 共用预算的设备删除检验;得到可单独复现的无解子集,完整检验后才标记不可再缩减 |
| 可接线结果 | wiring.mbt、export.mbt | 独立检查最终方案,投影到 Pico 实体排针,保留总线归属和 PWM slice/channel |
| 使用入口 | json_api.mbt、CLI、网页、测试和 CI | 同一 MoonBit 核心支撑四种模式、机器可读报告与可运行案例 |
npm run build
node bin/pinplan.mjs fixtures/mixed.json
Get-Content fixtures/repair.json | node bin/pinplan.mjs -
node bin/pinplan.mjs fixtures/rewire-pwm.json
node bin/pinplan.mjs fixtures/rewire-frequency.json
node bin/pinplan.mjs fixtures/diagnose-uart.json
npm run cases
npm test| 模式 | 输入语义 | 结果 |
|---|---|---|
| plan(默认) | devices.pins 为部分或全部硬锁 | 确定性可行方案,不优化 |
| check | 每个信号必须指定引脚 | 检查映射与完整资源兼容性 |
| repair | devices.pins 仍是硬锁;baseline 为既有接线软偏好 | repair.changed_pins、逐信号 changes 与 optimal |
| diagnose | 对 devices 的硬约束求解并缩减 | diagnosis.core_devices 与 irreducible |
{
"mode": "repair",
"devices": [
{"id": "motor", "kind": "pwm", "pins": {"OUT": 0}},
{"id": "indicator", "kind": "pwm"}
],
"baseline": [
{"id": "motor", "kind": "pwm", "pins": {"OUT": 0}},
{"id": "indicator", "kind": "pwm", "pins": {"OUT": 16}}
]
}node bin/pinplan.mjs fixtures/reserved-repair.json
node bin/pinplan.mjs fixtures/i2c-address-conflict.json
node bin/pinplan.mjs --format csv fixtures/shared-wiring.json > wiring.csv
node bin/pinplan.mjs --format pico-header fixtures/shared-wiring.json > pinplan_config.hnpm run build
npm run demolet reserved = [0]
let devices = [@pinplan.device("led", @pinplan.Pwm)]
let result = @pinplan.plan(devices, reserved_pins=reserved)
assert_eq(result.status, @pinplan.Solved)
assert_eq(@pinplan.check_assignments(result.assignments, reserved_pins=reserved).length(), 0)moon fmt
moon info
moon check --deny-warn
moon build --target js --release --deny-warn
moon test --deny-warn
npm run build
npm test
npm run cases
node scripts/check-consumer.mjsmoon login
moon publish --dry-run
moon publishfn check_assignments(assignments : Array[Assignment], reserved_pins? : Array[Int]) -> Array[Finding]fn diagnose(devices : Array[Device], reserved_pins? : Array[Int], max_nodes? : Int) -> DiagnosisReportfn export_pico_header(assignments : Array[Assignment], reserved_pins? : Array[Int], repair_optimal? : Bool?) -> String?fn export_wiring_csv(assignments : Array[Assignment], reserved_pins? : Array[Int], repair_optimal? : Bool?) -> String?fn is_available(gpio : Int) -> Boolfn pico_header_pin(gpio : Int) -> Int?fn pwm_slice(gpio : Int) -> Intfn run_json(text : String) -> StringInstall
Download zipPico wiring checks, minimum-change repair, unsatisfiable device diagnosis and physical header wiring.