Cross-platform (macOS + Linux) C++17 CLI that extracts a Betaflight FC's blackbox log in one command: auto-detect the serial port, read craft_name over the Betaflight CLI, send `msc` to reboot into USB mass storage, wait for the volume to mount, copy btfl_all.bbl to <craft_name>_<YYYYMMDD>_<HHMMSS>.bbl, and eject. Native throughout (termios serial, getmntinfo/proc-mounts mount detection, DiskArbitration/umount eject); the only subprocess is the Linux udisksctl eject fallback. Includes CMake/ctest build, unit tests for the pure logic (naming, craft_name parsing, mount diff, serial via pty, CLI parsing), README with a manual hardware integration procedure, and design/plan docs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
18 lines
402 B
C++
18 lines
402 B
C++
#pragma once
|
|
#include <chrono>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#include "serial.h"
|
|
|
|
namespace bfebbx {
|
|
|
|
// Pure: extract craft_name from captured CLI output.
|
|
std::optional<std::string> parseCraftName(const std::string& cliOutput);
|
|
|
|
void enterCli(Serial& s);
|
|
std::optional<std::string> getCraftName(Serial& s, std::chrono::milliseconds timeout);
|
|
void enterMsc(Serial& s);
|
|
|
|
} // namespace bfebbx
|