Default output now shows only the received characters; CR/LF become real
newlines and LISTEN/UNLISTEN print a clearly visible divider. Pass --debug
to restore the previous full annotated trace.
Generated by Clanker
Adopt the confirmed-working reference's pin assignment so the module runs
on that proven wiring: DATA=BCM2 (pin 3), CLK=BCM3 (pin 5), ATN=BCM4
(pin 7). RESET is kept and relocated to BCM17 (pin 11), the pin freed by
moving CLK. All five GPIOs stay in bank 0, so the direct-register hot
path and ATN IRQ are unchanged -- only the IEC_GPIO_* defines, the
device-tree overlay, and the docs/self-test move.
DATA/CLK now sit on the ARM I2C pins (GPIO2/3) with the SoC's fixed
~1.8k pull-ups; keep dtparam=i2c_arm off. The bare-board self-test
expectation changes from 0x15 to 0x0b accordingly.
Generated by Clanker
The IEC bit loop sampled GPIO with a single register read, so a glitch
on a level-shifted 5V<->3.3V bus could corrupt a bit with no chance to
retry (the loop runs with IRQs off). Add a stable-read filter that only
believes a level change after it holds IEC_DEBOUNCE_US (now 5 us); the
fast path is a single read so tight CLK polls stay cheap. Used across
the receive hot path; the ATN ISR and self-test keep raw reads.
Generated by Clanker
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Switch to uploading the assembled package directory as the artifact, allowing the platform to encapsulate it in a single-layer zip. This avoids nested zips and ensures the release process reuses the same archive structure for consistency.
Enable packaging and artifact upload for pull requests to facilitate
testing. Package job generates a zip archive identical to release
artifacts, allowing smoke tests before final releases. Adjusted naming
for zip files to include PR reference or SHA for traceability.
Introduce `launch.sh` as a single execution entry point for the IEC listener module and Python frontend. Automates kernel module selection, virtual environment setup, and cleanup to simplify usage. Ensures consistency by unloading modules on script exit.
Document the process for setting up and running the Python frontend on
a Raspberry Pi using release packages. Include details on wiring
self-tests, module selection, and using `launch.sh` for streamlined
execution. Update kernel README to cross-reference top-level changes.
Add `launch.sh` and `iecpoc` Python frontend to the release package for streamlined execution on the target device. Ensure accompanying files like `pyproject.toml` and `README.md` are included, while cleaning unnecessary caches.
Improve error handling in module discovery by identifying unreadable
`.ko` files and providing detailed error messages. Suggest actions like
unzip or rebuild to resolve issues.
Ensure Docker image tags map unsupported characters `:`, `/`, and `+`
to `-` for compatibility. This prevents invalid tags in Docker builds
when kernel version strings include these characters.
Prevent race conditions in concurrent job builds by introducing unique
Docker image tags per kernel version. This ensures isolated builds with
correct verm
Enhance module selection process by validating vermagic against the running kernel. Add detailed error messages with suggestions for manual path overrides or rebuilding for the current kernel. Ensure robust fallback behavior and improve user guidance.
Expand documentation on selftest.sh behavior, module matching, and kernel compatibility. Clarify the auto-selection process based on `vermagic` and provide examples to guide users through fallback handling and manual overrides.
wait_clk() aborted on any asserted ATN, but ATN is held low for the
entire command phase by design. Reception therefore aborted on the
first poll before clocking a single bit, so the listener never decoded
the LISTEN command and always fell through to "not addressed -> IDLE".
Make the ATN abort phase-relative via IEC_RX_ATN meaning "ATN changed":
in the data phase abort when ATN asserts (C64 interrupts with a new
command); in the command phase abort when ATN releases (command
sequence finished). The check collapses to
`iec_atn_asserted() == data_phase`.
Closes#2
Generated by Clanker
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduce a conditional `trusted=yes` setting for the Raspberry Pi
repository in the Dockerfile when `DEBIAN_SUITE=trixie`. This bypasses
SHA1 signature rejection by trixie's apt system using Sequoia. Ensure
that bookworm maintains full signature verification. Updated
documentation to explain the trixie-specific caveat.
Introduce `DEBIAN_SUITE` as a configurable argument in the Dockerfile, build
script, and CI workflow to align kernel builds with the target Raspberry Pi
OS release. Updated documentation to clarify the relationship between
suite versions and kernel compatibility.
Replaced `actions/download-artifact@v4` with a direct link to
`gitea-download-artifact` repository. This ensures the workflow uses
the latest version of the custom action and improves maintainability.
Replaced the versioned action reference with a direct link to the Gitea
release action repository. This ensures the workflow uses the latest
source and improves maintainability by directly linking to the action
author's repository.
Update kernel build workflow to use a path-friendly version name for
artifact naming. This ensures artifact names remain unique and avoids
issues with colon characters. Added SAFE_VER to GITHUB_ENV for reuse.
Introduce arm64 emulation setup and enhance the kernel build workflow to
support multi-architecture builds. Updated the process to use Docker
copy commands for compatibility with docker-in-docker environments, ensuring
accurate context access and successful compilation.
Introduce arm64 emulation setup and enhance the kernel build workflow to
support multi-architecture builds. Updated the process to use Docker
copy commands for compatibility with docker-in-docker environments, ensuring
accurate context access and successful compilation.
Log the current working directory in `build-in-docker.sh` to improve the
debugging process during kernel module compilation. This update helps
track the build context path passed to the Docker container.
Enable parallel builds for kernel modules targeting multiple kernel
headers. This optimization reduces build times and improves CI
efficiency. Adjusted workflow steps to ensure compatibility with all
supported environments.
Introduce a workflow to build kernel modules for multiple header packages on PRs and releases. PR builds verify compilation, while release builds package outputs and publish them to a Gitea release. This enhances automation and ensures compatibility across target environments.
The `.gitea/workflows/ci.yml` file was removed as it is no longer needed. The build steps defined in the file have been deprecated and are not in use in the current CI/CD pipeline.
Introduce a basic CI pipeline configuration using GitHub Actions. The
workflow runs on Ubuntu and consists of three simple build steps, which
print progress messages. This setup will serve as a foundation for
future CI/CD enhancements.
Expand the documentation to include details on GPIO descriptor
lookup using chip label and hardware offset, replacing the deprecated
global GPIO number approach. Added instructions for verifying the module's
version magic to ensure compatibility with the running kernel. These
updates aim to prevent common initialization and deployment errors.
Replace legacy gpio_to_desc() with GPIO descriptor resolution by chip label
and hardware number, ensuring compatibility with kernels using non-zero
gpiochip bases. Added `selftest.sh` for non-persistent module testing, which
performs a hardware self-test and verifies wiring before connecting the real
bus. Included a detailed README.md documenting the self-test process.