/*
********************************************************
Copyright 2000 MBARI.
MBARI Proprietary Information. All rights reserved.
NOTE: This file is automatically generated.
DO NOT MODIFY.
********************************************************
*/

#ifndef __DockIF_H
#define __DockIF_H

#include "TaskInterface.h"

#include "InstrumentIF.h"
#include "TimeIF.h"

#define DockIFServerName "DockIFServer"

class DockIF : public InstrumentIF {

  friend class DockIF_SK;

  public:

  
  
  typedef char String512[512];
  typedef char String32[32];
  
  DockIF(const char *name, int timeout = 10);

  DockIF(const char *name, const char *serverName, int timeout = 10);

  ~DockIF();

  /////////////////////////////////////////////////////////
  // Return true if device is ready to go, otherwise false
  Boolean ready();

  /////////////////////////////////////////////////////////
  // Request on-board PIC status:
  //
  DeviceIF::Status request_vehicle_status();

  /////////////////////////////////////////////////////////
  // Read on-board PIC status:
  //
  DeviceIF::Status read_vehicle_PIC(DockIF::String512 pic_status, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Request dock PIC status:
  //
  DeviceIF::Status request_dock_status();

  /////////////////////////////////////////////////////////
  // Request dock PIC status:
  //
  DeviceIF::Status set_dock_state(DockIF::String32 state);

  /////////////////////////////////////////////////////////
  // Read dock PIC status:
  //
  DeviceIF::Status read_dock_PIC(DockIF::String512 pic_status, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Request resolver status:
  //
  DeviceIF::Status query_resolver();

  /////////////////////////////////////////////////////////
  // Read resolver state
  //
  DeviceIF::Status read_resolver(DockIF::String32 state, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Request probe status:
  //
  DeviceIF::Status query_probe();

  /////////////////////////////////////////////////////////
  // Read probe state
  //
  DeviceIF::Status read_probe(DockIF::String32 state, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Request probe motion:
  //
  DeviceIF::Status move_probe(DockIF::String32 probeCmd);

  /////////////////////////////////////////////////////////
  // Turn continuous network, probe and resolver query on or off
  //
  DeviceIF::Status set_continuous_query(Boolean state, short timeOut);

  /////////////////////////////////////////////////////////
  // Continuously read the network status, probe and resolver
  //
  DeviceIF::Status read_continuous_query(Boolean *networkPresent, DockIF::String32 probeStatus, DockIF::String32 resolverStatus, double *sampleTime);

  /////////////////////////////////////////////////////////
  // Open the dock Ethernet port:
  //
  DeviceIF::Status open_port();

  /////////////////////////////////////////////////////////
  // Close the dock Ethernet port:
  //
  DeviceIF::Status close_port();

  /////////////////////////////////////////////////////////
  // Close the dock Ethernet port:
  //
  DeviceIF::Status ping(short timeOut);

  /////////////////////////////////////////////////////////
  // Close the dock Ethernet port:
  //
  DeviceIF::Status ping_result(short *pingError, double *sampleTime);

  
  protected:

  // Message codes for each method
  enum DockIFMsgCode {
    ReadyMsgCode = 8,
    Request_vehicle_statusMsgCode,
    Read_vehicle_PICMsgCode,
    Request_dock_statusMsgCode,
    Set_dock_stateMsgCode,
    Read_dock_PICMsgCode,
    Query_resolverMsgCode,
    Read_resolverMsgCode,
    Query_probeMsgCode,
    Read_probeMsgCode,
    Move_probeMsgCode,
    Set_continuous_queryMsgCode,
    Read_continuous_queryMsgCode,
    Open_portMsgCode,
    Close_portMsgCode,
    PingMsgCode,
    Ping_resultMsgCode
  };

  // Define message structure for each method
  struct ReadyMsg : Request, Reply {
    Boolean returnVal;
  
  } _readyMsg;

  struct Request_vehicle_statusMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _request_vehicle_statusMsg;

  struct Read_vehicle_PICMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String512 pic_status;
    TimeIF::TimeSpec sampleTime;
  
  } _read_vehicle_PICMsg;

  struct Request_dock_statusMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _request_dock_statusMsg;

  struct Set_dock_stateMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String32 state;
  
  } _set_dock_stateMsg;

  struct Read_dock_PICMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String512 pic_status;
    TimeIF::TimeSpec sampleTime;
  
  } _read_dock_PICMsg;

  struct Query_resolverMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _query_resolverMsg;

  struct Read_resolverMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String32 state;
    TimeIF::TimeSpec sampleTime;
  
  } _read_resolverMsg;

  struct Query_probeMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _query_probeMsg;

  struct Read_probeMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String32 state;
    TimeIF::TimeSpec sampleTime;
  
  } _read_probeMsg;

  struct Move_probeMsg : Request, Reply {
    DeviceIF::Status returnVal;
    DockIF::String32 probeCmd;
  
  } _move_probeMsg;

  struct Set_continuous_queryMsg : Request, Reply {
    DeviceIF::Status returnVal;
    Boolean state;
    short timeOut;
  
  } _set_continuous_queryMsg;

  struct Read_continuous_queryMsg : Request, Reply {
    DeviceIF::Status returnVal;
    Boolean networkPresent;
    DockIF::String32 probeStatus;
    DockIF::String32 resolverStatus;
    double sampleTime;
  
  } _read_continuous_queryMsg;

  struct Open_portMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _open_portMsg;

  struct Close_portMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _close_portMsg;

  struct PingMsg : Request, Reply {
    DeviceIF::Status returnVal;
    short timeOut;
  
  } _pingMsg;

  struct Ping_resultMsg : Request, Reply {
    DeviceIF::Status returnVal;
    short pingError;
    double sampleTime;
  
  } _ping_resultMsg;

};

#endif

