Skip to content

Latest commit

 

History

History
120 lines (93 loc) · 7.04 KB

File metadata and controls

120 lines (93 loc) · 7.04 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.0.1] - 2026-07-02

Added

  • Firmware vendor transition detection: detects when a BBL/BFL file spans multiple firmware vendors (e.g. Betaflight sessions recorded before a board was reflashed to EmuFlight), warns with per-vendor session ranges, and corrects per-session output filename prefixes accordingly (prevents duplicate/incorrect prefixes like BTFL_BTFL_* or EMUF_BTFL_*)
  • QUIC_ fork exemption: FORK_REVISION_MAP exempts known Betaflight forks (Quicksilver/QUIC_) from false-positive vendor-transition renames, since Quicksilver intentionally writes Betaflight revision headers for Blackbox Explorer compatibility
  • sanitize_base_name_override(): prevents path traversal via the public library API's base-name override
  • vendor_name_for_prefix(): single source of truth for prefix-to-display-name mapping

Fixed

  • Universal gyro activity filtering (#40): ground-test logs without duration metadata (common in INAV and older Betaflight) no longer produce "Data Unavailable" output. Replaced scale-dependent variance detection with scale-independent gyro range detection (MIN_GYRO_RANGE = 500.0), lowered the no-duration frame fallback threshold (FALLBACK_MIN_FRAMES = 7,500), and fixed NaN propagation in calculate_range() for conservative handling of bad data. calculate_variance() is retained but deprecated (#[deprecated(since = "1.0.0")]) in favor of calculate_range().
  • Release workflow: corrected the binary version check that compared the full bbl_parser 1.0.0 <sha> (<date>) output against a string missing the bbl_parser prefix
  • time crate RUSTSEC-2026-0009: updated the transitive time dependency (via the vergen/vergen-gitcl build-dependency) to 0.3.53, patching a denial-of-service via stack exhaustion (CVSS 6.8, medium)

Changed

  • Release artifact packaging: CI and release workflows now build ZIP archives (bbl_parser/bbl_parser.exe inside) instead of uploading loose binaries, for cleaner, versioned release pages
  • Dependency update: broad cargo update sweep (clap 4.5.40 → 4.6.1, serde 1.0.140 → 1.0.150, regex 1.11.1 → 1.12.4, syn 2.0.103 → 2.0.118, libc 0.2.173 → 0.2.186, and others)
  • Build tooling: migrated vergen 8 → vergen-gitcl 10 (EmitBuilder/git_sha/git_commit_dateEmitter/Gitcl::all_git()); VERGEN_GIT_SHA/VERGEN_GIT_COMMIT_DATE env var names are unchanged, so no downstream code changes were required

[1.0.0] - 2025-12-29

Added

  • Complete BBL binary format parser with support for all frame types (I, P, S, H, G, E)
  • Library API (bbl_parser crate) for programmatic access to parsing and export functions
  • CSV export with blackbox_decode-compatible field ordering and formatting
  • GPX export for GPS track visualization and mapping applications
  • Event export in JSONL format with official Betaflight FlightLogEvent enum mapping
  • Multi-log support with automatic detection and separate file generation
  • Smart export filtering based on flight duration and gyro activity heuristics
  • Streaming architecture for memory-efficient processing of large files (tested: 375K+ frames)
  • Comprehensive CLI with configurable output options and batch processing
  • Feature flags (csv, json, cli, serde) for flexible dependency management
  • Firmware compatibility for Betaflight (4.5+), EmuFlight, and INAV
  • Unit conversions for voltage (raw to volts) and current (raw to amps)
  • Energy calculation with cumulative amperage integration
  • Betaflight-accurate flag formatting for flight mode, state, and failsafe phases
  • GPS coordinate conversion from NE (north-east) to standard GPS coordinates
  • Comprehensive test coverage with 62 unit tests + 8 integration tests
  • Complete documentation including README, CRATE_USAGE.md, OVERVIEW.md, and 8 examples
  • API documentation with rustdoc comments on all public types and functions
  • GitHub Actions CI/CD with multi-platform testing (Linux, Windows, macOS)
  • Automated release workflow for crates.io publication with artifact management

Technical Highlights

  • Pure Rust implementation with no external binary dependencies
  • Production-grade error handling using anyhow::Result<T> throughout public API
  • Type-safe design with minimal unsafe code
  • Cross-platform support verified on Ubuntu, Windows, and macOS
  • Dual licensing: AGPL-3.0-or-later (open source) + commercial option available

Performance

  • Efficiently processes large blackbox logs via streaming architecture
  • Tested on files up to 375K+ frames (21 MB) in under 7 seconds
  • Memory-efficient frame processing with selective storage for analysis

Compatibility

  • Input formats: .BBL, .BFL, .TXT (case-insensitive)
  • Firmware versions: Betaflight 4.0+, EmuFlight, INAV
  • Output formats: CSV, GPX, JSONL event logs
  • Binary compatibility: Output matches blackbox_decode reference implementation

Documentation

  • Extensive project documentation (README.md, OVERVIEW.md, CRATE_USAGE.md)
  • Frame format specifications in FRAMES.md
  • Usage examples for CSV, GPX, and event exports
  • Contribution guidelines and commercial licensing information

Future Roadmap

Planned for 1.1.0

  • IMU angle computation (roll, pitch, yaw) from gyro/accelerometer/magnetometer data
  • Extended unit conversions (altitude, speed, rotation rates, acceleration)
  • GPS data integration into main CSV output
  • Enhanced loop timing statistics and frame distribution analysis
  • Parallel frame processing for multi-log files

Planned for 1.x series

  • Advanced filtering options for specialized analysis
  • Raw mode output (unprocessed sensor values)
  • Current meter simulation improvements
  • Extended firmware version testing coverage

Known Limitations & Future Work

The following are not blocking 1.0.0 but may be addressed in future releases:

  • IMU simulation features not yet implemented
  • Some unit conversion types not yet available (altitude, speed, rotation rates)
  • GPS data is exported separately (.gps.gpx) rather than integrated into CSV
  • Raw sensor value export mode not available
  • Some .unwrap() calls in test/example code (critical paths use proper Result handling)

Acknowledgments

This project is built on extensive analysis of:

The implementation ensures compatibility with established blackbox format specifications while providing the benefits of a modern, type-safe Rust library.


Version History

  • 1.0.1 (2026-07-02) - Firmware vendor transition detection, universal gyro activity filtering fix, dependency updates
  • 1.0.0 (2025-12-29) - First stable release
  • 0.9.0 (2025-08+) - Development releases leading up to 1.0.0