#ifndef _LAPBOXAPP_H
#define _LAPBOXAPP_H

#include "LapBoxTaskControl.h"
#include "LapBoxMicro.h"
#include "ErrorHandler.h"
#include "LapBoxInTask.h"
#include "LapBoxOutTask.h"

extern "C" 
{
#include "rovPriority.h"
#include "logLib.h"
};

#define LAP_BOX_DM_PERIOD       50000/* Lap Box Telemetery Update           */
#define USECS_PER_SEC         1000000L
#define FULL_SCALE              1024.0


class LapBoxApp : public ErrorHandler
{
 public:
 LapBoxApp(Nat16 lapBoxSerialChan, const char *name, const char *dmPrefix);
 ~LapBoxApp();

 // Set state of pan-tilt buttons
 static void setPanTiltButtons(unsigned short devices, 
			       unsigned short oldDevices,
			       LapBoxMicro *obj);

 // Set state of camera-select buttons 
 static void setCameraButtons(IviewDevice requestedCamera,
			      IviewDevice actualCamera,
			      LapBoxMicro *obj);

 // Return camera-select LapBoxButton corresponding to IviewDevice
 static LapBoxButton cameraButton(IviewDevice camera);

 // Return pan-tilt LapBoxButton corresponding to IviewDevice
 static LapBoxButton panTiltButton(IviewDevice panTilt);
 
 static void updateAxis(Int16 *joystickX,
			  Int16 *joystickY,
			  Int16 *zoom,
			  Int16 *focus,
			  Int16 *iris);

 int run();
 
 protected:
  char * _name;
  LapBoxTaskControl *_params;
  LapBoxMicro  *_uiObject; 

  IviewDeviceMask _deviceMask;
  IviewDeviceMask _deviceMaskZFI;

  IviewDevice _camera;
  IviewDevice _cameraZFI;

  //Iview Control Objects
  IviewControl *_iviewControlPT;
  IviewControl *_iviewControlZFI;  

  static void runInputTask(LapBoxApp *obj);
  static void runOutputTask(LapBoxApp *obj); 

  void inputTask();
  void outputTask();
 
  void processButton(LapBoxButton button); 

  LapBoxInTask *_inTask;
  LapBoxOutTask *_outTask;

  int spawnTasks();
 
};

#endif




