nanonis_rs/lib.rs
1//! # nanonis-rs
2//!
3//! A Rust client library for communicating with Nanonis SPM systems via TCP.
4//!
5//! ## Quick Start
6//!
7//! ```no_run
8//! use nanonis_rs::{NanonisClient, NanonisError};
9//!
10//! fn main() -> Result<(), NanonisError> {
11//! let mut client = NanonisClient::new("192.168.1.100", 6501)?;
12//!
13//! // Get current bias voltage
14//! let bias = client.bias_get()?;
15//! println!("Current bias: {} V", bias);
16//!
17//! // Set new bias voltage
18//! client.bias_set(0.5)?;
19//!
20//! Ok(())
21//! }
22//! ```
23//!
24//! ## Usage Pattern
25//!
26//! All instrument control is done through [`NanonisClient`]. Import types
27//! from domain modules only when needed:
28//!
29//! ```no_run
30//! use nanonis_rs::{NanonisClient, NanonisError};
31//! use nanonis_rs::motor::{MotorDirection, MotorGroup};
32//! use nanonis_rs::scan::ScanFrame;
33//!
34//! fn main() -> Result<(), NanonisError> {
35//! let mut client = NanonisClient::new("192.168.1.100", 6501)?;
36//!
37//! // Motor control
38//! client.motor_start_move(MotorDirection::ZPlus, 100u16, MotorGroup::Group1, true)?;
39//!
40//! // Scan control
41//! let frame = client.scan_frame_get()?;
42//! println!("Scan center: ({}, {})", frame.center.x, frame.center.y);
43//!
44//! Ok(())
45//! }
46//! ```
47//!
48//! ## Streaming Data
49//!
50//! For continuous data acquisition, use [`TCPLoggerStream`]:
51//!
52//! ```no_run
53//! use nanonis_rs::TCPLoggerStream;
54//!
55//! let mut stream = TCPLoggerStream::new("192.168.1.100", 6502)?;
56//! let frame = stream.read_frame()?;
57//! println!("Got {} channels", frame.data.len());
58//! # Ok::<(), Box<dyn std::error::Error>>(())
59//! ```
60
61// Internal modules
62mod client;
63mod error;
64mod protocol;
65mod tcplogger_stream;
66mod types;
67
68// ==================== Public API ====================
69
70pub use error::NanonisError;
71pub use client::{NanonisClient, NanonisClientBuilder, ConnectionConfig};
72pub use tcplogger_stream::TCPLoggerStream;
73
74// Re-export commonly used types from the internal types module
75pub use types::{NanonisValue, Position};
76
77// ==================== Domain Type Modules ====================
78//
79// Import types from these modules as needed.
80
81/// Motor control types.
82///
83/// ```
84/// use nanonis_rs::motor::{MotorDirection, MotorGroup, MotorAxis};
85/// ```
86pub mod motor {
87 pub use crate::client::motor::*;
88}
89
90/// Scan control types.
91///
92/// ```
93/// use nanonis_rs::scan::{ScanFrame, ScanAction, ScanDirection};
94/// ```
95pub mod scan {
96 pub use crate::client::scan::*;
97}
98
99/// Bias control types.
100///
101/// ```
102/// use nanonis_rs::bias::PulseMode;
103/// ```
104pub mod bias {
105 pub use crate::client::bias::*;
106}
107
108/// Bias spectroscopy types.
109///
110/// ```
111/// use nanonis_rs::bias_spectr::{BiasSpectrPropsBuilder, OptionalFlag};
112/// ```
113pub mod bias_spectr {
114 pub use crate::client::bias_spectr::*;
115}
116
117/// Z-controller types.
118///
119/// ```
120/// use nanonis_rs::z_ctrl::{ZControllerHold, ZControllerStatus};
121/// ```
122pub mod z_ctrl {
123 pub use crate::client::z_ctrl::*;
124}
125
126/// Oscilloscope types.
127///
128/// ```
129/// use nanonis_rs::oscilloscope::{TriggerMode, TriggerSlope, OsciData};
130/// ```
131pub mod oscilloscope {
132 pub use crate::client::oscilloscope::*;
133}
134
135/// Signal management types.
136///
137/// ```
138/// use nanonis_rs::signals::SignalIndex;
139/// ```
140pub mod signals {
141 pub use crate::client::signals::*;
142}
143
144/// Lock-in amplifier types.
145pub mod lockin {
146 pub use crate::client::lockin::*;
147}
148
149/// Piezo control types.
150pub mod piezo {
151 pub use crate::client::piezo::*;
152}
153
154/// User output types.
155pub mod user_out {
156 pub use crate::client::user_out::*;
157}
158
159/// TCP logger types.
160pub mod tcplog {
161 pub use crate::client::tcplog::*;
162}
163
164/// PLL (Phase-Locked Loop) types.
165pub mod pll {
166 pub use crate::client::pll::*;
167}
168
169/// Generic sweep types.
170pub mod gen_swp {
171 pub use crate::client::gen_swp::*;
172}
173
174/// High-speed sweep types.
175pub mod hs_swp {
176 pub use crate::client::hs_swp::*;
177}
178
179/// Pattern types.
180pub mod pattern {
181 pub use crate::client::pattern::*;
182}
183
184/// Follow-me types.
185pub mod folme {
186 pub use crate::client::folme::*;
187}
188
189/// Atom tracking types.
190pub mod atom_track {
191 pub use crate::client::atom_track::*;
192}
193
194/// Kelvin controller types.
195pub mod kelvin_ctrl {
196 pub use crate::client::kelvin_ctrl::*;
197}
198
199/// Spectrum analyzer types.
200pub mod spectrum_anlzr {
201 pub use crate::client::spectrum_anlzr::*;
202}
203
204/// PLL signal analyzer types.
205pub mod pll_signal_anlzr {
206 pub use crate::client::pll_signal_anlzr::*;
207}
208
209/// Generic PI controller types.
210pub mod gen_pi_ctrl {
211 pub use crate::client::gen_pi_ctrl::*;
212}
213
214/// Marks types.
215pub mod marks {
216 pub use crate::client::marks::*;
217}
218
219/// Data logging types.
220pub mod data_log {
221 pub use crate::client::data_log::*;
222}
223
224/// Script types.
225pub mod script {
226 pub use crate::client::script::*;
227}
228
229/// Interferometer types.
230pub mod interf {
231 pub use crate::client::interf::*;
232}
233
234/// Beam deflection types.
235pub mod beam_defl {
236 pub use crate::client::beam_defl::*;
237}
238
239/// OC sync types.
240pub mod oc_sync {
241 pub use crate::client::oc_sync::*;
242}
243
244/// Digital lines types.
245pub mod dig_lines {
246 pub use crate::client::dig_lines::*;
247}
248
249/// PI controller types.
250pub mod pi_ctrl {
251 pub use crate::client::pi_ctrl::*;
252}
253
254/// Lock-in frequency sweep types.
255pub mod lockin_freq_swp {
256 pub use crate::client::lockin_freq_swp::*;
257}
258
259/// Signal chart types.
260pub mod signal_chart {
261 pub use crate::client::signal_chart::*;
262}
263
264/// Tip recovery types.
265pub mod tip_recovery {
266 pub use crate::client::tip_recovery::*;
267}
268
269/// CPD compensation types.
270pub mod cpd_comp {
271 pub use crate::client::cpd_comp::*;
272}
273
274/// Z spectroscopy types.
275pub mod z_spectr {
276 pub use crate::client::z_spectr::*;
277}
278
279/// Utility types.
280pub mod util {
281 pub use crate::client::util::*;
282}