libraries/<HAL>/hwdef/... changes were being tagged with the HAL library
name (e.g. AP_HAL_ChibiOS) since it was listed before hwdef as a
candidate subsystem, and an already-declared HAL name was treated as
valid and left alone. Make hwdef -- the deepest directory in the path --
the canonical tag in both cases, since it applies uniformly across
every HAL rather than being tied to one library.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
test scripts / build (astyle-cleanliness) (push) Canceled after 0s
test scripts / build (check_autotest_options) (push) Canceled after 0s
test scripts / build (logger_metadata) (push) Canceled after 0s
test scripts / build (param-file-validation) (push) Canceled after 0s
test scripts / build (param_parse) (push) Canceled after 0s
test scripts / build (python-cleanliness) (push) Canceled after 0s
test scripts / build (shellcheck) (push) Canceled after 0s
test scripts / build (validate_board_list) (push) Canceled after 0s
size_compare_branches wrote its progress CSV to the hardcoded path
/tmp/some.csv; make the destination a command-line option, and write
no progress file at all when the option is not given. The write
helper lives in the shared base class, and build_boards gains the
same option, writing task counts, remaining tasks and failures as
builds complete (in both parallel and sequential modes).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Some editors strip the final newline by default, which shows up as
"No newline at end of file" noise in GitHub review. Fail the branch
conventions check when a PR adds a source file without a trailing
newline or removes one from a file which had it. Pre-existing
violations do not block unrelated edits.
Detect LSM6DSV32X separately from LSM6DSV16X using the CTRL8 variant bit,
as both parts share the same WHO_AM_I value.
Detect LSM6DSK320X using its WHO_AM_I value, register both new variants
with dedicated device types, and use the correct accel/gyro full-scale
register encodings for each variant.
Update decode_devid.py so INS device IDs decode to the new variant names.
Add check_commit_subsystems() to check_branch_conventions.py, which uses
the allowed_subsystems library to verify, for every commit on the branch,
that:
- the declared subsystem prefix is an allowed subsystem (a libraries/
directory, a directory the commit creates, or a curated extra), and
- every file changed in the commit belongs to that subsystem.
When a file does not belong to the declared subsystem the error lists the
subsystem(s) it could be part of; when the prefix itself is unknown the
error suggests the closest allowed name ("did you mean ...?"). Revert and
fixup! commits are skipped (handled by the existing checks). This runs in
the existing test_branch_conventions.yml workflow; no CI configuration
change is required.
The generic git helpers get_added_paths_for_commit() and
created_library_dirs() live on BuildScriptBase so other build scripts can
reuse them. Register allowed_subsystems as a known-first-party module in
pyproject.toml so the new import sorts correctly under ruff/isort.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add Tools/scripts/allowed_subsystems.py, the single source of truth for
which subsystem prefixes are permitted in commit messages and which
subsystem(s) a changed file may belong to.
A subsystem is allowed if it is a directory under libraries/ (computed
dynamically), a libraries/ directory created by the commit itself, or one
of the curated non-library extras (vehicles, Tools, autotest, waf, hwdef,
modules, a few common class prefixes, ...). subsystems_for_path() returns
an ordered list of candidate subsystems for a path, since some files are
conventionally committed under more than one name (an autotest under
autotest or Tools; a ChibiOS hwdef file under hwdef or AP_HAL_ChibiOS).
suggest_subsystem() offers the closest allowed name for a mistyped prefix.
The functionality is exposed as an AllowedSubsystems object; running the
file directly prints every valid subsystem name. It is consumed by
check_branch_conventions.py, the git-subsystems-split tool and the sample
pre-commit hook.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
serial_protocol_compiled_in() in
AP_SerialManager_default_protocol_check.cpp gates each serial port default
protocol against the feature that provides it, but falls through to "true"
for any protocol it does not name -- so a protocol added to the enum without
a term there is silently treated as always-compiled-in, defeating the check
for that protocol. Nothing in the C++ can notice that omission.
Add check_serial_protocol_gates.py, which parses the SerialProtocol
enumerators from AP_SerialManager.h and the protocols named by
serial_protocol_compiled_in(), and requires every enumerator to be either
gated there or listed in an explicit UNGATED register (with the reason). A
new protocol in neither, or a stale name in the C++/register, is an error.
The register also makes visible the protocols that have a feature but are not
yet gated (GPS, Rangefinder, AirSpeed, AHRS, ...); gating those is a
behaviour-neutral follow-up.
Run it from pre-commit when the header, the check, or the script changes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The serial default-protocol checks are off by default. test_new_boards.py
enables them (via --extra-hwdef) when building newly-added boards, so a board
cannot pin a serial port default to a protocol it does not compile in.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test_new_boards.py now checks that any branch adding a new hwdef-bl.dat
also commits the matching prebuilt bootloader binary at
Tools/bootloaders/<board>_bl.bin, mirroring the build-time requirement.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Generate a static, fully-offline HTML site from a build_binaries history
SQLite database (as produced by build_binaries_history.py). Intended to be
run periodically; each run regenerates the whole tree. Pages are
self-contained (chart data inlined, uPlot vendored locally), so the output
opens directly from local disk with no database or network access.
Pages:
- Coverage (the landing page): board x vehicle status at the most recent
COMPLETED latest-tag run, split into boards with/without failures.
- Build trends: per-board grid, one box per run (newest left) linking to its
commit, recently-failing boards first; a "completed" row marks finished vs
partial runs; an optional checkbox interleaves the git commits we did not
build (rendered on demand).
- Flash free: per vehicle/board program-flash headroom (region computed via
the ChibiOS HWDef system), tightest first, low-headroom flagged.
- Runs: run duration, boards per run, builds per run, and commits since the
previous run.
- Overview dashboard, plus per-board detail pages (flash-free and build-
duration history and notable size changes). Chart points link to the commit.
Lives in its own subdirectory with a README onboarding guide (architecture,
data flow, the inlined-data contract, how to extend, and dev gotchas).
Written with AI assistance.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
LIS2MDL and IIS2MDC are the same ST silicon with identical register
maps, WHO_AM_I, I2C address and sensitivity. Remove the separate
LIS2MDL driver entirely and switch boards that referenced it to IIS2MDC.
AIRBRAINH743 COMPASS line changed from LIS2MDL to IIS2MDC.
this prevent linter to trigger on none existing progress_prefix on the base class
Child class will now have TypeError if they don't implement progress_prefix
New AP_Networking_SITL_TUN backend that opens a Linux TAP device and
bridges the lwIP stack to it. Slots into the same "ethernet" position
in PPP_ETHERNET_GATEWAY mode that the ChibiOS backend takes on real
hardware, so a SITL build acting as a PPPGW can be reached by developer
tools on the host (browsers, curl, ...) at the periph's PPP-side IP.
A new Tools/scripts/Networking/sitl_network.sh handles the one-time
host setup: it creates the TAP device under the current user (so the
SITL binary needs no extra privileges), assigns the host's IP, and
installs iptables MASQUERADE + FORWARD rules so the SITL subnet can
reach the wider host network / internet via NAT. The matching `down`
action undoes exactly what `up` put in place, using a small state file
in /tmp to remember the outbound interface and the previous
net.ipv4.ip_forward setting. Tools/scripts/Networking/README.md
documents the usage and customisation knobs.
Tools/scripts/Networking/sitl_network.sh up # create TAP + NAT
sim_vehicle.py -v Plane -f quadplane-PPP
curl http://10.77.193.20/ # PPPGW web UI
Tools/scripts/Networking/sitl_network.sh down
The backend's init falls back to a "PPPGW-only, no host bridge" mode
if the TAP device is not pre-created (TUNSETIFF returns EPERM): it
seeds activeSettings from the user-configured IP params and prints a
one-line warning. That way the same hwdef works in autotest (which
runs without root and without sitl_network.sh) and in developer
sessions (which run it).
Gated by AP_NETWORKING_BACKEND_SITL_TUN (default 0); turned on in a
per-board hwdef when wanted. AP_NETWORKING_NEED_LWIP is widened to
include this backend so the lwIP sources get pulled into the build.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New SITL AP_Periph board modelled on the ChibiOS PPPGW boards (eg
Pixhawk6X-PPPGW), with the PPP networking backend, scripting, and a
ROMFS-embedded copy of the pppgw_webui.lua web interface from
Tools/AP_Periph/Web. Intended for end-to-end PPP testing between two
ArduPilot SITL processes and for exercising the PPPGW web server in
SITL.
The hwdef:
- enables AP_PERIPH_NETWORKING_ENABLED, AP_NETWORKING_BACKEND_PPP and
AP_NETWORKING_CAN_MCAST_ENABLED;
- points NET_PPP_PORT at serial 1 so the periph can be wired to the
plane SITL via --serial1=tcpclient:127.0.0.1:<port>;
- enables AP_SCRIPTING + AP_FILESYSTEM_ROMFS + AP_PARAM_DYNAMIC, and
embeds Tools/AP_Periph/Web/ via ROMFS_DIRECTORY;
- disables Lua bindings whose backing libraries AP_Periph does not link
(AP_Vehicle/AC_Fence/AP_Button/AP_Camera/AP_Mount/AP_OpticalFlow/
AP_VisualOdom/AP_Frsky_Telem/AP_Arming/RC_Channel). ChibiOS periph
builds handle this via defaults_periph.h; SITL periph has no
equivalent so we list the gates inline.
ROMFS support for SITL hwdefs (the ROMFS / ROMFS_WILDCARD /
ROMFS_DIRECTORY keywords) is added to sitl_hwdef.py, modelled on the
ChibiOS hwdef parser. Files are published via env_vars['ROMFS_FILES']
and picked up by the existing waf embed_ROMFS_files step in boards.py.
A new sitl_periph_PPP-specific defaults file
(Tools/autotest/default_params/periph-ppp.parm) holds runtime overrides
that should always apply to this build: NET_PPP_BAUD=921600 (saner
than the 12.5Mbaud real-hardware default for the loopback-TCP
transport), and SCR_ENABLE=1 so the web interface script comes up at
boot.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add AP_AHRS_EKF_RESET_ENABLED to the custom build server so the
EKF bootstrap reset aux function can be compiled out on
flash-constrained boards. Enabled by default, depends on EKF3.
Widen check_markdown_rst_hyperlinks to also flag RST cross-references
(:[a-z]+:`...`) alongside the existing RST external hyperlink check.
Rename the pass message to "RST-style markup" to reflect the broader
scope.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>