nanonis_rs/client/oscilloscope/
osci_1t.rs1use super::super::NanonisClient;
2use crate::error::NanonisError;
3use crate::types::NanonisValue;
4
5impl NanonisClient {
6 pub fn osci1t_ch_set(&mut self, channel_index: i32) -> Result<(), NanonisError> {
9 self.quick_send(
10 "Osci1T.ChSet",
11 vec![NanonisValue::I32(channel_index)],
12 vec!["i"],
13 vec![],
14 )?;
15 Ok(())
16 }
17
18 pub fn osci1t_ch_get(&mut self) -> Result<i32, NanonisError> {
21 let result = self.quick_send("Osci1T.ChGet", vec![], vec![], vec!["i"])?;
22 match result.first() {
23 Some(value) => Ok(value.as_i32()?),
24 None => Err(NanonisError::Protocol(
25 "No channel index returned".to_string(),
26 )),
27 }
28 }
29
30 pub fn osci1t_timebase_set(
33 &mut self,
34 timebase_index: i32,
35 ) -> Result<(), NanonisError> {
36 self.quick_send(
37 "Osci1T.TimebaseSet",
38 vec![NanonisValue::I32(timebase_index)],
39 vec!["i"],
40 vec![],
41 )?;
42 Ok(())
43 }
44
45 pub fn osci1t_timebase_get(&mut self) -> Result<(i32, Vec<f32>), NanonisError> {
48 let result = self.quick_send(
49 "Osci1T.TimebaseGet",
50 vec![],
51 vec![],
52 vec!["i", "i", "*f"],
53 )?;
54 if result.len() >= 3 {
55 let timebase_index = result[0].as_i32()?;
56 let timebases = result[2].as_f32_array()?.to_vec();
57 Ok((timebase_index, timebases))
58 } else {
59 Err(NanonisError::Protocol(
60 "Invalid timebase response".to_string(),
61 ))
62 }
63 }
64
65 pub fn osci1t_trig_set(
69 &mut self,
70 trigger_mode: u16,
71 trigger_slope: u16,
72 trigger_level: f64,
73 trigger_hysteresis: f64,
74 ) -> Result<(), NanonisError> {
75 self.quick_send(
76 "Osci1T.TrigSet",
77 vec![
78 NanonisValue::U16(trigger_mode),
79 NanonisValue::U16(trigger_slope),
80 NanonisValue::F64(trigger_level),
81 NanonisValue::F64(trigger_hysteresis),
82 ],
83 vec!["H", "H", "d", "d"],
84 vec![],
85 )?;
86 Ok(())
87 }
88
89 pub fn osci1t_trig_get(&mut self) -> Result<(u16, u16, f64, f64), NanonisError> {
92 let result = self.quick_send(
93 "Osci1T.TrigGet",
94 vec![],
95 vec![],
96 vec!["H", "H", "d", "d"],
97 )?;
98 if result.len() >= 4 {
99 let trigger_mode = result[0].as_u16()?;
100 let trigger_slope = result[1].as_u16()?;
101 let trigger_level = result[2].as_f64()?;
102 let trigger_hysteresis = result[3].as_f64()?;
103 Ok((
104 trigger_mode,
105 trigger_slope,
106 trigger_level,
107 trigger_hysteresis,
108 ))
109 } else {
110 Err(NanonisError::Protocol(
111 "Invalid trigger configuration response".to_string(),
112 ))
113 }
114 }
115
116 pub fn osci1t_run(&mut self) -> Result<(), NanonisError> {
118 self.quick_send("Osci1T.Run", vec![], vec![], vec![])?;
119 Ok(())
120 }
121
122 pub fn osci1t_data_get(
126 &mut self,
127 data_to_get: u16,
128 ) -> Result<(f64, f64, i32, Vec<f64>), NanonisError> {
129 let result = self.quick_send(
130 "Osci1T.DataGet",
131 vec![NanonisValue::U16(data_to_get)],
132 vec!["H"],
133 vec!["d", "d", "i", "*d"],
134 )?;
135
136 if result.len() >= 4 {
137 let t0 = result[0].as_f64()?;
138 let dt = result[1].as_f64()?;
139 let size = result[2].as_i32()?;
140 let data = result[3].as_f64_array()?.to_vec();
141 Ok((t0, dt, size, data))
142 } else {
143 Err(NanonisError::Protocol(
144 "Invalid oscilloscope 1T data response".to_string(),
145 ))
146 }
147 }
148}