.
├── Cargo.toml # манифест workspace
├── Makefile # сборка / кросс-сборка / упаковка
├── crates/
│ ├── rustsheng-core/ # core library (см. architecture.md)
│ │ └── tests/fw/ # эталонные .raw-фикстуры для интеграционных тестов
│ └── rustsheng/ # CLI-бинарник
├── docs/ # эта документация (en/ + ru/)
└── .github/workflows/ # CI (ci.yml) и релиз (release.yml)
- Rust ≥ 1.97,
edition = "2024". - Комментарии в коде и сообщения коммитов — на английском; коммиты следуют
Conventional Commits (
feat:,fix:,chore:,docs:,test:,refactor:). - Каждый исходный файл содержит SPDX-заголовок:
// SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2026 Maxim Krutovercev <mkrutovercev@yandex.ru> (RD2W) // Derived from k5prog (Jacek Lipkowski, SQ5BPF), k5prog-win (OneOfEleven), and K5TOOL (qrp73).
cargo build --workspace # сборка
cargo test --workspace # тесты (без оборудования)
cargo fmt --all # форматирование
cargo fmt --all -- --check # проверка форматирования (CI)
cargo clippy --workspace --all-targets -- -D warnings # линтинг (CI)
cargo build -p rustsheng-core --no-default-features # ядро без serial/flash-v5Все перечисленные команды должны проходить перед слиянием изменений; CI обеспечивает их соблюдение.
- Чистые слои (
protocol,eeprom,firmware,flash) тестируются модульными тестами напрямую — с известными байтовыми векторами, round-trip-тестами и, для AES, тестом с известным ответом NIST. clientтестируется сMockTransport(заскриптованные запрос/ответ), поэтому оборудование не требуется.- Интеграционные тесты (
crates/rustsheng-core/tests/fixtures.rs) читают эталонные.raw-образы изtests/fw/и корректно пропускаются при их отсутствии. - Пакеты flash сверены с
K5TOOLна байтовом уровне (например, выводrustsheng packпобайтово совпадает сK5TOOL -pack).
- Новая операция радиостанции — метод на
Client<T>плюс построитель вprotocol::commandsи подкоманда CLI; тестируется сMockTransport. - Новый протокол бутлоадера — реализация
FlashProtocolи ветка по идентификатору beacon вClient::wait_for_beacon.
rustsheng является производной работой от программ под GPL-3.0 и сам
лицензирован под GPL-3.0-or-later. Авторские права разделены:
- Jacek Lipkowski (SQ5BPF) —
k5prog. - OneOfEleven —
k5prog-win. - qrp73 —
K5TOOL. - Maxim Krutovercev (RD2W) — данный Rust-порт.
Конкретные заимствования: XOR-ключ для payload, CRC, идентификатор сессии,
команды EEPROM и таблица ORIGINAL_WRITES взяты из k5prog; XOR-ключ для
прошивки, ADC/RSSI и определение зашифрованной прошивки — из k5prog-win;
форматы пакетов V2/V5 flash, таблица ключей/IV AES и логика pack — из
K5TOOL. Ограничения размера flash по CPU защищают бутлоадер от перезаписи;
на эвристике data.Length > 0x10000 из K5TOOL; сопоставление версии загрузчика с
CPU (Cpu::from_boot_version) основано на форумных сообщениях о флешерах TWHH
(OUROBOROS); ограничения диапазона EEPROM для каждого CPU основаны на
MinEepromAddr/MaxEepromAddr из K5TOOL. Соответствие PID чипов PY32 (V2 → 0x440 /
PY32F0xx, V3/K1 → 0x448 / PY32F07x) подтверждается загрузчиком PUYA
puyaisp от wagiminator.