
#ifndef _TailConeOutput_H
#define _TailConeOutput_H

#include "SharedData.h"
#include "TimeIF.h"
#include "DeviceIF.h"

#define TailConeOutputName "TailConeOutput_ShmemName"

/*
CLASS 
TailConeOutput

DESCRIPTION
Output of TailCone driver

AUTHOR
Tom O'Reilly
*/
class TailConeOutput : public SharedData {

public:

  struct Data {

    DeviceIF::Status status;

    // Filled in by driver on initialization and when deadman timeout 
    // is changed
    long deadmanMillisec;

    double elevator;
    double rudder;
    double propOmega;

    short elevatorCurrent;
    short rudderCurrent;
    short propCurrent1;
    short propCurrent2;
    unsigned char rudderAnalog1, rudderAnalog2;
    unsigned char elevatorAnalog1, elevatorAnalog2;
    int elevatorSteps, rudderSteps;
    int rudderThrottle;
    TimeIF::TimeSpec sampleTime;
  };

  TailConeOutput(Access access = NoAccess, Boolean init = False);

  ~TailConeOutput();

  ////////////////////////////////////////////////////////////////////
  // Read from shared memory to this object's Data::data element
  void read();

  ////////////////////////////////////////////////////////////////////
  // Write from this object's Data::data element to shared memory
  void write();

  ////////////////////////////////////////////////////////////////////
  // Your application accesses the fields of this Data object, before 
  // calling write() or after calling read().
  Data data;

};

#endif
