nanonis_rs/client/laser.rs
1use super::NanonisClient;
2use crate::error::NanonisError;
3use crate::types::NanonisValue;
4
5impl NanonisClient {
6 // ==================== Laser ====================
7
8 /// Switch the laser on or off.
9 ///
10 /// # Arguments
11 /// * `on` - True to enable, false to disable
12 ///
13 /// # Errors
14 /// Returns `NanonisError` if communication fails.
15 pub fn laser_on_off_set(&mut self, on: bool) -> Result<(), NanonisError> {
16 self.quick_send(
17 "Laser.OnOffSet",
18 vec![NanonisValue::U32(if on { 1 } else { 0 })],
19 vec!["I"],
20 vec![],
21 )?;
22 Ok(())
23 }
24
25 /// Get the laser status.
26 ///
27 /// # Returns
28 /// True if laser is on.
29 ///
30 /// # Errors
31 /// Returns `NanonisError` if communication fails.
32 pub fn laser_on_off_get(&mut self) -> Result<bool, NanonisError> {
33 let result = self.quick_send("Laser.OnOffGet", vec![], vec![], vec!["I"])?;
34
35 Ok(result[0].as_u32()? != 0)
36 }
37
38 /// Set the laser setpoint.
39 ///
40 /// # Arguments
41 /// * `setpoint` - Laser setpoint value
42 ///
43 /// # Errors
44 /// Returns `NanonisError` if communication fails.
45 pub fn laser_props_set(&mut self, setpoint: f32) -> Result<(), NanonisError> {
46 self.quick_send(
47 "Laser.PropsSet",
48 vec![NanonisValue::F32(setpoint)],
49 vec!["f"],
50 vec![],
51 )?;
52 Ok(())
53 }
54
55 /// Get the laser setpoint.
56 ///
57 /// # Returns
58 /// Laser setpoint value.
59 ///
60 /// # Errors
61 /// Returns `NanonisError` if communication fails.
62 pub fn laser_props_get(&mut self) -> Result<f32, NanonisError> {
63 let result = self.quick_send("Laser.PropsGet", vec![], vec![], vec!["f"])?;
64
65 result[0].as_f32()
66 }
67
68 /// Get the current laser power.
69 ///
70 /// # Returns
71 /// Laser power value.
72 ///
73 /// # Errors
74 /// Returns `NanonisError` if communication fails.
75 pub fn laser_power_get(&mut self) -> Result<f32, NanonisError> {
76 let result = self.quick_send("Laser.PowerGet", vec![], vec![], vec!["f"])?;
77
78 result[0].as_f32()
79 }
80}