/****************************************************************************/
/* Copyright (c) 2001 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : Isus.h                                                        */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 06/01/2001                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#ifndef _ISUS_H
#define _ISUS_H

#include "SerialDeviceDriver.h"
#include "IsusOutput.h"
#include "IsusLog.h"
#include "Attributes.h"

/*
CLASS
Isus

DESCRIPTION
Isus Device Driver Interface

AUTHOR
Rich Henthorn

*/
#define MaxRecordBytes 200

class Isus : public SerialDeviceDriver {
  
  friend class IsusLog;

public:

  Isus(SerialDevice *serialDevice, Boolean lampOn, Boolean verbose);

  virtual ~Isus();

  DeviceIF::Status stop();

  DeviceIF::Status start();

  DeviceIF::Status setTime(unsigned long secondsSince1980);

protected:

  IsusLog *_log;

  IsusOutput *_output;

  double _nitrate;
  
  double _temp;
  
  double _quality;
  
  Boolean _verbose;

  Boolean _lampOn;
  char _recordBuf[MaxRecordBytes];
  int _nBytes;

  ////////////////////////////////////////////////////////////////////
  // initialization routine
  virtual DeviceIF::Status initialize();

  ////////////////////////////////////////////////////////////////////
  // Read a fixed-length record
  virtual DeviceIF::Status readRecord(unsigned char *record,
				      int maxRecordBytes,
				      const char *recordTerminator,
				      unsigned readTimeout,
				      int *nBytesRead);
  
  ////////////////////////////////////////////////////////////////////
  // Process a record
  virtual DeviceIF::Status  processRecord(unsigned char *record, int nRecordBytes);

  ////////////////////////////////////////////////////////////////////
  // Provide a standard way to write to the ShMem output buffer
  void writeOutput(char *msg="");
};

#endif
