Tags: gotmc/ivi
Tags
Remove Close() from Transport interface The IVI driver does not own the transport connection — the caller created it and is responsible for closing it. Remove Close() from the Transport interface so that Inherent.Close() only sends the local control command (SYST:LOC or instrument-specific equivalent) without closing the underlying connection. This fixes the issue where sending the local control command and immediately closing the TCP connection could race on instruments like the Keysight 33500B, where returning to local mode disconnects the remote interface. Callers should defer dev.Close() for the transport and defer driver.Close() for the IVI local control, in that order. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix key33000 compound SCPI commands for multi-channel instruments Semicolon-separated SCPI commands like "BURS:MODE TRIG;STAT ON" break when a SOURce[1|2]: channel prefix is prepended — the second part after the semicolon loses the channel prefix. Send each command separately with the full channel prefix instead. Fixes SetOperationMode, SetStandardWaveform, and ConfigureStandardWaveform for Triangle, RampUp, and RampDown waveforms on multi-channel 33500B/33600A instruments. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove context.Context from dmm, dcpwr, scope, specan, swtch, dsa, an… …d load interfaces Complete the context removal across all remaining IVI class interfaces and their driver implementations. Each driver now manages timeouts internally via timeout fields and newContext() helpers, matching the pattern established for fgen in v0.24.0. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove context.Context from IVI interfaces and driver constructors IVI driver methods no longer accept context.Context. Instead, each driver manages timeouts internally using a configurable default (ivi.DefaultTimeout = 10s). Users can override with ivi.WithTimeout(). The Transport interface remains context-aware — context is created internally by each driver method via newContext() helpers. This reflects the reality that "cancellation" in the underlying transports (TCP deadlines, USB timeouts, serial read timeouts) is just timeout manipulation, not true preemption. Changes: - Add Timeout field to DriverConfig and WithTimeout() option - Add timeout parameter to NewInherent(); defaults to DefaultTimeout - Remove ctx from Inherent methods (CheckID, Reset, Clear, Disable, etc.) - Remove ctx from all fgen interfaces (Base, StdFunc, ArbWfm, Trigger, StartTrigger, IntTrigger, Burst) - Remove ctx from New() constructors across all 12 drivers - Add timeout field and newContext() helpers to fgen drivers (key33220, key33000, ds345) - Update all test files Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename Instrument to Transport and update method signatures Rename ivi.Instrument interface to ivi.Transport to better reflect that it represents the transport layer abstraction. Replace ReadContext/ WriteContext with ReadBinary/WriteBinary to clearly distinguish binary data transfers from ASCII command/query operations. Update all drivers, channel types, and test mocks across the codebase. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Refactor driver constructors to use functional options instead of boo… …l params Replace positional bool parameters (idQuery, reset, standalone) with variadic ivi.DriverOption functional options for self-documenting call sites. Add options.go with shared DriverOption type, DriverConfig, and WithIDQuery/WithReset/WithStandalone constructors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix U2751A channel accessor bugs
- ChannelByID: off-by-one in bounds check (> vs >=) would panic when
id == len(d.channels)
- Channel and ChannelByID: return nil instead of &Channel{} on error,
consistent with all other drivers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simplify Disable to best-effort SYST:LOC without fallback Replace the fragile SYST:LOC/SYSTem:LOCal fallback with a single best-effort command. The short and long SCPI forms are equivalent per IEEE 488.2, so the fallback was meaningless. Errors are now intentionally ignored since not all instruments support local control and failure should not prevent closing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PreviousNext