| Crates.io | milstd1553b-parser |
| lib.rs | milstd1553b-parser |
| version | 0.1.0 |
| created_at | 2025-11-15 12:46:36.425983+00 |
| updated_at | 2025-11-15 12:46:36.425983+00 |
| description | A comprehensive Rust parser and encoder for the MIL-STD-1553B (1553B) avionics bus protocol |
| homepage | https://github.com/1553b-rs/milstd1553b-parser |
| repository | https://github.com/1553b-rs/milstd1553b-parser |
| max_upload_size | |
| id | 1934312 |
| size | 98,226 |
A comprehensive Rust library for parsing and handling MIL-STD-1553B military data bus protocol. This library provides robust encoding/decoding, message parsing, and protocol validation for aerospace and military avionics systems.
MIL-STD-1553B is a serial synchronous data bus specification used in military avionics and aerospace systems. Key characteristics:
src/
├── lib.rs # Library root and module definitions
├── core.rs # Core types: Word, Address, Bus, WordType
├── encoding.rs # Manchester encoding/decoding
├── error.rs # Error types and result handling
├── message.rs # Message types: Command, Status, StatusFlags
├── parser.rs # High-level message parsing
├── protocol.rs # Protocol validation and bus management
└── main.rs # Example usage
core ModuleDefines the fundamental data structures:
Word: 20-bit word with validation and parity checkingAddress: Device address (0-31, with 31 as broadcast)Bus: Bus identification (BusA or BusB)WordType: Word classification (Command, Data, Status, ModeCode)Key Features:
encoding ModuleManchester encoding/decoding for MIL-STD-1553B:
ManchesterEncoder: Converts bits to Manchester-encoded bytesManchesterDecoder: Decodes Manchester-encoded bytes back to bitsManchesterType: Configurable encoding variants (IEEE, Thomas)Features:
error ModuleComprehensive error handling:
ParseError: Custom error type with specific error variantsResult<T>: Type alias for convenient error handlingError Types:
InvalidWord: Malformed word structureParityError: Parity validation failureInvalidAddress: Address out of rangeInvalidMessageType: Unexpected message typeInsufficientData: Not enough data to parseInvalidManchesterEncoding: Invalid Manchester patternmessage ModuleProtocol message definitions:
Command: Command word from Bus Controller
StatusWord: Status word from Remote Terminal
StatusFlags: Individual status indicators
ModeCode: Special mode commands
Message: Complete message envelope
parser ModuleHigh-level message parsing:
Parser: Main parser for converting raw data to messages
ParserBuilder: Fluent builder pattern for parser configuration
Transaction: Parsed transaction with timestamp and context
protocol ModuleProtocol-level handling and validation:
BusController: Manages bus operations and RT state
RemoteTerminal: RT state information
RTStats: Statistics for Remote Terminals
MessageValidator: Protocol validation utilities
use milstd1553b_parser::{Address, Command, CommandType, SubAddress, Parser, core::Bus};
// Create a parser
let parser = Parser::new(Bus::BusA);
// Build a command
let command = Command::new(
Address::new(5)?, // Target RT address
CommandType::Transmit, // Transmit data
SubAddress::new(10)?, // Sub-address
16, // 16 data words
)?;
// Encode to Manchester bytes
let encoded_bytes = parser.encode_command(&command)?;
println!("Encoded: {:?}", encoded_bytes);
use milstd1553b_parser::{Word, WordType, message::{StatusWord, StatusFlags}, Address};
// Create a status word
let flags = StatusFlags::new(false, true, false, false, false);
let status = StatusWord::new(Address::new(3)?, flags, 0x42)?;
// Encode it
let word = status.to_word()?;
println!("Status Word: {:?}", word);
// Decode it back
let decoded = StatusWord::from_word(&word)?;
assert_eq!(status, decoded);
use milstd1553b_parser::protocol::BusController;
use milstd1553b_parser::core::{Bus, Address};
// Create a bus controller
let mut bc = BusController::new(Bus::BusA);
// Register remote terminals
bc.register_rts(&[0, 5, 10, 15])?;
// Record transactions
bc.record_rt_success(Address::new(5)?)?;
bc.record_rt_error(Address::new(5)?)?;
// Get statistics
let stats = bc.get_rt_stats(Address::new(5)?);
println!("RT-5 Error Rate: {:.1}%", stats.unwrap().error_rate * 100.0);
serde feature)Enable JSON serialization/deserialization:
cargo build --features serde
This adds serde::Serialize and serde::Deserialize derives to data structures.
Run the comprehensive test suite:
cargo test
Tests cover:
The 20-bit word is structured as:
Uses odd parity over 17 bits (start bit + 16 data bits). This ensures:
Maps protocol data into 16-bit data field:
Note: This limits some fields compared to full MIL-STD-1553B. Can be extended for specific implementations.
The library exports key specification constants:
pub mod spec {
pub const CLOCK_FREQUENCY: u32 = 1_000_000; // 1 MHz
pub const WORD_LENGTH: usize = 20; // 20 bits
pub const MAX_REMOTE_TERMINALS: u8 = 30; // 30 RTs + BC
pub const MANCHESTER_BITS_PER_WORD: usize = 40; // 2x encoding
pub const MAX_DATA_WORD_RATE: u32 = 1_000_000; // 1 Mbps
}
This project is provided as-is for educational and commercial use in MIL-STD-1553B implementations.
Contributions are welcome! Areas for improvement: