#include "InstrumentIF.idl"


interface AcousticModemIF {

  typedef sequence<char,180> modemString;
  struct SMAC_SAN_RECORD {
    // Data from WinFrog
    float wfTime;    // Timestamp
    float wfLat;     // Latitude
    float wfLong;    // Longitude
    float wfSlant;   // Slant range
  };

  enum SMAC_CMD_TYPE {
    REQ_STAT,
  	REQ_SAN_ON,
    REQ_SAN_OFF,
    ABORT_MISSION,
    START_SURVEY,
    INVALID_CMD
  };

  DeviceIF::Status setRegister(in short reg_number, in short value);

  DeviceIF::Status power(in short powerLevel); // 1 lowest, 8 highest

  DeviceIF::Status transpond(in short tenths_of_kHz); // 90 lowest, 140 highest

  DeviceIF::Status range(in short remoteModem, out float meters);

  DeviceIF::Status dopplerCorrection(in boolean on_off);

  DeviceIF::Status writeString(in modemString mstr);
  DeviceIF::Status sendStatus();
  DeviceIF::Status getSANFix(out SMAC_SAN_RECORD sanFix, out boolean newData);
  DeviceIF::Status getSMACCmd(out SMAC_CMD_TYPE cmd, out boolean newCmd);
};
