Skip to main content

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}