syntax = "proto3";

import "SiLAFramework.proto";

package sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1;

/* This feature contains all methods used for the thermocycler */
service ModuleThermocycler {
  /* Returns the current block temperature in Celsius
         */
  rpc CurrentBlockTemperature (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentBlockTemperature_Parameters) returns (sila2.org.silastandard.CommandConfirmation) {}
  /* Monitor the state of CurrentBlockTemperature */
  rpc CurrentBlockTemperature_Info (sila2.org.silastandard.CommandExecutionUUID) returns (stream sila2.org.silastandard.ExecutionInfo) {}
  /* Retrieve result of CurrentBlockTemperature */
  rpc CurrentBlockTemperature_Result(sila2.org.silastandard.CommandExecutionUUID) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentBlockTemperature_Responses) {}
  /* Returns the current lid temperature in Celsius
         */
  rpc CurrentLidTemperature (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidTemperature_Parameters) returns (sila2.org.silastandard.CommandConfirmation) {}
  /* Monitor the state of CurrentLidTemperature */
  rpc CurrentLidTemperature_Info (sila2.org.silastandard.CommandExecutionUUID) returns (stream sila2.org.silastandard.ExecutionInfo) {}
  /* Retrieve result of CurrentLidTemperature */
  rpc CurrentLidTemperature_Result(sila2.org.silastandard.CommandExecutionUUID) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidTemperature_Responses) {}
  /* Returns the current lid temperature status
         */
  rpc CurrentLidTemperatureStatus (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidTemperatureStatus_Parameters) returns (sila2.org.silastandard.CommandConfirmation) {}
  /* Monitor the state of CurrentLidTemperatureStatus */
  rpc CurrentLidTemperatureStatus_Info (sila2.org.silastandard.CommandExecutionUUID) returns (stream sila2.org.silastandard.ExecutionInfo) {}
  /* Retrieve result of CurrentLidTemperatureStatus */
  rpc CurrentLidTemperatureStatus_Result(sila2.org.silastandard.CommandExecutionUUID) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidTemperatureStatus_Responses) {}
  /* Returns the current block temperature status
         */
  rpc CurrentBlockTemperatureStatus (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentBlockTemperatureStatus_Parameters) returns (sila2.org.silastandard.CommandConfirmation) {}
  /* Monitor the state of CurrentBlockTemperatureStatus */
  rpc CurrentBlockTemperatureStatus_Info (sila2.org.silastandard.CommandExecutionUUID) returns (stream sila2.org.silastandard.ExecutionInfo) {}
  /* Retrieve result of CurrentBlockTemperatureStatus */
  rpc CurrentBlockTemperatureStatus_Result(sila2.org.silastandard.CommandExecutionUUID) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentBlockTemperatureStatus_Responses) {}
  /* Returns the current lid position */
  rpc CurrentLidPosition (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidPosition_Parameters) returns (sila2.org.silastandard.CommandConfirmation) {}
  /* Monitor the state of CurrentLidPosition */
  rpc CurrentLidPosition_Info (sila2.org.silastandard.CommandExecutionUUID) returns (stream sila2.org.silastandard.ExecutionInfo) {}
  /* Retrieve result of CurrentLidPosition */
  rpc CurrentLidPosition_Result(sila2.org.silastandard.CommandExecutionUUID) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CurrentLidPosition_Responses) {}
  /* Stops heating */
  rpc Deactivate (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.Deactivate_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.Deactivate_Responses) {}
  /* Stops heating */
  rpc DeactivateBlockHeater (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.DeactivateBlockHeater_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.DeactivateBlockHeater_Responses) {}
  /* Stops heating */
  rpc DeactivateLidHeater (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.DeactivateLidHeater_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.DeactivateLidHeater_Responses) {}
  /* Closes the absorbance plate lid */
  rpc CloseLid (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CloseLid_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.CloseLid_Responses) {}
  /* Opens the absorbance plate lid */
  rpc OpenLid (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.OpenLid_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.OpenLid_Responses) {}
  /* Set the lid target temperature and waits for temperature to be reached. */
  rpc SetLidTemperature (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.SetLidTemperature_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.SetLidTemperature_Responses) {}
  /* Set the block target temperature and waits for temperature to be reached. */
  rpc SetBlockTemperature (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.SetBlockTemperature_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.SetBlockTemperature_Responses) {}
  /* Executes the thermocycler profile */
  rpc ExecuteProfile (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.ExecuteProfile_Parameters) returns (sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.ExecuteProfile_Responses) {}
}

/* Parameters for CurrentBlockTemperature */
message CurrentBlockTemperature_Parameters {
}

/* Responses of CurrentBlockTemperature */
message CurrentBlockTemperature_Responses {
  sila2.org.silastandard.Real Temperature = 1;  /* Temperature in Celsius */
}

/* Parameters for CurrentLidTemperature */
message CurrentLidTemperature_Parameters {
}

/* Responses of CurrentLidTemperature */
message CurrentLidTemperature_Responses {
  sila2.org.silastandard.Real Temperature = 1;  /* Temperature in Celsius */
}

/* Parameters for CurrentLidTemperatureStatus */
message CurrentLidTemperatureStatus_Parameters {
}

/* Responses of CurrentLidTemperatureStatus */
message CurrentLidTemperatureStatus_Responses {
  sila2.org.silastandard.String TemperatureStatus = 1;  /* The temperature status */
}

/* Parameters for CurrentBlockTemperatureStatus */
message CurrentBlockTemperatureStatus_Parameters {
}

/* Responses of CurrentBlockTemperatureStatus */
message CurrentBlockTemperatureStatus_Responses {
  sila2.org.silastandard.String TemperatureStatus = 1;  /* The temperature status */
}

/* Parameters for CurrentLidPosition */
message CurrentLidPosition_Parameters {
}

/* Responses of CurrentLidPosition */
message CurrentLidPosition_Responses {
  sila2.org.silastandard.String LidPosition = 1;  /* The lid position */
}

/* Parameters for Deactivate */
message Deactivate_Parameters {
}

/* Responses of Deactivate */
message Deactivate_Responses {
}

/* Parameters for DeactivateBlockHeater */
message DeactivateBlockHeater_Parameters {
}

/* Responses of DeactivateBlockHeater */
message DeactivateBlockHeater_Responses {
}

/* Parameters for DeactivateLidHeater */
message DeactivateLidHeater_Parameters {
}

/* Responses of DeactivateLidHeater */
message DeactivateLidHeater_Responses {
}

/* Parameters for CloseLid */
message CloseLid_Parameters {
}

/* Responses of CloseLid */
message CloseLid_Responses {
}

/* Parameters for OpenLid */
message OpenLid_Parameters {
}

/* Responses of OpenLid */
message OpenLid_Responses {
}

/* Parameters for SetLidTemperature */
message SetLidTemperature_Parameters {
  sila2.org.silastandard.Real Temperature = 1;  /* A value between 37 and 110, representing the target temperature in °C. */
}

/* Responses of SetLidTemperature */
message SetLidTemperature_Responses {
}

/* Parameters for SetBlockTemperature */
message SetBlockTemperature_Parameters {
  sila2.org.silastandard.Real Temperature = 1;  /* A value between 4 and 99, representing the target temperature in °C. */
  sila2.org.silastandard.Real HoldTimeMinutes = 2;  /* The number of minutes to hold, after reaching temperature, before proceeding to the next command. Is added together with hold time seconds */
  sila2.org.silastandard.Real HoldTimeSeconds = 3;  /* The number of seconds to hold, after reaching temperature, before proceeding to the next command. Is added together with hold time minutes */
  sila2.org.silastandard.Real BlockMaxVolume = 4;  /* The greatest volume of liquid contained in any individual well of the loaded labware, in µL. If 0 is specified, the default is 25 µL. */
}

/* Responses of SetBlockTemperature */
message SetBlockTemperature_Responses {
}

/* Parameters for ExecuteProfile */
message ExecuteProfile_Parameters {
  message Steps_Struct {
    sila2.org.silastandard.Real Temperature = 1;  /* A value between 4 and 99, representing the target temperature in °C. */
    sila2.org.silastandard.Real HoldTimeSeconds = 2;  /* The number of seconds to hold, after reaching temperature, before proceeding to the next command. Is added together with hold time minutes */
    sila2.org.silastandard.Real HoldTimeMinutes = 3;  /* The number of minutes to hold, after reaching temperature, before proceeding to the next command. Is added together with hold time seconds */
  }
  repeated sila2.nl.fontys.robotlab.thermocycler.modulethermocycler.v1.ExecuteProfile_Parameters.Steps_Struct Steps = 1;  /* List of steps that make up a single cycle. */
  sila2.org.silastandard.Integer Repetitions = 2;  /* The amount of times the steps will be repeated */
  sila2.org.silastandard.Real BlockMaxVolume = 3;  /* The greatest volume of liquid contained in any individual well of the loaded labware, in µL. If 0 is specified, the default is 25 µL. */
}

/* Responses of ExecuteProfile */
message ExecuteProfile_Responses {
}
