30_logger = logging.getLogger(__name__)
34 def __init__(self, com, baud=115200, timeout=0.5, **kwargs) -> None:
35 super().__init__(**kwargs)
40 stopbits=serial.STOPBITS_ONE,
41 bytesize=serial.EIGHTBITS,
42 parity=serial.PARITY_NONE,
47 _logger.info(
"OBIS laser model: [%s]", response.decode())
50 _logger.info(
"OBIS laser serial number: [%s]", response.decode())
53 _logger.info(
"CDRH safety: [%s]", response.decode())
56 _logger.info(
"TEC temperature control: [%s]", response.decode())
59 _logger.info(
"Self test procedure: [%s]", response.decode())
65 _logger.info(
"Response to Autostart: [%s]", response.decode())
69 _logger.info(
"Max intensity in watts: [%s]", response.decode())
74 def _write(self, command):
80 """Read a line from connection without leading and trailing whitespace.
81 We override from SerialDeviceMixin
86 "Did not get a proper answer from the laser serial comm."
90 def _flush_handshake(self):
93 @microscope.abc.SerialDeviceMixin.lock_comms
97 (b
"SOURce:AM:STATe?",
"Emission on?"),
98 (b
"SOURce:POWer:LEVel:IMMediate:AMPLitude?",
"Target power:"),
99 (b
"SOURce:POWer:LEVel?",
"Measured power:"),
100 (b
"SYSTem:STATus?",
"Status code?"),
101 (b
"SYSTem:FAULt?",
"Fault code?"),
102 (b
"SYSTem:HOURs?",
"Head operating hours:"),
108 @microscope.abc.SerialDeviceMixin.lock_comms
109 def _do_enable(self):
110 """Turn the laser ON. Return True if we succeeded, False otherwise."""
111 _logger.info(
"Turning laser ON.")
120 _logger.info(
"SOURce:AM:STATe? [%s]", response.decode())
124 _logger.error(
"Failed to turn ON. Current status:\r\n")
129 def _do_shutdown(self) -> None:
141 def initialize(self):
151 @microscope.abc.SerialDeviceMixin.lock_comms
152 def _do_disable(self):
153 """Turn the laser OFF. Return True if we succeeded, False otherwise."""
154 _logger.info(
"Turning laser OFF.")
160 _logger.error(
"Failed to turn OFF. Current status:\r\n")
165 @microscope.abc.SerialDeviceMixin.lock_comms
167 """Return True if the laser is currently able to produce light."""
170 _logger.info(
"Are we on? [%s]", response.decode())
171 return response == b
"ON"
173 @microscope.abc.SerialDeviceMixin.lock_comms
174 def _get_power_mw(self):
179 return float(response.decode()) * 1000.0
181 @microscope.abc.SerialDeviceMixin.lock_comms
182 def _set_power_mw(self, mw):
183 power_w = mw / 1000.0
184 _logger.info(
"Setting laser power to %.7sW", power_w)
185 self.
_write_write(b
"SOURce:POWer:LEVel:IMMediate:AMPLitude %.5f" % power_w)
188 def _do_set_power(self, power: float) ->
None:
191 def _do_get_power(self) -> float:
195 def trigger_type(self) -> microscope.TriggerType:
196 return microscope.TriggerType.HIGH
199 def trigger_mode(self) -> microscope.TriggerMode:
200 return microscope.TriggerMode.BULB
205 if ttype
is not microscope.TriggerType.HIGH:
207 "the only trigger type supported is 'high'"
209 if tmode
is not microscope.TriggerMode.BULB:
211 "the only trigger mode supported is 'bulb'"
214 def _do_trigger(self) -> None:
216 "trigger does not make sense in trigger mode bulb, only enable"
typing.List[str] get_status(self)
int _write(self, bytes command)
None set_trigger(self, microscope.TriggerType ttype, microscope.TriggerMode tmode)
def _write(self, command)
def _flush_handshake(self)
def _set_power_mw(self, mw)