#ifndef _DRILLSLEDDM_H
#define _DRILLSLEDDM_H

#include "FireControlDm.h"

#define MinRpmValue 0
#define MaxRpmValue 1200
#define MinWOBValue -800
#define MaxWOBValue 800

/*
CLASS 
DrillSledDm

DESCRIPTION
Container for DataManager objects associated with Drill Toolsled.

AUTHOR
Tom O'Reilly
*/

class DrillSledDm {

public:

  ///////////////////////////////////////////////////////////////////
  // Numeric limits for various items
  static const int minRpm;
  static const int maxRpm;
  static const int minWOB;
  static const int maxWOB;
  static const int minTorque;
  static const int maxTorque;
  static const int minCutterVolts;
  static const int maxCutterVolts;

  ///////////////////////////////////////////////////////////////////
  // Rotation sense for drill bit
  enum RotationSense {
    Clockwise,
    CounterClockwise,
    Stop
  };

  ///////////////////////////////////////////////////////////////////
  // Constructor
  // [input] platformName: e.g. "TIBURON" or "VENTANA"
  DrillSledDm(const char *platformName);

  ~DrillSledDm();

  // Commanded high torque on/off
  DmBooleanObject *highTorqueCmd;

  // Measured weight on bit (lbs)
  DmFlt32Object *weightOnBit;

  // Measured motor differential pressure
  DmFlt32Object *motorDeltaP;

  // Measured rotation speed
  DmFlt32Object *rpm;

  // Cutter battery voltage
  DmFlt32Object *cutterVoltage;  

  // Cutter fire control DM interface object
  FireControlDm *fireControl;

  // Cutter Status Bits
  DmBooleanObject *slowFireStatus;
  DmBooleanObject *fastFireStatus;
  DmBooleanObject *armedStatus;
  DmBooleanObject *firedStatus;

  // Bit speed control Dm items
  DmInt16Object *bitRpmCmd;
  DmEnumObject  *bitRotationSense;

  // Water Pump Dm items
  DmInt16Object *pumpSpeed;
  DmEnumObject  *pumpDirection;
};


#endif
