syntax = "proto3";
package pulse.cdm.bind;
option java_package = "com.kitware.pulse.cdm.bind";
option csharp_namespace = "pulse.cdm.bind";
option optimize_for = SPEED;

enum eEngineInitializationState
{
  Uninitialized       = 0;/**<< @brief Engine is not initialized. */
  FailedState         = 1;/**<< @brief Unable to load state file. */
  FailedPatientSetup  = 2;/**<< @brief Failed to setup the Pulse engine to the provided patient values. */
  FailedStabilization = 3;/**<< @brief Pulse was unable to stabilize to provided/computed patient values. */
  Initialized         = 4;/**<< @brief Engine successfully initialized. */
}

/** @brief Enumeration for left/right side */
enum eSide
{
  NullSide = 0;/**<< @brief Not provided */
  Left     = 1;/**<< @brief Left side. */
  Right    = 2;/**<< @brief Right side. */
}

/** @brief Enumeration for an open/closed gate */
enum eGate
{
  NullGate = 0;/**<< @brief Not provided */
  Open     = 1;/**<< @brief Gate is open. */
  Closed   = 2;/**<< @brief Gate is closed. */
}

/** @brief Enumeration for a on/off switch */
enum eSwitch
{
  NullSwitch = 0;/**<< @brief Not provided */
  Off        = 1;/**<< @brief Switch is off. */
  On         = 2;/**<< @brief Switch is on. */
}

/** @brief Enumeration for electrical charge */
enum eCharge
{
  NullCharge = 0;/**<< @brief Not provided */
  Negative   = 1;/**<< @brief Charge is negative. */
  Neutral    = 2;/**<< @brief Charge is neutral. */
  Positive   = 3;/**<< @brief Charge is positive. */
}

/** @brief Enumeration for equipment to inform about what and how the current breath is. */
enum eBreathState
{
  NoBreath                 = 0;
  PatientInitiatedInhale   = 1;
  PatientInitiatedPause    = 2;
  PatientInitiatedExhale   = 3;
  EquipmentInitiatedInhale = 4;
  EquipmentInitiatedPause  = 5;
  EquipmentInitiatedExhale = 6;
  ExpiratoryHold           = 7;
  InspiratoryHold          = 8;
}

/** @brief Enumeration for how to set optional data. */
enum eDefaultType
{
  Model = 0;/**<< @brief Allow the model to set values of any optional properties not provided. */
  Zero  = 1;/**<< @brief Tell the model to use Zero values of any optional properties not provided. */
}

/** @brief Enumeration for driver shapes. */
enum eDriverWaveform
{
  NullDriverWaveform = 0;/**<< Signals not provided, or no change */
  Square             = 1;/**<<  */
  AscendingRamp      = 2;/**<<  */
  DescendingRamp     = 3;/**<<  */
  ExponentialGrowth  = 4;/**<<  */
  ExponentialDecay   = 5;/**<<  */
  SinusoidalRise     = 6;/**<<  */
  SinusoidalFall     = 7;/**<<  */
  SigmoidalRise      = 8;/**<<  */
  SigmoidalFall      = 9;/**<<  */
}
