Conversation
BanjoR
marked this pull request as ready for review
August 17, 2026 09:34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automatic issue closing
Fixes #354
Scope
Addresses issue #354 by adding digital level writes to
IO_PCA9685pwm:HIGHmaps to 100% duty (4095) and remains held untilLOW(0) is written. Both PCA9685 drivers explicitly clear every configured channel during initialization. The documentation defines the level-held semantics, bounded activation responsibility, safe external-driver boundary, and maintainer bench criteria.Files changed are limited to:
IO_PCA9685.cppIO_PCA9685pwm.hdocs/PCA9685_OUTPUTS.mdtests/test_pca9685_output_contract.pyPersonal integration code and unrelated protocol behavior are explicitly out of scope.
Existing-PR audit: PR #509 is an unrelated I2C-address correction and is conflicting; no superseded PCA9685 digital-output PR was identified.
Verification
python -m pytest -p no:cacheprovider tests -q: 4 passed.python -m pytest -p no:cacheprovider tests/test_pca9685_output_contract.py -q: 4 passed.git diff --check: passed.upstream/masteris an ancestor) and exact changed-file allowlist: passed..pytest_cache/directory remains physically present because ownership permissions prevented removal; no generated file is part of the PR diff. This physical-artifact hygiene point is not claimed as fully cleared.Validation update:
python -m platformio runin a clean task checkout with an isolated PlatformIO core completed for all five configured environments:mega2560,ESP32,Nucleo-F411RE,Nucleo-F446RE, andNucleo-F429ZI.Hardware validation: Not run—no hardware available.
Maintainer bench criteria
See
docs/PCA9685_OUTPUTS.md. Reproducibly verify startup and independent-reset outputs remain off, HIGH is held until LOW, SDA/SCL and command-station power loss de-energize the external driver, repeated bounded activations stay within measured on-time/current/temperature ratings, and I2C recovery creates no unintended pulse.