nanonis_rs/client/signal_chart.rs
1use super::NanonisClient;
2use crate::error::NanonisError;
3use crate::types::NanonisValue;
4
5/// Signal chart channel configuration.
6#[derive(Debug, Clone, Copy, Default)]
7pub struct SignalChartChannels {
8 /// Channel A signal index (-1 for none)
9 pub channel_a_index: i32,
10 /// Channel B signal index (-1 for none)
11 pub channel_b_index: i32,
12}
13
14impl NanonisClient {
15 /// Open the signal chart module.
16 ///
17 /// This opens the signal chart interface in the Nanonis software.
18 ///
19 /// # Errors
20 /// Returns `NanonisError` if communication fails.
21 ///
22 /// # Examples
23 /// ```no_run
24 /// use nanonis_rs::NanonisClient;
25 ///
26 /// let mut client = NanonisClient::new("127.0.0.1", 6501)?;
27 /// client.signal_chart_open()?;
28 /// # Ok::<(), Box<dyn std::error::Error>>(())
29 /// ```
30 pub fn signal_chart_open(&mut self) -> Result<(), NanonisError> {
31 self.quick_send("SignalChart.Open", vec![], vec![], vec![])?;
32 Ok(())
33 }
34
35 /// Set the signal chart channels.
36 ///
37 /// Sets the signal indices for channels A and B in the signal chart.
38 /// Use -1 to disable a channel.
39 ///
40 /// # Arguments
41 /// * `channels` - A [`SignalChartChannels`] struct with channel indices
42 ///
43 /// # Errors
44 /// Returns `NanonisError` if communication fails.
45 ///
46 /// # Examples
47 /// ```no_run
48 /// use nanonis_rs::NanonisClient;
49 /// use nanonis_rs::signal_chart::SignalChartChannels;
50 ///
51 /// let mut client = NanonisClient::new("127.0.0.1", 6501)?;
52 /// let channels = SignalChartChannels {
53 /// channel_a_index: 0, // First signal
54 /// channel_b_index: 1, // Second signal
55 /// };
56 /// client.signal_chart_chs_set(&channels)?;
57 /// # Ok::<(), Box<dyn std::error::Error>>(())
58 /// ```
59 pub fn signal_chart_chs_set(
60 &mut self,
61 channels: &SignalChartChannels,
62 ) -> Result<(), NanonisError> {
63 self.quick_send(
64 "SignalChart.ChsSet",
65 vec![
66 NanonisValue::I32(channels.channel_a_index),
67 NanonisValue::I32(channels.channel_b_index),
68 ],
69 vec!["i", "i"],
70 vec![],
71 )?;
72 Ok(())
73 }
74
75 /// Get the signal chart channels.
76 ///
77 /// Returns the current signal indices for channels A and B.
78 ///
79 /// # Returns
80 /// A [`SignalChartChannels`] struct with current channel indices.
81 ///
82 /// # Errors
83 /// Returns `NanonisError` if communication fails.
84 ///
85 /// # Examples
86 /// ```no_run
87 /// use nanonis_rs::NanonisClient;
88 ///
89 /// let mut client = NanonisClient::new("127.0.0.1", 6501)?;
90 /// let channels = client.signal_chart_chs_get()?;
91 /// println!("Channel A: {}, Channel B: {}", channels.channel_a_index, channels.channel_b_index);
92 /// # Ok::<(), Box<dyn std::error::Error>>(())
93 /// ```
94 pub fn signal_chart_chs_get(&mut self) -> Result<SignalChartChannels, NanonisError> {
95 let result = self.quick_send("SignalChart.ChsGet", vec![], vec![], vec!["i", "i"])?;
96
97 if result.len() >= 2 {
98 Ok(SignalChartChannels {
99 channel_a_index: result[0].as_i32()?,
100 channel_b_index: result[1].as_i32()?,
101 })
102 } else {
103 Err(NanonisError::Protocol("Invalid response".to_string()))
104 }
105 }
106}