Commits on Source 27

  • Silviu Toderita's avatar
    Release v9.3.1 · c12d4db6
    Silviu Toderita authored and Martin Zak's avatar Martin Zak committed
    c12d4db6
  • Martin Zak's avatar
    Merge branch 'release-v9.3.1' into 'master' · c8350b7e
    Martin Zak authored
    Release v9.3.1
    
    
    See merge request software-public/zaber-motion-lib!1743
    c8350b7e
  • Martin Zak's avatar
    ZML-1168: don't save/load pos.cycles · 4eb5f21e
    Martin Zak authored
    4eb5f21e
  • Martin Zak's avatar
    Merge branch 'ZML-1168-dont-save-load-pos-cycles' into 'master' · 566299a5
    Martin Zak authored
    ZML-1168: don't save/load pos.cycles
    
    Adds `pos.cycles` to the `NonsavedSettings` map in the save-state code. Because this map is consulted by both the save (get) and load (set) state paths, the setting is now excluded from both saving and loading.
    
    Closes ZML-1168
    
    See merge request software-public/zaber-motion-lib!1744
    566299a5
  • Martin Zak's avatar
    Release v9.3.2 · 6a94c400
    Martin Zak authored
    6a94c400
  • Martin Zak's avatar
    Merge branch 'release-v9.3.2' into 'master' · 3990597c
    Martin Zak authored
    Release v9.3.2
    
    Patch release **v9.3.2** — single fix.
    
    ### Changes
    * **ZML-1168** — The volatile `pos.cycles` setting is no longer saved or restored by device state operations (`getState`/`setState`). It is added to `NonsavedSettings` alongside `pos` and the other volatile settings.
    
    ### Release mechanics
    * `npx gulp set_version --new_version 9.3.2` — version bump across all languages (nuspec → `9.3.2-rc`, Java pom → `9.3.2-RC`).
    * LICENSE files intentionally left unchanged: a local `gen_license` run produced an incomplete bundle (it dropped the shipped `golang.org/x/crypto` and `golang.org/x/text`), so the known-good v9.3.1 license text is retained. The pre-existing version-staleness in those files should be fixed separately in a proper build environment.
    
    See merge request software-public/zaber-motion-lib!1746
    3990597c
  • Colby Sparks's avatar
    Fix PVT CSV action unit conversions · 9ce1c486
    Colby Sparks authored
    9ce1c486
  • Colby Sparks's avatar
    Merge branch 'zml-1164-pvt-csv-action-units' into 'master' · a9444182
    Colby Sparks authored
    Fix PVT CSV action unit conversions
    
    Add PVT action units when loading CSVs and convert them when exporting.
    
    #zml-1164 Fixed
    
    Related to zml-1164
    
    See merge request software-public/zaber-motion-lib!1748
    a9444182
  • Martin Zak's avatar
  • Martin Zak's avatar
    Merge branch 'ZML-1172-regenerate-license-bundle' into 'master' · f2d02bc7
    Martin Zak authored
    ZML-1172: upgrade @software-public/tools to 0.0.68 and regenerate LICENSE bundles
    
    ## What
    
    Re-pin `@software-public/tools` → `0.0.68` (which contains the `gen_license` fix from [software-public/zaber-tools!20](https://gitlab.izaber.com/software-public/zaber-tools/-/merge_requests/20)) and regenerate the third-party LICENSE bundles. Motion-lib side of [ZML-1172](https://youtrack.izaber.com/issue/ZML-1172).
    
    ## Changes
    
    - `package.json` / `package-lock.json`: `@software-public/tools` `0.0.66` → `0.0.68`.
    - Regenerated bundles: stale versions corrected — `miekg/dns` 1.1.55→1.1.72, `modern-go/concurrent`, `x/net`→0.52.0, `x/sync`→0.20.0, `x/mod`→0.34.0 — and removed `golang.org/x/crypto` / `golang.org/x/text` (both `go.mod`-only; not built into the shipped binary per `go version -m`).
    - `licensing/generate.ts`: added **`py/LICENSE.txt`** to the generator's destinations. This is the bundle `py/pyproject.toml` ships as the package `license` file, but it was missing from the destinations and had gone stale (last regenerated 2024-03-07, still listed `x/crypto v0.0.0-20210322…`). It is now regenerated with the rest and is byte-identical to `licensing/LICENSE`.
    
    ## Verified
    
    `npx gulp gen_license` emitted all 36 selected modules with **no "No license" drops**; every version matches `go list -m`. `py/LICENSE.txt` now matches the canonical bundle. LF endings preserved (`core.autocrlf=true`).
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    See merge request software-public/zaber-motion-lib!1747
    f2d02bc7
  • Martin Zak's avatar
  • Martin Zak's avatar
    Merge branch 'ZML-1166-update-docker-images-with-node-24' into 'master' · 5dcbf1ea
    Martin Zak authored
    ZML-1166: update Linux build images to Node 24 on Ubuntu 22.04
    
    Updates the Linux build/CI Docker images (`linux_amd64`, `linux_arm`, `linux_arm64`) from Node 18 to Node 24, clearing the `npm WARN EBADENGINE` warnings in the release jobs — `@zaber/motion` and `bson@7` require `node >=20.19.0`. The obsolete `npm@8.19.4` pin is dropped (Node 24 bundles npm 11).
    
    Node 24's node-gyp defaults native addons to C++20, which Ubuntu 20.04's gcc 9 rejects, so the base image moves to **Ubuntu 22.04** (gcc 11).
    
    ⚠️ This raises the glibc floor of the shipped Linux artifacts from **2.31 → 2.35**.
    
    Knock-on changes from the 22.04 bump:
    - **Maven** `3.9.14 → 3.9.16` — 3.9.14 was purged from dlcdn.apache.org and now 404s, which already breaks any image rebuild.
    - **Firefox** installed from Mozilla's apt repo on amd64 (Ubuntu's `firefox` is a snap, unusable in a container). Dropped from arm/arm64, where the headless WASM web tests that use it only run on x64.
    - **Swift** switched to the `ubuntu22.04` toolchain build.
    - **clang-tidy**: jammy ships clang-tidy 14, whose `bugprone-throw-keyword-missing` check false-positives on the generated `*ExceptionData`/`*Error` DTOs; disabled it (the build treats lint warnings as errors).
    
    Also removes the unused Windows Docker images (`win_amd64.Dockerfile`, `win_amd64_build.Dockerfile`) — Windows CI runs on tagged `windows-64` runners, not a Docker image.
    
    Validation: built `linux_amd64.Dockerfile` + `linux_amd64_build.Dockerfile` locally on 22.04 — Node 24 / npm 11, the N-API addon under gcc-11, and a jammy probe (Firefox / Python 3.8 / Swift) all pass; the full `gulp build`/`test` is being re-run to confirm after the clang-tidy fix. These images must be rebuilt and pushed per `images/README.md` to take effect — MR CI uses the existing registry images, so it won't exercise these Dockerfiles.
    
    Closes ZML-1166
    
    See merge request software-public/zaber-motion-lib!1749
    5dcbf1ea
  • Martin Zak's avatar
  • Martin Zak's avatar
    Merge branch 'ZL-1903-list-serial-ports-details' into 'master' · 379ec977
    Martin Zak authored
    ZL-1903: add Tools.listSerialPortsDetails listing serial ports with USB info
    
    ## What
    
    Adds `Tools.listSerialPortsDetails()` — lists **all** serial ports on the computer, each as a `SerialPortDetails` with its name and, for USB-backed ports, the USB vendor/product IDs.
    
    ```ts
    Tools.listSerialPortsDetails(): SerialPortDetails[]
    
    class SerialPortDetails {
      name: string;                       // "COM5" (Windows), "/dev/ttyUSB0" (Linux), ...
      usbInfo: SerialPortUsbInfo | null;  // null when the port is not a USB device
    }
    class SerialPortUsbInfo {
      vendorId: number;   // USB VID, e.g. 0x2939 -> 10553
      productId: number;  // USB PID, e.g. 0x49E1 -> 18913
    }
    ```
    
    Non-USB ports are included with `usbInfo == null`. VID/PID are integers.
    
    ## Why
    
    Part of [ZL-1903](https://youtrack.izaber.com/issue/ZL-1903) (speed up X-MCC USB/Ethernet connections). Lets a caller (e.g. Zaber Launcher) recognize which serial ports are USB-connected Zaber devices and apply the single-device connection speed-up.
    
    ## How
    
    - Go core handler reuses go-serial's cross-platform `enumerator.GetDetailedPortsList()` (`internal/tools/serial_ports.go`, alongside `listSerialPorts`). Because the gateway is built with CGO, this works on Windows, Linux and macOS with **no new native code**. Wasm gets a stub.
    - New public DTOs `SerialPortDetails` + `SerialPortUsbInfo`; new route `tools/list_serial_ports_details`.
    - Bumps `go-serial` to `v0.0.0-20260624150618`.
    - Bindings regenerated for all languages (`npx gulp gen_code`).
    
    ## Verification
    
    Verified end-to-end against real hardware on **all three desktop platforms**. Go core compiles + lints clean; wasm builds; the `js/test-e2e/tools.test.ts` jest e2e passes.
    
    -  **Windows**: COM5 → Zaber X-MCC (`usbInfo` **VID 0x2939 / PID 0x49E1**), COM3 → FTDI (0x0403 / 0x6001), through the JS binding.
    -  **Linux**: serial ports enumerated with correct `usbInfo` via go-serial `usb_linux.go` (sysfs).
    -  **macOS**: serial ports enumerated with correct `usbInfo` via go-serial `usb_darwin.go` (IOKit).
    
    ## Notes
    
    - Supersedes !1745 (the flat `listSerialPortsUsbInfo` design), now closed.
    
    See merge request software-public/zaber-motion-lib!1750
    379ec977
  • Silviu Toderita's avatar
    adds init py for movement module · 18a2ad2b
    Silviu Toderita authored
    18a2ad2b
  • Silviu Toderita's avatar
    Merge branch 'add-init-py-for-movement' into 'master' · e7768544
    Silviu Toderita authored
    adds init py for movement module
    
    
    See merge request software-public/zaber-motion-lib!1753
    e7768544
  • Martin Zak's avatar
    cb4f2917
  • Martin Zak's avatar
    Merge branch 'ZML-1166-python-manylinux-glibc-2-35' into 'master' · 6ed59bd0
    Martin Zak authored
    ZML-1166: bump Python wheel manylinux tag to glibc 2.35
    
    ## Summary
    Bumps the Linux wheel platform tag in `py/tasks.py` from `manylinux_2_27` to `manylinux_2_35` so the declared glibc floor matches the build image.
    
    ## Why
    ZML-1166 moved the Linux build images to Ubuntu 22.04 (glibc 2.35), but the wheel platform tag was left at `manylinux_2_27`. The `.so` bindings are compiled in that image, so the manylinux floor should match the image's glibc instead of under-declaring it.
    
    ## Validation
    Rebuilt `images/linux_amd64.Dockerfile` locally and confirmed from inside the container:
    - `ldd --version` / `getconf GNU_LIBC_VERSION` → glibc **2.35** (Ubuntu 22.04.5)
    - `packaging.tags.platform_tags()` includes `manylinux_2_35_x86_64`, so the guard at `py/tasks.py:79-80` passes.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    See merge request software-public/zaber-motion-lib!1755
    6ed59bd0
  • Martin Zak's avatar
    ZL-1966: remove 32-bit ARM (linux/arm) build support · 7abfb04c
    Martin Zak authored
    Removes the linux/arm (armhf) build target across the toolchain: gulp build/publish tasks, the prebuild_linux_arm and build_linux_arm CI jobs, the linux_arm Docker image, and the arm branches in the C#, Java, C++, JS, and Python native-library loaders. 32-bit ARM now raises an explicit unsupported ImportError in the Python loaders.
    
    Follows ZML-1166 (Node 24 dropped armhf, so the linux_arm image can no longer be built).
    
    Co-Authored-By: default avatarClaude Opus 4.8 (1M context) <noreply@anthropic.com>
    7abfb04c
  • Martin Zak's avatar
    Merge branch 'test-ZL-1966-remove-arm32-build' into 'master' · 976a32fe
    Martin Zak authored
    ZL-1966: remove 32-bit ARM (linux/arm) build support
    
    Removes the linux/arm (armhf) build target everywhere: gulp tasks, the prebuild_linux_arm/build_linux_arm CI jobs, the linux_arm Docker image, and the C#/Java/C++/JS/Python loaders. 32-bit ARM now raises an explicit unsupported error in Python. Test-prefixed branch so the MR pipeline runs the full matrix (arm64, win-arm64, macOS). Follows ZML-1166 (Node 24 has no armhf build).
    
    Related to ZL-1966
    
    See merge request software-public/zaber-motion-lib!1756
    976a32fe
  • Martin Zak's avatar
  • Martin Zak's avatar
    Merge branch 'zl-1116-get-many-by-type-missing-values' into 'master' · 1c8aff8d
    Martin Zak authored
    ZL-1116: represent missing settings as missing values in multi-get
    
    * GetManyByType gets optional values for string/int/bool.
    * GetMany no longer throws CommandFailed (BADCOMMAND, DEVICEONLY) - instead returns NaN.
    * Improvements to documentation.
    
    Related to zl-1116
    
    See merge request software-public/zaber-motion-lib!1754
    1c8aff8d
  • Martin Zak's avatar
  • Martin Zak's avatar
    Merge branch 'ZML-1158-seal-classes-managing-resources' into 'master' · 8ff458ef
    Martin Zak authored
    ZML-1158: seal resource-managing classes to prevent inheritance
    
    Seals the 9 classes that own a native Go-side resource so user code cannot subclass them, preventing lifecycle bugs (cf. ZML-1150), API confusion, and breakage when internals are refactored.
    
    Sealed: `ascii.Connection`, `binary.Connection`, `Moveable`, `Transport`, `OscilloscopeData`, `WdiAutofocusProvider`, `gcode.Translator`, `gcode.OfflineTranslator`, `Ge1xGripper`.
    
    A single `isSealedClass()` helper (`def.resource != null`) drives each language's class template:
    
    - **TS/JS**: `private constructor` (pure compile-time, no runtime check). `OscilloscopeData` keeps an `@internal` `_create()` factory because it is constructed by `Oscilloscope` rather than its own static factory.
    - **Python**: `@final` + `__init_subclass__` raising `TypeError`.
    - **C#**: `sealed`. The `IDisposable` pattern's `Dispose(bool)`/`DisposeAsyncCore()` become `private` (a sealed class cannot declare `virtual` members — CS0549).
    - **Java** / **C++**: `final` (C++ on the derived `Connection`, not `BaseConnection`).
    - **MATLAB**: `(Sealed)`. Swift was already `public final class`.
    
    Also tidies the C# class-declaration builder (dedups the repeated declaration string).
    
    The commits are split so the generated bindings are separate from the template/logic changes, keeping the reviewable diff small.
    
    **Breaking change** (tag: `Breaking`): the public constructors of these classes become inaccessible. The audit found zero real subclassers — users construct via factories (`Connection.openTcp`, etc.), so real-world impact is expected to be nil.
    
    Closes ZML-1158
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    See merge request software-public/zaber-motion-lib!1757
    8ff458ef
  • Martin Zak's avatar
    b91d35b4
  • Martin Zak's avatar
    Merge branch 'ZML-1178-move-sin-documentation-is-wrong-about-units' into 'master' · b1c2bb42
    Martin Zak authored
    ZML-1178: fix moveSin period documentation (wrong units)
    
    Fixes the `moveSin` documentation for `Axis` and `Lockstep`. The `period` parameter description incorrectly claimed the value is in milliseconds, but `moveSin` has a separate `periodUnits` parameter that determines the units.
    
    **Root cause:** the `period` param description in the `moveSin` API definition (`templates/src/templates/definitions/axis.ts`) hard-coded "in milliseconds". Because `lockstep.ts` reuses the same `moveSinFunctions.moveSin` definition, both `Axis.moveSin` and `Lockstep.moveSin` were affected across all languages.
    
    **Fix:** changed the description to "Period of the sinusoidal motion." and regenerated the language bindings. The change is doc-comment-only — no signatures or behaviour changed.
    
    Closes ZML-1178
    
    See merge request software-public/zaber-motion-lib!1759
    b1c2bb42
  • Martin Zak's avatar
    Release v10.0.0 · a8d3f212
    Martin Zak authored
    Co-Authored-By: default avatarClaude Fable 5 <noreply@anthropic.com>
    a8d3f212
Loading
Loading