///////////////////////////////////////////////////////////////
//ManualControl.h
//
//Author:     Amanda Green
//Date:       7/5/00
//Version:    1
//
//Purpose:    Attempting to get serial data from Joystick
//		  At this point, it should read in from the defined
//		  serial port, parse the data, and print it to the 
//		  screen. 
///////////////////////////////////////////////////////////////
#ifndef _ManualControl_H
#define _ManualControl_H

#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <fcntl.h>
#include <errno.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
#include <signal.h>

#include "TailConeIF.h"
#include "Exception.h"
#include "StringConverter.h"
#include "MathP.h"
#include "System.h"
#include "Task.h"
#include "Syslog.h"
#include "StreamSerialDriver.h"
#include "SerialDevice.h"
#include "SerialParameters.h"
#include "DeviceIF.h"


class ManualControl : public StreamSerialDriver {


public:
     ///////////////////////////////////////////////////////
     //Constructor
     ManualControl(SerialDevice *device, SerialParameters *serialParams);

     ///////////////////////////////////////////////////////
     //Destructor
     //commenting out for now
     ~ManualControl();
 

protected:
     ////////////////////////////////////////////////////////
     //Initialize device
     virtual DeviceIF::Status initialize();

     ////////////////////////////////////////////////////////
     //Process device data
     virtual DeviceIF::Status processRecord(unsigned char *record, int nRecordBytes);

     SerialParameters *_serialParams;

     ///CUT FROM AGTailCone protected///////////////////////
     TailConeIF *_agTailCone;
     short timeout;
     pid_t _tailConeServer;
     pid_t _vehicleConfigServer;
     //END CUT FROM AGTailCone protected/////////////////////


  ////////////////////////////////////////////////////////////////////
  // Called on timeout while reading manual control input.
  // In this method, set propeller speed to 0. We set the read
  // timeout such that this method gets called before tailcone
  // times out.
  virtual void handleReadTimeout();


};
#endif

