#ifndef _PILOTTRAYAPP_H
#define _PILOTTRAYAPP_H

#include "PilotTrayTaskControl.h"
#include "PilotTrayMicro.h"
#include "ErrorHandler.h"
#include "PilotTrayInTask.h"
#include "PilotTrayOutTask.h"

extern "C"
{
#include "rovPriority.h"
#include "logLib.h"
#include "microTaskStub.h"
};

#define PILOT_TRAY_DM_PERIOD    50000/* Lap Box Telemetery Update           */
#define USECS_PER_SEC   1000000L
#define FULL_SCALE      1023.0
#define FLT_FULL_SCALE  1.0
#define PAN_TILT_GAIN   1.5

class PilotTrayApp : public ErrorHandler
{
 public:
 PilotTrayApp(const char *name);
 ~PilotTrayApp();

 // Set state of pan-tilt buttons
 static void setPanTiltButtons(unsigned short devices,
                               unsigned short oldDevices,
                               PilotTrayMicro *obj);

 // Set state of camera-select buttons
 static void setCameraButtons(IviewDevice requestedCamera,
                              IviewDevice actualCamera,
                              PilotTrayMicro *obj);

 // Return camera-select LapBoxButton corresponding to IviewDevice
 static PilotTrayButton cameraButton(IviewDevice camera);

 // Return pan-tilt LapBoxButton corresponding to IviewDevice
 static PilotTrayButton panTiltButton(IviewDevice panTilt);

 int run();

 protected:
  char * _name;
  PilotTrayTaskControl *_params;
  PilotTrayMicro  *_uiObject;


  IviewDeviceMask _deviceMask;
  IviewDeviceMask _deviceMaskZFI;

  IviewDevice _camera;
  IviewDevice _cameraZFI;

  //Iview Control Objects
  IviewControl *_iviewControlPT;
  IviewControl *_iviewControlZFI;  

  static void runInputTask(PilotTrayApp *obj);
  static void runOutputTask(PilotTrayApp *obj);
  void inputTask();
  void outputTask();

  void processButton(PilotTrayButton button);
  PilotTrayInTask *_inTask;
  PilotTrayOutTask *_outTask;

  int spawnTasks();

};

#endif




