Update headers to Vehicle Spy 3.26.3.9; adopt 1!26.3.9 epoch versioning#234
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- icsnVC40.h / cicsSpyStatusBits.h copied verbatim from vspy3 Core/Hardware - drop local icsnVC40.h.patch: upstream now carries its own pack(4) around icsDeviceStatus, matching what the 3.26.3.9 DLL was built against - legacy device constants renamed *_DEPRECATED upstream; legacy settings structs removed (breaking; signaled by the 1!26.3.9 epoch release) - regenerate module defines and processed headers - adjust test_struct_sizes.py matched-macro baseline (77 -> 72): the 5 removed legacy settings structs (SRedSettings, SFireSettings, SVCAN3Settings, SECUSettings, SPendantSettings) took their *_SIZE macros with them, a clean removal rather than a mapping regression Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
get_version() derives MAJOR/MINOR macros from the dunamai version; strip the PEP 440 epoch prefix so builds work from v1!x.y.z tags. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- doc/source/index.rst regenerated against the new module surface - README versioning typo; pytest main footer in test_struct_sizes Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Latest upstream still vendors a pre-3.26.3.9 icsnVC40.h, so the Linux/macOS ABI gap for grown/new device settings remains until libicsneo syncs its header; noted at the pin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Master (4ed29b4) adds a mandatory icspb protobuf dependency whose codegen fails on the CI wheel builders (missing _deps/icspb-build/protos output dir), and its vendored icsnVC40.h is still pre-3.26.3.9 — so the bump broke Linux/macOS wheels while gaining no ABI parity. Re-bump once upstream syncs the header and icspb builds cleanly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 7, 2026
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.
Updates the vendored headers to Vehicle Spy 3.26.3.9 and migrates the release versioning to the Vspy-aligned scheme via a PEP 440 epoch: the next release is
1!26.3.9.Header update (breaking)
icsnVC40.hcopied verbatim from vspy3Core/Hardware(hash-verified against the source tree).cicsSpyStatusBits.hwas already byte-identical upstream.icsnVC40.h.patch: upstream now carries its ownpack(4)(around theicsDeviceStatusunion), and matching the exact header the 3.26.3.9 icsneo40.dll was built against is the ABI-safe choice.NEODEVICE_BLUE→NEODEVICE_BLUE_DEPRECATED, likewise DW_VCAN, FIRE, VCAN3, RED, ECU, PENDANT, NEOANALOG, CT_OBD) and 5 legacy settings structs removed (SRedSettings,SFireSettings,SVCAN3Settings,SECUSettings,SPendantSettings). The module mirrors the header as-is — no compat aliases. Scripts using legacy devices should stay on 923.11.src/methods.cpp: the 9 renamed constants updated in the legacy device-name fallback switch; display strings unchanged.doc/source/index.rstregenerated against the new module surface.Versioning migration (the pip problem)
PEP 440 orders
923.11 > 26.3.9, so a plain26.3.9upload would never be picked up by pip. Releases now use a version epoch — dunamai already parses epoch tags, so the only code change was makingsetup.py'sget_version()strip the epoch before deriving MAJOR/MINOR macros.Dry-run proof (local tag
v1!26.3.9, deleted afterwards):1!26.3.9Version: 1!26.3.9pip install --dry-run -Uwith both a local1!26.3.9wheel and the PyPI923.11available:Would install python_ics-1!26.3.9✓Pinning guidance is documented in the new README Versioning section. All future tags must keep the
1!prefix (v1!26.4.0, …) — a barev26.xtag would sort below 923.11 again.Tests
tests/test_struct_sizes.py: validates every generated ctypes struct against the header's*_SIZEmacros (72 matched; the only allowlisted discrepancy is upstream's staleRAD_GPTP_AND_TAP_SETTINGS_SIZE= 40 vs actual 56, unchanged in 3.26.3.9).tests/test_header_3_26.py: pins the 3.26.3.9 API surface (renames, removals, grown sizes).Hardware verification (neoVI FIRE3, ON0569)
find_devices/ open /get_serial_number/get_device_settingsall working on the rebuilt module.NETID_ETHERNET2: transmitted 64-byte frame came back as a byte-exact TX report (162 messages, 0 errors). Device settings were modified RAM-only (save_to_eeprom=0) and restored (verified read-back0x20000010/0x3F).get_device_status()still fails (icsneoGetDeviceStatus() Failed) even with the matched header and the 26.3 driver (DLL reports 2603) — so the failure is not the old header-layout mismatch; needs a separate look at the DLL/API for FIRE3.build_libicsneo.pystays pinned at830fe1a, whose vendoredicsnVC40.hpredates 3.26.3.9 (no Comet3/Gigastar2 structs, Galaxy2 size 840 vs 1204, bareNEODEVICE_BLUE). A bump to current libicsneo master (4ed29b4) was tried and reverted: master still has the old header and adds a mandatory icspb protobuf dependency whose codegen fails on the CI wheel builders (_deps/icspb-build/protos/: No such file or directory). So until libicsneo syncs its header (and icspb builds cleanly), Linux/macOS wheels ABI-mismatch the grown/new device settings structs regardless of pin choice. Noted in a comment at the pin. (Windows uses the installed icsneo40.dll and is unaffected.)Known issues (pre-existing, not addressed here)
examples/lin_settings_example.pyreferences enum members that were deprecated/nonexistent before this branch; it was already broken and needs a rewrite or removal.__full_version__(cosmetic) uses dunamai's{base}format, which omits the epoch.Post-merge release checklist
check-wheel-contentsrejects the delvewheel-repaired Windows wheel with W009/W010 (ics/+python_ics.libs/toplevel). Allowlist those codes for the repaired layout or the1!26.3.9upload will fail the same way.icsnVC40.hsynced to 3.26.3.9 upstream, then bump the pin again (see ABI-gap note above).git tag -a "v1!26.3.9" -m "Vehicle Spy 3.26.3.9" && git push origin "v1!26.3.9".1!26.3.9as latest andpip install -U python_icsupgrades a 923.11 install.🤖 Generated with Claude Code