Skip to content

Releases: intrepidcs/python_ics

1!26.3.9 — Vehicle Spy 3.26.3.9

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 08 Jul 17:14
45167e0

python_ics is now versioned after the Vehicle Spy release its headers come from: Vspy 3.26.3.9 → python_ics 26.3.9.

⚠️ New version scheme — read before pinning

Older releases used the icsneo40 DLL version (e.g. 923.11), which sorts above 26.3.9 under PEP 440. This release therefore carries a version epoch: 1!26.3.9.

  • pip install python_ics and pip install -U python_ics do the right thing — pip resolves 1!26.3.9 as newer than 923.11.
  • Exact pins must include the epoch: python_ics==1!26.3.9.
  • Range pins work with or without it: python_ics>=1!26.3 and python_ics>=26.3 both match.

💥 Breaking changes

  • Headers updated to Vehicle Spy 3.26.3.9 (icsnVC40.h verbatim). Upstream renamed 9 legacy device constants — NEODEVICE_BLUE, _DW_VCAN, _FIRE, _VCAN3, _RED, _ECU, _PENDANT, _NEOANALOG, _CT_OBD are now *_DEPRECATED — and removed their settings structs (SRedSettings, SFireSettings, SVCAN3Settings, SECUSettings, SPendantSettings). The module mirrors the header exactly; no compat aliases. Scripts using these legacy devices should stay on 923.11.
  • PyNeoDeviceEx.serial_number boundary fix: serial 16796160 (MIN_BASE36_SERIAL) now correctly renders as "A0000" instead of "16796160".

🐛 Bug fixes (#229, #233)

  • SpyMessage memory corruption: the J1850 Header setter wrote up to 8 bytes into the 4-byte array, spilling into Data; ExtraDataPtr lengths were silently truncated through 8/16-bit fields; broken null checks could dereference NULL and leak pending exceptions into later calls; ExtraDataPtr could delete[] DLL-owned buffers (double free) and returned an under-referenced Py_None; unsafe T_OBJECT_EX member descriptors removed. Lengths and element types are now validated (ValueError/TypeError).
  • 32/64-bit and overflow fixes across the extension: find_devices heap overflow (new unsigned int(N)new[]) and 0xFFFFFFFF device-type masks no longer raise OverflowError; get/set_device_settings no longer write 8 bytes into a 4-byte enum on Linux/macOS; serial numbers ≥ 0x80000000 (ZIK0ZKZZZZZZ) are returned positive; script_get_script_status reported 127 of 255 parameters on Win64; RTC offset, reflash-progress callback, bus-voltage and VNET getters widened to correct types; coremini_load/load_readbin validate ftell() before malloc; several byte-sized parse targets fixed (stack-write hazards).
  • DeviceSettingsNone is now 4294967295 on every platform (was -1 on Windows); the DeviceSettingType struct field round-trips the full 32 bits; DescriptionID is a signed int16 matching the header.
  • Fixed documentation generation missing functions (#227) and an ignored exception on device close (#228).

📦 Packaging & CI

  • Linux/macOS wheels now bundle libicsneo master with full 3.26.3.9 ABI parity — upstream's vendored header is byte-identical to this release's. This includes building libicsneo's new mandatory icspb/protobuf dependency (Ninja generator, per-arch protobuf bootstrap, universal2-correct macOS builds) (#236).
  • PyPI deploys work again: the wheel-contents check now accepts the delvewheel-repaired Windows wheel layout (#235).
  • New regression tests: generated ctypes struct sizes are validated against the header's *_SIZE macros, and the 3.26.3.9 API surface is pinned.

✅ Verification

26→30 tests green on win_amd64/CPython 3.14; hardware-verified on a neoVI FIRE3 (byte-exact Ethernet TX report round-trip, DLL-owned ExtraDataPtr reads, RAM-only settings writes restored).

Known issues

  • examples/lin_settings_example.py references enum members that predate this release's headers and needs a rewrite.

Full changelog: v923.11...v1!26.3.9

v923.11

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 17 Feb 19:03

What's Changed

Full Changelog: v922.16...v923.11

v922.16

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 25 Nov 17:32
129ee43
  • Update to v922.16 header (#224)
  • Various fixes for potential crashes with function signatures.

v921.16.2

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 21 Nov 04:40
b4adcee

What's Changed

Full Changelog: v921.16...v921.16.2

v921.16.1

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 20 Nov 17:14

Add support for icsneoRequestSetNeoVIMiscIO (#222)

Full Changelog: v921.16...v921.16.1

v921.16

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 26 Sep 18:13
2182de1

What's Changed

  • Fixed new header cicsSpyStatusBits.h. by @drebbe-intrepid in #218
  • update to v921 header by @drebbe-intrepid in #220
  • Fixes #219
  • Add Python 3.14
  • Remove Python 3.9
  • Added pytest and runs in CI
  • Updated cibuildwheel
  • Updated documentation to utilize dynamic versioning.

Full Changelog: v920.14.2...v921.16

v920.14.2

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 30 Jun 15:07
91e62eb

What's Changed

Full Changelog: v920.14.1...v920.14.2

v920.14.1

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 19 Jun 17:39
2ec7bf6

What's Changed

Full Changelog: v920.14...v920.14.1

v920.14

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 12 Jun 13:55

What's Changed

  • Added support for icsneoGetIMEI() and icsneoGetComponentVersions(). This will be part of v921 and not available in v920 yet.
  • Added support for icsneoGetDeviceName(). This will eliminate "Unknown" device strings for new devices. We fallback to old behavior on older icsneo40 DLLs.
  • Fixed GIL release/acquire issues that would lead to crashing.
  • Remove deprecated devices by @MJun77 in #211
  • Recover EPSILON_EXPRESS missing by @MJun77 in #212

New Contributors

Full Changelog: v919.16...v920.14

v919.16

Choose a tag to compare

@drebbe-intrepid drebbe-intrepid released this 01 Apr 14:39

Update to v919.16

Full Changelog: v918.15...v919.16