Skip to content

feat(curiox): Curiox HT2000 plate washer - #1179

Merged
rickwierenga merged 5 commits into
v1b1from
feat/curiox-ht2000
Jul 22, 2026
Merged

feat(curiox): Curiox HT2000 plate washer#1179
rickwierenga merged 5 commits into
v1b1from
feat/curiox-ht2000

Conversation

@rickwierenga

@rickwierenga rickwierenga commented Jul 22, 2026

Copy link
Copy Markdown
Member

Adds a CurioxHT2000 driver for the Curiox Laminar Wash HT2000 system, a benchtop Laminar Wash station for DropArray plates (legacy device, succeeded by the HT2100).

Transport

Serial, 115200 8-N-1. Commands are short ASCII payloads wrapped in a fixed binary frame (FF FF FF FF FF 01 + length + payload + 16-bit checksum + FF); replies are fixed-length and carry a status digit.

Public API

  • setup() / stop()
  • ping() -> (status, mode, error); enquire_report() -> StatusReport
  • move_tray_out() / move_tray_in() -- idempotent: they read the current tray position, move only if needed, and confirm the result (the raw non-idempotent toggle stays private)
  • prime(mode="standard") -- "standard" / "head" / "pump" / "short"
  • wash(wash_number, initial_volume, flow_rate, channel, max_operation_duration) -- uploads parameters, starts the cycle, and polls until the wash completes (instrument returns to ready), raising on stop / plate loss / error / timeout
  • drain_aspirator(), drain_spill_tray(), home()

The public API exposes no non-idempotent commands. Statuses, modes, and tray positions are lowercase string literals ("ready", "operation", "in", ...) rather than enums.

Included

  • Unit tests: byte-exact frame packing, protocol decode, idempotent tray behavior, wash cycle completion, and parameter validation
  • API docs and a hello-world tutorial notebook

Not verified

Has NOT been tested against hardware -- setup() logs a warning. The protocol was reconstructed from the vendor software. Two items to confirm on hardware: the fixed 15-char trailer in the wash-parameter upload, and that wash()'s ready-after-busy heuristic matches true cycle end.

🤖 Generated with Claude Code

rickwierenga and others added 5 commits July 21, 2026 17:46
Serial (115200 8-N-1) driver for the Curiox HT2000 DropArray plate washer:
binary-framed ASCII command protocol with 16-bit checksum and fixed-length
status replies. Supports wash (with parameter upload, waiting for cycle
completion), the four prime routines, tray toggle, aspirator/spill-tray drain,
home, and status/report polling.

Includes unit tests (byte-exact frame + protocol decode), API docs, and a
hello-world tutorial. Not yet hardware-tested; setup() logs a warning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the public toggle_tray with idempotent move_tray_out/move_tray_in that
read the current tray position, move only if needed, and confirm the result.
The raw toggle primitive is now private (_toggle_tray) so the public API has no
non-idempotent commands. Update tests and the tutorial to match.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the PrimeMode enum with a Literal["standard","head","pump","short"]
mapped to command codes via PRIME_COMMANDS. Correct the product name to Curiox
Laminar Wash HT2000, and split the tutorial's load-a-plate into separate
tray-out and tray-in steps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the HT2000Status, HT2000Mode, and TrayPosition enums with lowercase
Literal string aliases, decoded via a digit-indexed tuple. The driver is now
enum-free; comparisons use ==. Update tests and the API reference.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rickwierenga
rickwierenga merged commit db04b24 into v1b1 Jul 22, 2026
1 of 19 checks passed
@rickwierenga
rickwierenga deleted the feat/curiox-ht2000 branch July 22, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant