// ###############################################################
// Copyright(c) Carl Zeiss AG, Germany. All Rights Reserved.
//
// Permission is granted to use and distribute this code,
// as long as this copyright notice remains part of the code.
// ###############################################################

syntax = "proto3";
package zen_api.em.hardware.v1;
import "google/protobuf/wrappers.proto";
import "zen_api/em/hardware/v1/beam_state.proto";

// The ElectronColumnServiceGetActualVoltageRequest class.
message ElectronColumnServiceGetActualVoltageRequest {
}
// Response object representing the eht/voltage.
message ElectronColumnServiceGetActualVoltageResponse {
   // The eht/voltage in volts.
   double voltage = 1;
}
// The ElectronColumnServiceGetApertureAlignRequest class.
message ElectronColumnServiceGetApertureAlignRequest {
}
// Response object describing the aperture align values.
message ElectronColumnServiceGetApertureAlignResponse {
   // The x aperture align in percentage.
   double x = 1;
   // The y aperture align in percentage.
   double y = 2;
}
// The ElectronColumnServiceGetBeamBlankerStateRequest class.
message ElectronColumnServiceGetBeamBlankerStateRequest {
}
// Response object representing the beam blanker.
message ElectronColumnServiceGetBeamBlankerStateResponse {
   // A value indicating whether the beam is blanked.
   bool is_beam_blanked = 1;
}
// The ElectronColumnServiceGetBeamShiftLimitsRequest class.
message ElectronColumnServiceGetBeamShiftLimitsRequest {
}
// Response object representing the beam shift limits.
message ElectronColumnServiceGetBeamShiftLimitsResponse {
   // The minimum beam shift X in meters.
   double beam_shift_xmin = 1;
   // The maximum beam shift X in meters.
   double beam_shift_xmax = 2;
   // The minimum beam shift Y in meters.
   double beam_shift_ymin = 3;
   // The maximum beam shift Y in meters.
   double beam_shift_ymax = 4;
}
// The ElectronColumnServiceGetBeamShiftRequest class.
message ElectronColumnServiceGetBeamShiftRequest {
}
// Response object describing the beam shift values.
message ElectronColumnServiceGetBeamShiftResponse {
   // The x beam shift in meters.
   double shift_x = 1;
   // The y beam shift in meters.
   double shift_y = 2;
}
// The ElectronColumnServiceGetBeamStateRequest class.
message ElectronColumnServiceGetBeamStateRequest {
}
// BeamState enum wrapper.
message ElectronColumnServiceGetBeamStateResponse {
   // The beam state.
   BeamState state = 1;
   // A value indicating whether the task to change beam state succeeded or not.
   bool task_success = 2;
}
// The ElectronColumnServiceGetBoosterVoltageRequest class.
message ElectronColumnServiceGetBoosterVoltageRequest {
}
// Response object representing the booster voltage.
message ElectronColumnServiceGetBoosterVoltageResponse {
   // The booster voltage  in volts.
   double booster_voltage = 1;
   // A value indicating whether getting the booster voltage was successful.
   bool success = 2;
}
// The ElectronColumnServiceGetEhtOffsetLimitsRequest class.
message ElectronColumnServiceGetEhtOffsetLimitsRequest {
}
// Response object representing the eht offset response.
message ElectronColumnServiceGetEhtOffsetLimitsResponse {
   // The minimum eht offset in volts.
   double minimum = 1;
   // The maximum eht offset in volts.
   double maximum = 2;
   // A value indicating whether geetting the eht offset limits was successful.
   bool success = 3;
}
// The ElectronColumnServiceGetEhtOffsetRequest class.
message ElectronColumnServiceGetEhtOffsetRequest {
}
// Response object representing the eht offset.
message ElectronColumnServiceGetEhtOffsetResponse {
   // The eht offset in volts.
   double eht_offset = 1;
   // A value indicating whether gets or sets of the eht offset was successful.
   bool success = 2;
}
// The ElectronColumnServiceGetFocusLimitsRequest class.
message ElectronColumnServiceGetFocusLimitsRequest {
}
// Response object representing the column focus.
message ElectronColumnServiceGetFocusLimitsResponse {
   // The minimum focus in meters.
   double focus_min = 1;
   // The maximum focus in meters.
   double focus_max = 2;
}
// The ElectronColumnServiceGetFocusRequest class.
message ElectronColumnServiceGetFocusRequest {
}
// Response object representing the column focus.
message ElectronColumnServiceGetFocusResponse {
   // The focus in meters.
   double focus = 1;
}
// The ElectronColumnServiceGetFovLimitsRequest class.
message ElectronColumnServiceGetFovLimitsRequest {
}
// Response object representing the field of view limits.
message ElectronColumnServiceGetFovLimitsResponse {
   // The minimum field of view in meters.
   double minimum = 1;
   // The maximum field of view in meters.
   double maximum = 2;
}
// The ElectronColumnServiceGetFovRequest class.
message ElectronColumnServiceGetFovRequest {
}
// Response object representing the field of view expansion.
message ElectronColumnServiceGetFovResponse {
   // The fov expansion in meters.
   double fov = 1;
}
// The ElectronColumnServiceGetFovRotationLimitsRequest class.
message ElectronColumnServiceGetFovRotationLimitsRequest {
}
// Response object representing the field of view rotation limits.
message ElectronColumnServiceGetFovRotationLimitsResponse {
   // The minimum field of view rotation in radians.
   double minimum = 1;
   // The maximum field of view rotation in radians.
   double maximum = 2;
}
// The ElectronColumnServiceGetFovRotationRequest class.
message ElectronColumnServiceGetFovRotationRequest {
}
// Response object representing the field of view rotation.
message ElectronColumnServiceGetFovRotationResponse {
   // The field of view rotation in radians.
   double rotation = 1;
}
// The ElectronColumnServiceGetObjectiveCurrentRequest class.
message ElectronColumnServiceGetObjectiveCurrentRequest {
}
// Response object representing the objective current.
message ElectronColumnServiceGetObjectiveCurrentResponse {
   // The objective current in amperes.
   double objective_current = 1;
   // A value indicating whether getting the objective current was successful.
   bool success = 2;
}
// The ElectronColumnServiceGetProbeCurrentRequest class.
message ElectronColumnServiceGetProbeCurrentRequest {
}
// Response object representing the probe current.
message ElectronColumnServiceGetProbeCurrentResponse {
   // The probe current value in Amps.
   double probe_current = 1;
}
// The ElectronColumnServiceGetSemiAngleRequest class.
message ElectronColumnServiceGetSemiAngleRequest {
}
// Response object describing the semi angle value.
message ElectronColumnServiceGetSemiAngleResponse {
   // The semi angle in radians.
   double angle = 1;
}
// The ElectronColumnServiceGetSpotSizeRequest class.
message ElectronColumnServiceGetSpotSizeRequest {
}
// Response object representing the spot size.
message ElectronColumnServiceGetSpotSizeResponse {
   // The spot size in meters.
   double spot_size = 1;
}
// The ElectronColumnServiceGetStigmatorRequest class.
message ElectronColumnServiceGetStigmatorRequest {
}
// Response object representing the stigmator value of the electron column.
message ElectronColumnServiceGetStigmatorResponse {
   // The stigmator x in percent [0,1].
   double stigmator_x = 1;
   // The stigmator y in percent [0,1].
   double stigmator_y = 2;
}
// The ElectronColumnServiceGetTargetVoltageRequest class.
message ElectronColumnServiceGetTargetVoltageRequest {
}
// Response object representing the eht/voltage.
message ElectronColumnServiceGetTargetVoltageResponse {
   // The eht/voltage in volts.
   double voltage = 1;
}
// The ElectronColumnServiceGetVoltageLimitsRequest class.
message ElectronColumnServiceGetVoltageLimitsRequest {
}
// Response object representing the voltage limits.
message ElectronColumnServiceGetVoltageLimitsResponse {
   // The minimum voltage in volts.
   double minimum = 1;
   // The maximum voltage in volts.
   double maximum = 2;
}
// The ElectronColumnServiceGoToStandbyRequest class.
message ElectronColumnServiceGoToStandbyRequest {
}
// BeamState enum wrapper.
message ElectronColumnServiceGoToStandbyResponse {
   // The beam state.
   BeamState state = 1;
   // A value indicating whether the task to change beam state succeeded or not.
   bool task_success = 2;
}
// The ElectronColumnServiceRegisterOnApertureAlignChangedRequest class.
message ElectronColumnServiceRegisterOnApertureAlignChangedRequest {
}
// Response object describing the aperture align values.
message ElectronColumnServiceRegisterOnApertureAlignChangedResponse {
   // The x aperture align in percentage.
   double x = 1;
   // The y aperture align in percentage.
   double y = 2;
}
// The ElectronColumnServiceRegisterOnBeamBlankerStateChangedRequest class.
message ElectronColumnServiceRegisterOnBeamBlankerStateChangedRequest {
}
// Response object representing the beam blanker.
message ElectronColumnServiceRegisterOnBeamBlankerStateChangedResponse {
   // A value indicating whether the beam is blanked.
   bool is_beam_blanked = 1;
}
// The ElectronColumnServiceRegisterOnBeamShiftChangedRequest class.
message ElectronColumnServiceRegisterOnBeamShiftChangedRequest {
}
// Response object describing the beam shift values.
message ElectronColumnServiceRegisterOnBeamShiftChangedResponse {
   // The x beam shift in meters.
   double shift_x = 1;
   // The y beam shift in meters.
   double shift_y = 2;
}
// The ElectronColumnServiceRegisterOnBeamStateChangedRequest class.
message ElectronColumnServiceRegisterOnBeamStateChangedRequest {
}
// BeamState enum wrapper.
message ElectronColumnServiceRegisterOnBeamStateChangedResponse {
   // The beam state.
   BeamState state = 1;
   // A value indicating whether the task to change beam state succeeded or not.
   bool task_success = 2;
}
// The ElectronColumnServiceRegisterOnFocusChangedRequest class.
message ElectronColumnServiceRegisterOnFocusChangedRequest {
}
// Response object representing the column focus.
message ElectronColumnServiceRegisterOnFocusChangedResponse {
   // The focus in meters.
   double focus = 1;
}
// The ElectronColumnServiceRegisterOnFovChangedRequest class.
message ElectronColumnServiceRegisterOnFovChangedRequest {
}
// Response object representing the field of view expansion.
message ElectronColumnServiceRegisterOnFovChangedResponse {
   // The fov expansion in meters.
   double fov = 1;
}
// The ElectronColumnServiceRegisterOnFovRotationChangedRequest class.
message ElectronColumnServiceRegisterOnFovRotationChangedRequest {
}
// Response object representing the field of view rotation.
message ElectronColumnServiceRegisterOnFovRotationChangedResponse {
   // The field of view rotation in radians.
   double rotation = 1;
}
// The ElectronColumnServiceRegisterOnProbeCurrentChangedRequest class.
message ElectronColumnServiceRegisterOnProbeCurrentChangedRequest {
}
// Response object representing the probe current.
message ElectronColumnServiceRegisterOnProbeCurrentChangedResponse {
   // The probe current value in Amps.
   double probe_current = 1;
}
// The ElectronColumnServiceRegisterOnSemiAngleChangedRequest class.
message ElectronColumnServiceRegisterOnSemiAngleChangedRequest {
}
// Response object describing the semi angle values.
message ElectronColumnServiceRegisterOnSemiAngleChangedResponse {
   // The semi angle in radians.
   double angle = 1;
}
// The ElectronColumnServiceRegisterOnSpotSizeChangedRequest class.
message ElectronColumnServiceRegisterOnSpotSizeChangedRequest {
}
// Response object representing the spot size.
message ElectronColumnServiceRegisterOnSpotSizeChangedResponse {
   // The spot size in meters.
   double spot_size = 1;
}
// The ElectronColumnServiceRegisterOnStigmatorChangedRequest class.
message ElectronColumnServiceRegisterOnStigmatorChangedRequest {
}
// Response object representing stigmator changes of the electron column.
message ElectronColumnServiceRegisterOnStigmatorChangedResponse {
   // The stigmator x in percent [0,1].
   double stigmator_x = 1;
   // The stigmator y in percent [0,1].
   double stigmator_y = 2;
}
// The ElectronColumnServiceRegisterOnVoltageChangedRequest class.
message ElectronColumnServiceRegisterOnVoltageChangedRequest {
}
// Response object representing the eht/voltage.
message ElectronColumnServiceRegisterOnVoltageChangedResponse {
   // The eht/voltage in volts.
   double voltage = 1;
}
// The ElectronColumnServiceSetApertureAlignRequest class.
message ElectronColumnServiceSetApertureAlignRequest {
   // The new aperture align x in percentage. null if it should not be changed.
   .google.protobuf.DoubleValue x = 1;
   // The new aperture align y in percentage. null if it should not be changed.
   .google.protobuf.DoubleValue y = 2;
}
// Response object describing the aperture align values.
message ElectronColumnServiceSetApertureAlignResponse {
   // The x aperture align in percentage.
   double x = 1;
   // The y aperture align in percentage.
   double y = 2;
   // A value indicating whether setting of the aperture alignment was successful.
   bool success = 3;
}
// The ElectronColumnServiceSetBeamBlankerStateRequest class.
message ElectronColumnServiceSetBeamBlankerStateRequest {
   // True blanks beam, false unblanks beam.
   bool blank_beam = 1;
}
// Response object representing the electron column beam blanker.
message ElectronColumnServiceSetBeamBlankerStateResponse {
   // The beam blanker.
   bool beam_blanked = 1;
}
// The ElectronColumnServiceSetBeamShiftRequest class.
message ElectronColumnServiceSetBeamShiftRequest {
   // The new beam shift x in meters. null if it should not be changed.
   .google.protobuf.DoubleValue xshift = 1;
   // The new beam shift y in meters. null if it should not be changed.
   .google.protobuf.DoubleValue yshift = 2;
}
// Response object describing the beam shift values.
message ElectronColumnServiceSetBeamShiftResponse {
   // The x beam shift in meters.
   double shift_x = 1;
   // The y beam shift in meters.
   double shift_y = 2;
}
// The ElectronColumnServiceSetEhtOffsetRequest class.
message ElectronColumnServiceSetEhtOffsetRequest {
   // The eht offset.
   double eht_offset = 1;
}
// Response object representing the eht offset response.
message ElectronColumnServiceSetEhtOffsetResponse {
   // The eht offset in volts.
   double eht_offset = 1;
   // A value indicating whether gets or sets of the eht offset was successful.
   bool success = 2;
}
// The ElectronColumnServiceSetFocusRequest class.
message ElectronColumnServiceSetFocusRequest {
   // The new focus in meters.
   double focus = 1;
}
// Response object representing the column focus.
message ElectronColumnServiceSetFocusResponse {
   // The focus in meters.
   double focus = 1;
}
// The ElectronColumnServiceSetFovRequest class.
message ElectronColumnServiceSetFovRequest {
   // The size of the new FOV in meters.
   double fov = 1;
}
// Response object representing the field of view expansion.
message ElectronColumnServiceSetFovResponse {
   // The fov expansion in meters.
   double fov = 1;
}
// The ElectronColumnServiceSetFovRotationRequest class.
message ElectronColumnServiceSetFovRotationRequest {
   // The rotation in radians, clockwise.
   double fov_rotation = 1;
}
// Response object representing the field of view rotation.
message ElectronColumnServiceSetFovRotationResponse {
   // The field of view rotation in radians.
   double rotation = 1;
}
// The ElectronColumnServiceSetObjectiveCurrentRequest class.
message ElectronColumnServiceSetObjectiveCurrentRequest {
   // The objective current in amperes.
   double objective_current = 1;
}
// Response object representing the objective current response.
message ElectronColumnServiceSetObjectiveCurrentResponse {
   // The ObjectiveCurrent in amperes.
   double objective_current = 1;
   // A value indicating whether setting the objective  current was successful.
   bool success = 2;
}
// The ElectronColumnServiceSetProbeCurrentRequest class.
message ElectronColumnServiceSetProbeCurrentRequest {
   // Probe current in Ampere.
   double current_amps = 1;
}
// Response object representing the probe current.
message ElectronColumnServiceSetProbeCurrentResponse {
   // A value indicating whether setting the probe current was successful.
   bool success = 1;
   // The probe current value in Amps.
   double probe_current = 2;
}
// The ElectronColumnServiceSetStigmatorRequest class.
message ElectronColumnServiceSetStigmatorRequest {
   // The stigmator x value in percent [0, 1] or null if is not supposed to change.
   .google.protobuf.DoubleValue stigmator_x = 1;
   // The stigmator y value in percent [0, 1] or null if is not supposed to change.
   .google.protobuf.DoubleValue stigmator_y = 2;
}
// Response object representing the stigmator set value.
message ElectronColumnServiceSetStigmatorResponse {
   // The stigmator x in percent [0,1].
   double stigmator_x = 1;
   // The stigmator y in percent [0,1].
   double stigmator_y = 2;
}
// The ElectronColumnServiceSetVoltageRequest class.
message ElectronColumnServiceSetVoltageRequest {
   // The new eht/voltage in volts.
   double voltage = 1;
}
// Response object representing the eht/voltage.
message ElectronColumnServiceSetVoltageResponse {
   // The eht/voltage in volts.
   double voltage = 1;
}
// The ElectronColumnServiceTurnOffRequest class.
message ElectronColumnServiceTurnOffRequest {
}
// BeamState enum wrapper.
message ElectronColumnServiceTurnOffResponse {
   // The beam state.
   BeamState state = 1;
   // A value indicating whether the task to change beam state succeeded or not.
   bool task_success = 2;
}
// The ElectronColumnServiceTurnOnRequest class.
message ElectronColumnServiceTurnOnRequest {
}
// BeamState enum wrapper.
message ElectronColumnServiceTurnOnResponse {
   // The beam state.
   BeamState state = 1;
   // A value indicating whether the task to change beam state succeeded or not.
   bool task_success = 2;
}
// The IElectronColumnService interface.
service ElectronColumnService {
   // Retrieves the current eht/voltage.
   rpc GetActualVoltage (ElectronColumnServiceGetActualVoltageRequest) returns (ElectronColumnServiceGetActualVoltageResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the aperture align in percentage.
   rpc GetApertureAlign (ElectronColumnServiceGetApertureAlignRequest) returns (ElectronColumnServiceGetApertureAlignResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the beam blanker state.
   rpc GetBeamBlankerState (ElectronColumnServiceGetBeamBlankerStateRequest) returns (ElectronColumnServiceGetBeamBlankerStateResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the current beam shift in meters.
   rpc GetBeamShift (ElectronColumnServiceGetBeamShiftRequest) returns (ElectronColumnServiceGetBeamShiftResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the beam shiftin meters.
   rpc GetBeamShiftLimits (ElectronColumnServiceGetBeamShiftLimitsRequest) returns (ElectronColumnServiceGetBeamShiftLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Retrieves the current beam working state.
   rpc GetBeamState (ElectronColumnServiceGetBeamStateRequest) returns (ElectronColumnServiceGetBeamStateResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the booster voltage in volts.
   rpc GetBoosterVoltage (ElectronColumnServiceGetBoosterVoltageRequest) returns (ElectronColumnServiceGetBoosterVoltageResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the eht offset in volts.
   rpc GetEhtOffset (ElectronColumnServiceGetEhtOffsetRequest) returns (ElectronColumnServiceGetEhtOffsetResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the eht offset in volts.
   rpc GetEhtOffsetLimits (ElectronColumnServiceGetEhtOffsetLimitsRequest) returns (ElectronColumnServiceGetEhtOffsetLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the current focus (working distance) in meters.
   rpc GetFocus (ElectronColumnServiceGetFocusRequest) returns (ElectronColumnServiceGetFocusResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the current focus (working distance) in meters.
   rpc GetFocusLimits (ElectronColumnServiceGetFocusLimitsRequest) returns (ElectronColumnServiceGetFocusLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Retrieves the current Field Of View.
   rpc GetFov (ElectronColumnServiceGetFovRequest) returns (ElectronColumnServiceGetFovResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the Field Of View in meters.
   rpc GetFovLimits (ElectronColumnServiceGetFovLimitsRequest) returns (ElectronColumnServiceGetFovLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the rotation of the Field Of View.
   rpc GetFovRotation (ElectronColumnServiceGetFovRotationRequest) returns (ElectronColumnServiceGetFovRotationResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the Field Of View rotation in radians.
   rpc GetFovRotationLimits (ElectronColumnServiceGetFovRotationLimitsRequest) returns (ElectronColumnServiceGetFovRotationLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the objective current in amperes. The objective current controls the strength of the magnetic field of the lens.
   rpc GetObjectiveCurrent (ElectronColumnServiceGetObjectiveCurrentRequest) returns (ElectronColumnServiceGetObjectiveCurrentResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Get the probe current.
   rpc GetProbeCurrent (ElectronColumnServiceGetProbeCurrentRequest) returns (ElectronColumnServiceGetProbeCurrentResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the current semi angle in radians.
   rpc GetSemiAngle (ElectronColumnServiceGetSemiAngleRequest) returns (ElectronColumnServiceGetSemiAngleResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the spot size in meters.
   rpc GetSpotSize (ElectronColumnServiceGetSpotSizeRequest) returns (ElectronColumnServiceGetSpotSizeResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the current stigmator x and y values in percent [0, 1].
   rpc GetStigmator (ElectronColumnServiceGetStigmatorRequest) returns (ElectronColumnServiceGetStigmatorResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Retrieves the target eht/voltage.
   rpc GetTargetVoltage (ElectronColumnServiceGetTargetVoltageRequest) returns (ElectronColumnServiceGetTargetVoltageResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the limits of the voltage (EHT) in volts.
   rpc GetVoltageLimits (ElectronColumnServiceGetVoltageLimitsRequest) returns (ElectronColumnServiceGetVoltageLimitsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Bring the column into standby mode.
   // This call triggers the column to go into standby mode. Emission will still be on.
   rpc GoToStandby (ElectronColumnServiceGoToStandbyRequest) returns (ElectronColumnServiceGoToStandbyResponse);
   // Register on aperture align changed events.
   rpc RegisterOnApertureAlignChanged (ElectronColumnServiceRegisterOnApertureAlignChangedRequest) returns (stream ElectronColumnServiceRegisterOnApertureAlignChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on the beam blanker state changed events.
   rpc RegisterOnBeamBlankerStateChanged (ElectronColumnServiceRegisterOnBeamBlankerStateChangedRequest) returns (stream ElectronColumnServiceRegisterOnBeamBlankerStateChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column beam shift changed events.
   rpc RegisterOnBeamShiftChanged (ElectronColumnServiceRegisterOnBeamShiftChangedRequest) returns (stream ElectronColumnServiceRegisterOnBeamShiftChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on beam state changed events.
   rpc RegisterOnBeamStateChanged (ElectronColumnServiceRegisterOnBeamStateChangedRequest) returns (stream ElectronColumnServiceRegisterOnBeamStateChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column focus (working distance) changed events.
   rpc RegisterOnFocusChanged (ElectronColumnServiceRegisterOnFocusChangedRequest) returns (stream ElectronColumnServiceRegisterOnFocusChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column FOV changed events.
   rpc RegisterOnFovChanged (ElectronColumnServiceRegisterOnFovChangedRequest) returns (stream ElectronColumnServiceRegisterOnFovChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on FOV rotation changed events.
   rpc RegisterOnFovRotationChanged (ElectronColumnServiceRegisterOnFovRotationChangedRequest) returns (stream ElectronColumnServiceRegisterOnFovRotationChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column probe current changed events.
   rpc RegisterOnProbeCurrentChanged (ElectronColumnServiceRegisterOnProbeCurrentChangedRequest) returns (stream ElectronColumnServiceRegisterOnProbeCurrentChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column semi angle changed events.
   rpc RegisterOnSemiAngleChanged (ElectronColumnServiceRegisterOnSemiAngleChangedRequest) returns (stream ElectronColumnServiceRegisterOnSemiAngleChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on beam spot size changed events.
   rpc RegisterOnSpotSizeChanged (ElectronColumnServiceRegisterOnSpotSizeChangedRequest) returns (stream ElectronColumnServiceRegisterOnSpotSizeChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on stigmator x and y changed events.
   rpc RegisterOnStigmatorChanged (ElectronColumnServiceRegisterOnStigmatorChangedRequest) returns (stream ElectronColumnServiceRegisterOnStigmatorChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Register on column (current/actual) eht/voltage changed events.
   rpc RegisterOnVoltageChanged (ElectronColumnServiceRegisterOnVoltageChangedRequest) returns (stream ElectronColumnServiceRegisterOnVoltageChangedResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Sets the eht offset.
   rpc SetApertureAlign (ElectronColumnServiceSetApertureAlignRequest) returns (ElectronColumnServiceSetApertureAlignResponse);
   // Sets the beam blanker state.
   rpc SetBeamBlankerState (ElectronColumnServiceSetBeamBlankerStateRequest) returns (ElectronColumnServiceSetBeamBlankerStateResponse);
   // Set the beam shift of this column.
   // Values can be null if they should not be updated.
   rpc SetBeamShift (ElectronColumnServiceSetBeamShiftRequest) returns (ElectronColumnServiceSetBeamShiftResponse);
   // Sets the eht offset.
   rpc SetEhtOffset (ElectronColumnServiceSetEhtOffsetRequest) returns (ElectronColumnServiceSetEhtOffsetResponse);
   // Applies a new focus (working distance) to the column.
   rpc SetFocus (ElectronColumnServiceSetFocusRequest) returns (ElectronColumnServiceSetFocusResponse);
   // Applies a new FOV.
   rpc SetFov (ElectronColumnServiceSetFovRequest) returns (ElectronColumnServiceSetFovResponse);
   // Rotates the Field Of View.
   // If scan rotation is not enabled, it would be enabled.
   rpc SetFovRotation (ElectronColumnServiceSetFovRotationRequest) returns (ElectronColumnServiceSetFovRotationResponse);
   // Sets the objective current, that controlls the strength of the magnetic field of the lens.
   rpc SetObjectiveCurrent (ElectronColumnServiceSetObjectiveCurrentRequest) returns (ElectronColumnServiceSetObjectiveCurrentResponse);
   // Set the probe current.
   rpc SetProbeCurrent (ElectronColumnServiceSetProbeCurrentRequest) returns (ElectronColumnServiceSetProbeCurrentResponse);
   // Applies a new stigmator x and / or y value to the column.
   rpc SetStigmator (ElectronColumnServiceSetStigmatorRequest) returns (ElectronColumnServiceSetStigmatorResponse);
   // Applies a new target eht/voltage to the column.
   rpc SetVoltage (ElectronColumnServiceSetVoltageRequest) returns (ElectronColumnServiceSetVoltageResponse);
   // Turns the column off.
   // This call initiates ramping down of emission and brings the column into off state.
   rpc TurnOff (ElectronColumnServiceTurnOffRequest) returns (ElectronColumnServiceTurnOffResponse);
   // Bring the column into working mode.
   // This call initiates ramping of emission and brings the column into working condition.
   rpc TurnOn (ElectronColumnServiceTurnOnRequest) returns (ElectronColumnServiceTurnOnResponse);
}
