Skip to main content

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}