Skip to main content

instrument/
lib.rs

1//! High-level instrument discovery and typed IVI-inspired classes.
2//!
3//! # Quick start (mock, no VISA)
4//!
5//! ```no_run
6//! use instrument::prelude::*;
7//!
8//! let fixture = ScriptedFixture::builder()
9//!     .idn("Acme", "DMM1", "SN1", "1.0")
10//!     .kinds([InstrumentKind::Dmm])
11//!     .on_query(":MEAS:VOLT:DC?", "1.0")
12//!     .build();
13//! let catalog = DeviceCatalog::from_fixture("mock://dmm", fixture)?;
14//! # Ok::<(), instrument::Error>(())
15//! ```
16//!
17//! # Quick start (hardware)
18//!
19//! Requires the `visa` feature (enabled by default).
20//!
21//! ```ignore
22//! use instrument::prelude::*;
23//! let catalog = Discovery::visa()?.scan()?;
24//! ```
25//!
26//! # Quick start (async mock, `tokio` feature)
27//!
28//! ```ignore
29//! use instrument::prelude::*;
30//!
31//! #[tokio::main]
32//! async fn main() -> Result<()> {
33//!     let fixture = ScriptedFixture::builder()
34//!         .idn("Acme", "DMM1", "SN1", "1.0")
35//!         .kinds([InstrumentKind::Dmm])
36//!         .on_query(":MEAS:VOLT:DC?", "1.0")
37//!         .build();
38//!     let catalog = AsyncDeviceCatalog::from_fixture("mock://dmm", fixture).await?;
39//!     let mut dmm = catalog.open_dmm("mock://dmm").await?;
40//!     println!("{} V", dmm.measure_voltage_dc(None).await?);
41//!     Ok(())
42//! }
43//! ```
44//!
45//! See [README](https://github.com/josh-hemphill/instrument-components-rs/blob/main/README.md),
46//! [getting started](https://github.com/josh-hemphill/instrument-components-rs/blob/main/docs/getting-started.md),
47//! and [async guide](https://github.com/josh-hemphill/instrument-components-rs/blob/main/docs/async.md).
48
49pub mod catalog;
50pub mod device;
51pub mod discovery;
52pub mod mock_backend;
53pub mod prelude;
54
55#[cfg(feature = "tokio")]
56pub mod async_catalog;
57#[cfg(feature = "tokio")]
58pub mod async_device;
59#[cfg(feature = "tokio")]
60pub mod async_discovery;
61
62pub mod classes {
63    pub mod dc_psu;
64    pub mod dmm;
65    pub mod fgen;
66
67    #[cfg(feature = "tokio")]
68    pub mod async_dc_psu;
69    #[cfg(feature = "tokio")]
70    pub mod async_dmm;
71    #[cfg(feature = "tokio")]
72    pub mod async_fgen;
73
74    pub use dc_psu::DcPowerSupply;
75    pub use dmm::Dmm;
76    pub use fgen::FunctionGenerator;
77
78    #[cfg(feature = "tokio")]
79    pub use async_dc_psu::AsyncDcPowerSupply;
80    #[cfg(feature = "tokio")]
81    pub use async_dmm::AsyncDmm;
82    #[cfg(feature = "tokio")]
83    pub use async_fgen::AsyncFunctionGenerator;
84}
85
86pub use catalog::DeviceCatalog;
87pub use device::DeviceRef;
88pub use discovery::Discovery;
89pub use instrument_core::{
90    self, AccessMode, CommsEvent, CommsEventKind, CommsObserver, ConnectOptions, DeviceHealth,
91    DeviceId, Diagnostics, DiscoveredDevice, Error, Idn, InstrumentKind, InstrumentSession,
92    MockTransport, ProbePolicy, ResourceAddress, Result, ScpiSession, ScriptedFixture, SessionPool,
93    Transport, TransportIdentity,
94};
95
96#[cfg(feature = "tokio")]
97pub use async_catalog::AsyncDeviceCatalog;
98#[cfg(feature = "tokio")]
99pub use async_device::AsyncDeviceRef;
100#[cfg(feature = "tokio")]
101pub use async_discovery::AsyncDiscovery;
102
103#[cfg(feature = "tokio")]
104pub use instrument_core::{
105    AsyncInstrumentSession, AsyncScpiSession, AsyncSessionOpener, AsyncSessionPool, AsyncTransport,
106    DynAsyncTransport,
107};
108
109#[cfg(all(feature = "visa", feature = "tokio"))]
110pub use instrument_visa::{InstrumentTokioAdapter, VisaAsyncSessionOpener, VisaAsyncTransport};
111
112#[cfg(feature = "visa")]
113pub use instrument_visa::{SharedRm, VisaEnumerator, VisaSessionOpener};