feat(curiox): Curiox HT2000 plate washer - #1179
Merged
Merged
Conversation
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>
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.
Adds a
CurioxHT2000driver 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()->StatusReportmove_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 / timeoutdrain_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
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 thatwash()'s ready-after-busy heuristic matches true cycle end.🤖 Generated with Claude Code