Task IDL Specifications
AdvIF
AltimeterIF
BatteryIF
BuoyLauncherIF
CompassIF
CtdIF
DepthSensorIF
DropWeightIF
DynamicControlIF
ExternalCommsIF
FuelCellIF
InclinometerIF
LayeredControlIF
LblIF
MissionPlanIF
NavigationIF
PowerSystemIF
TailConeIF
VehicleConfigurationIF
WorkSiteIF
/*
CLASS
AdvIF
DESCRIPTION
TaskInterface to Adv ("Acoustic Doppler Velocimeter") device driver
AUTHOR
Tom O'Reilly
*/
interface AdvIF {
/////////////////////////////////////////////////////////
// Water speed
// [output] speed: Speed (m/sec)
// [output] time: Sample time
long waterSpeed(out float speed, out long time);
/////////////////////////////////////////////////////////
// Velocity vector
// [output] dx: Velocity x component
// [output] dy: Velocity y component
// [output] dz: Velocity z component
// [output] quality: Data quality
// [output] time: Sample time
long velocity(out double dx, out double dy, out double dz,
out short quality,
out long time);
};
/*
CLASS
AltimeterIF
DESCRIPTION
TaskInterface to Altimeter device driver
AUTHOR
Tom O'Reilly
*/
interface AltimeterIF {
/////////////////////////////////////////////////////////
// Altitude in meters
// [output] meters: Altitude in meters
// [output] time: Sample time
// [output] quality: Data quality
long altitude(out float meters, out long time, out short quality);
};
/*
CLASS
BatteryIF
DESCRIPTION
TaskInterface to Battery device driver
AUTHOR
Tom O'Reilly
*/
interface BatteryIF {
////////////////////////////////////////////////////////////
// Events generated by Battery device driver
enum Events {
LowPower,
OverVoltage,
UnderVoltage
};
///////////////////////////////////////////////////////////////////
// Return life in amp-hours
long life();
///////////////////////////////////////////////////////////////////
// Get cutoff voltage
float cutoffVoltage();
///////////////////////////////////////////////////////////////////
// Set cutoff voltage
// [input] voltage: cutoff voltage
long setCutoffVoltage(in float voltage);
};
/*
CLASS
BuoyLauncherIF
DESCRIPTION
TaskInterface to BuoyLauncher device driver
AUTHOR
Tom O'Reilly
*/
interface BuoyLauncherIF {
////////////////////////////////////////////////////////////
// Events generated by BuoyLauncher device driver
enum Events {
Launched,
Misfired
};
///////////////////////////////////////////////////////////////////
// Total number of buoys (launched + unlaunched)
short nBuoys();
///////////////////////////////////////////////////////////////////
// Number of buoys launched
short nBuoysLaunched();
///////////////////////////////////////////////////////////////////
// Number of buoys remaining
short nBuoysRemaining();
///////////////////////////////////////////////////////////////////
// Launch specified buoy
// [input] buoyNo: Buoy to be launched
long launch(in short buoyNo);
///////////////////////////////////////////////////////////////////
// Has specified buoy been launched?
// [input] buoyNo: Buoy to check
boolean launched(in short buoyNo);
};
/*
CLASS
CompassIF
DESCRIPTION
TaskInterface to Compass device driver
AUTHOR
Tom O'Reilly
*/
interface CompassIF {
enum Event {
Online,
Offline,
CommsFailure
};
/////////////////////////////////////////////////////////
// Get heading value
// [output] value: Heading in degrees
// [output] time: Sampling time
// [output] quality: Data quality
long heading(out double value, out long time, out short quality);
/////////////////////////////////////////////////////////
// Get heading value and rate
// [output] value: Heading in degrees
// [output] value: Heading rate in degrees/sec
// [output] time: Sampling time
// [output] quality: Data quality
long heading(out double value, out double rate,
out long time, out short quality);
///////////////////////////////////////////////////////////////////
// Initiate calibration routine
long calibrate();
};
/*
CLASS
CtdIF
DESCRIPTION
TaskInterface to Ctd device driver
AUTHOR
Tom O'Reilly
*/
interface CtdIF {
enum Event {
Online,
Offline
};
/////////////////////////////////////////////////////////
// Salinity
// [output] value: Salinity in PSU's
// [output] time: Sample time
long salinity(out double value, out long time);
/////////////////////////////////////////////////////////
// [output] value: Conductivity
// [output] time: Sample time
long conductivity(out double value, out long time);
/////////////////////////////////////////////////////////
// [output] value: temperature
// [output] time: Sample time
long temperature(out float value, out long time);
/////////////////////////////////////////////////////////
// [output] value: depth
// [output] time: Sample time
long depth(out double value, out long time);
/////////////////////////////////////////////////////////
// [output] value: pressure
long pressure(out float value, out long time);
/////////////////////////////////////////////////////////
// Calculated speed of sound
// [output] value: Speed of sound, in meters per second
// [output] time: Sample time
long speedOfSound(out double value, out long time);
/////////////////////////////////////////////////////////
// Set atmospheric pressure
// [input] pressure: Atmospheric (surface) pressure
long setAtmPressure(in float pressure);
///////////////////////////////////////////////////////////////////
// Get raw values
// [output] conductFreq: Conductivity frequency
// [output] tempFreq: Temperature frequency
// [output] time: Sample time
long rawValues(out float conductFreq, out float tempFreq, out long time);
///////////////////////////////////////////////////////////////////
// Start pump
long startPump();
///////////////////////////////////////////////////////////////////
// Stop pump
long stopPump();
};
/*
CLASS
DepthSensorIF
DESCRIPTION
TaskInterface to DepthSensor device driver
AUTHOR
Tom O'Reilly
*/
interface DepthSensorIF {
/////////////////////////////////////////////////////////
// Pressure
// [output] value: Pressure (units?)
// [output] time: Sample time
long pressure(out float value, out long time);
/////////////////////////////////////////////////////////
// Temperature
// [output] value: Temperature (units?)
// [output] time: Sample time
long temperature(out float value, out long time);
// There may be lots of commands to setup the sensor
};
/*
CLASS
DropWeightIF
DESCRIPTION
TaskInterface to DropWeight device driver
AUTHOR
Tom O'Reilly
*/
interface DropWeightIF {
enum Event {
Online,
Offline,
Installed,
Released
};
/////////////////////////////////////////////////////////
// Release drop-weight
long release();
/////////////////////////////////////////////////////////
// Weight released?
boolean released();
///////////////////////////////////////////////////////////////////
// Set watchdog timeout
// [input] timeout: Timeout (seconds)
long setWatchdogTimeout(in long timeout);
///////////////////////////////////////////////////////////////////
// Get watchdog timeout
long watchdogTimeout();
///////////////////////////////////////////////////////////////////
// Reset watchdog timer
long resetWatchdog();
};
/*
CLASS
DynamicControlIF
DESCRIPTION
TaskInterface to DynamicControl
AUTHOR
Tom O'Reilly
*/
interface DynamicControlIF {
////////////////////////////////////////////////////////////
// Events generated by DynamicControl
enum Event {
Update
};
enum DepthMode { DmInitial = -1, Elevator, Depth, Pitch };
enum HeadingMode { HmInitial = -1, Rudder, Heading, Waypoint };
enum SpeedMode { SmInitial = -1, Current, Speed };
/////////////////////////////////////////////////////////
// Describes command output of LayeredControl
struct Command {
double depth;
double heading;
double speed;
DepthMode depthMode;
HeadingMode headingMode;
SpeedMode speedMode;
};
///////////////////////////////////////////////////////////////////
// Command depth, heading, speed
void setCommand(in Command command);
///////////////////////////////////////////////////////////////////
// Set maximum heading rate
// [input] rate: Maximum heading rate (meters/sec)
void setMaxHeadingRate(in double rate);
///////////////////////////////////////////////////////////////////
// Get maximum heading rate (meters/sec)
double maxHeadingRate();
///////////////////////////////////////////////////////////////////
// Set maximum depth rate
// [input] rate: Maximum depth rate (meters/sec)
void setMaxDepthRate(in double rate);
///////////////////////////////////////////////////////////////////
// Get maximum depth rate (meters/sec)
double maxDepthRate();
///////////////////////////////////////////////////////////////////
// Set tau
void setTau(in float tau);
///////////////////////////////////////////////////////////////////
// Get tau
float tau();
///////////////////////////////////////////////////////////////////
// Set pitch servo gains
void setPitchServoGains(in double proportional, in double integral,
in double derivative);
///////////////////////////////////////////////////////////////////
// Get pitch servo gains
void pitchServoGains(out double proportional, out double integral,
out double derivative);
///////////////////////////////////////////////////////////////////
// Set heading servo gains
void setHeadingServoGains(in double proportional, in double integral,
in double derivative);
///////////////////////////////////////////////////////////////////
// Get heading servo gains
void headingServoGains(out double proportional, out double integral,
out double derivative);
};
/*
CLASS
ExternalCommsIF
DESCRIPTION
TaskInterface to ExternalComms
AUTHOR
Tom O'Reilly
*/
interface ExternalCommsIF {
/////////////////////////////////////////////////////////////////
// Events generated by ExternalComms
enum Event {
LinkChange,
LinkUp,
LinkDown
};
/////////////////////////////////////////////////////////////////
// Communications link state
enum Channel {
NoLink,
Ethernet,
Radio,
Acoustic
};
/////////////////////////////////////////////////////////////////
// Set communications Channel
// [input] channel: Channel to use
long setChannel(in Channel channel);
/////////////////////////////////////////////////////////////////
// Get communications Channel
// [output] channel: Channel currently in use
void channel(out Channel channel);
};
/*
CLASS
FuelCellIF
DESCRIPTION
TaskInterface to FuelCell device driver
AUTHOR
Tom O'Reilly
*/
interface FuelCellIF {
////////////////////////////////////////////////////////////
// Events generated by FuelCell device driver
enum Events {
LowPower,
OverVoltage,
UnderVoltage
};
///////////////////////////////////////////////////////////////////
// Return life in amp-hours
long life(out long ampHours);
///////////////////////////////////////////////////////////////////
// Get cutoff voltage
long cutoffVoltage(out float voltage);
///////////////////////////////////////////////////////////////////
// Set cutoff voltage
// [input] voltage: Cutoff voltage
long setCutoffVoltage(in float voltage);
///////////////////////////////////////////////////////////////////
// Prepare to launch
long launch();
///////////////////////////////////////////////////////////////////
// Hold (?)
long hold();
///////////////////////////////////////////////////////////////////
// Start generating power
// [output] healthy: FuelCell healthy?
// [output] safe: FuelCell safe?
long start(out boolean healthy, out boolean safe);
///////////////////////////////////////////////////////////////////
// Stop generating power
long stop();
///////////////////////////////////////////////////////////////////
// Perform self-test
// [output] passed: Passed self-test?
long selfTest(out boolean passed);
};
/*
CLASS
InclinometerIF
DESCRIPTION
TaskInterface to Inclinometer device driver
AUTHOR
Tom O'Reilly
*/
interface InclinometerIF {
/////////////////////////////////////////////////////////
// Attitude
// [output] roll: Roll (deg)
// [output] pitch: Pitch (deg)
// [output] yaw: Yaw (deg)
// [output] quality: Data quality
// [output] time: Sample time
long attitude(out double roll, out double pitch, out double yaw,
out short quality, out long time);
/////////////////////////////////////////////////////////
// Attitude rates
// [output] rollRate: Roll rate (deg)
// [output] pitchRate: Pitch rate (deg)
// [output] yawRate: Yaw rate (deg)
// [output] quality: Data quality
// [output] time: Sample time
long rates(out double rollRate, out double pitchRate, out double yawRate,
out short quality, out long time);
};
/*
CLASS
LayeredControlIF
DESCRIPTION
TaskInterface to LayeredControl
AUTHOR
Tom O'Reilly
*/
interface LayeredControlIF {
/////////////////////////////////////////////////////////
// Events generated by LayeredControl
enum Event {
MissionStatusChange,
BadMissionPlan
};
enum DepthMode { DmInitial = -1, Elevator, Depth, Pitch };
enum HeadingMode { HmInitial = -1, Rudder, Heading, Waypoint };
enum SpeedMode { SmInitial = -1, Current, Speed };
/////////////////////////////////////////////////////////
// Describes command output of LayeredControl
struct OutputCommand {
double depth;
double heading;
double speed;
DepthMode depthMode;
HeadingMode headingMode;
SpeedMode speedMode;
};
///////////////////////////////////////////////////////
// Get current LayeredControl output command
// [output] command: Current OutputCommand
void getCommand(out OutputCommand command);
///////////////////////////////////////////////////////
// Elapsed mission time (seconds)
long elapsedMissionTime();
///////////////////////////////////////////////////////
// Abort mission
void abort();
};
/*
CLASS
LblIF
DESCRIPTION
TaskInterface to Lbl device driver
AUTHOR
Tom O'Reilly
*/
interface LblIF {
enum Event {
NewData
};
///////////////////////////////////////////////////////////////////
// Get position
// [output] northing: Northing (meters)
// [output] easting: Easting (meters)
// [output] nRanges: Number of transponders used in calculation
// [output] quality: Data quality
long position(out double northing, out double easting, out short nRanges,
out double quality);
///////////////////////////////////////////////////////////////////
// Get slantRanges - NEED TO IMPLEMENT ARRAYS FOR IDL
long slantRanges();
///////////////////////////////////////////////////////////////////
// Update request
// [input] timeout: Timeout (secs) for update request
// [input] lockout: ???
long update(in long timeout, in long lockout);
};
/*
CLASS
MissionPlanIF
DESCRIPTION
TaskInterface to MissionPlan
AUTHOR
Tom O'Reilly
*/
interface MissionPlanIF {
typedef sequence BehaviorArgs;
struct Behavior {
/////////////////////////////////////////////////////////
// Unique identifier for Behavior
long id;
/////////////////////////////////////////////////////////
// Arguments to Behavior
BehaviorArgs args;
/////////////////////////////////////////////////////////
// Priority within plan
short priority;
/////////////////////////////////////////////////////////
// Starting mission time of behavior
long startTime;
/////////////////////////////////////////////////////////
// Duration of behavior
long duration;
};
typedef sequence Behaviors;
/////////////////////////////////////////////////////////
// Get entire plan
// [output] nBehaviors: Number of Behaviors in plan
// [output] Behaviors: Array of Behaviors
short getPlan(out short nBehaviors, out Behaviors behaviors);
/////////////////////////////////////////////////////////
// Number of Behaviors
short nBehaviors();
/////////////////////////////////////////////////////////
// Get nth Behavior
short nthBehavior(in short n, out Behavior behavior);
};
/*
CLASS
NavigationIF
DESCRIPTION
TaskInterface to Navigation
AUTHOR
Tom O'Reilly
*/
interface NavigationIF {
////////////////////////////////////////////////////////////
// Defined events
enum Event {
NewAttitude,
NewPosition
};
////////////////////////////////////////////////////////////
// Vehicle attitude and rates
struct Attitude {
double roll;
double pitch;
double yaw;
double rollRate;
double pitchRate;
double yawRate;
long updateTime;
short quality;
};
////////////////////////////////////////////////////////////
// Vehicle position and rates
struct Position {
double x;
double y;
double z;
double depth;
double altitude;
double xRate;
double yRate;
double zRate;
double depthRate;
double altitudeRate;
long updateTime;
short quality;
};
////////////////////////////////////////////////////////////
// Get current navigation State
// [output] position: Vehicle Position
// [output] attitude: Vehicle Attitude
void state(out Position position, out Attitude attitude);
////////////////////////////////////////////////////////////
// Get vehicle heading
// [output] heading: Heading (degrees)
void heading(out double heading);
////////////////////////////////////////////////////////////
// Get vehicle location
// [ouput] latitude: Latitude (degrees)
// [output] longitude: Longitude (degrees)
// [output] depth: Depth (meters)
// [output] altitude: Altitude (meters)
void location(out double latitude, out double longitude,
out double depth, out double altitude);
////////////////////////////////////////////////////////////
// Get speed
// [output] speed: meters/sec
void speed(out float speed);
////////////////////////////////////////////////////////////
// Get vehicle course
// [output] angle: Course angle (degrees)
void course(out double angle);
////////////////////////////////////////////////////////////
// Get vehicle depth
// [output] depth: meters
void depth(out double depth);
////////////////////////////////////////////////////////////
// Get vehicle altitude
// [output] altitude: meters
void altitude(out double altitude);
////////////////////////////////////////////////////////////
// Set magnetic variation
// [input] angle: variation (degrees)
void setMagneticVariation(in double angle);
////////////////////////////////////////////////////////////
// Get magnetic variation angle (degrees)
double magneticVariation();
////////////////////////////////////////////////////////////
// Calculation mode
enum Mode {
DeadReckoning,
Measured
};
///////////////////////////////////////////////////////////////////
// Get calculation mode
void mode(out Mode mode);
};
/*
CLASS
PowerSystemIF
DESCRIPTION
TaskInterface to PowerSystem
AUTHOR
Tom O'Reilly
*/
interface PowerSystemIF {
////////////////////////////////////////////////////////////
// Events generated by PowerSystem
enum Event {
Critical
};
};
/*
CLASS
TailConeIF
DESCRIPTION
TaskInterface to TailCone device driver
AUTHOR
Tom O'Reilly
*/
interface TailConeIF {
enum Event {
Reset,
Online,
Offline,
CommsFailure,
GroundFault,
WaterAlarm,
MotorOverTemperature,
MotorOverCurrent,
ActuatorOverCurrent
};
enum MotorType {
MbariMotor
};
/////////////////////////////////////////////////////////
// Set propeller speed
// [input] rpm: Propeller speed in rpm
long setPropellerSpeed(in long rpm);
/////////////////////////////////////////////////////////
// Set elevator angle
// [input] angle: Angle in degrees
long setElevator(in double angle);
/////////////////////////////////////////////////////////
// Set rudder angle
// [input] angle: Angle in degrees
long setRudder(in double angle);
/////////////////////////////////////////////////////////
// Command speed, elevator, and rudder angles
// [input] speed: Propeller speed in rpm
// [input] elevator: Elevator angle in degrees
// [input] rudder: Rudder angle in degrees
long command(in long speed, in double elevator, in double rudder);
/////////////////////////////////////////////////////////
// Return status
long initialize();
/////////////////////////////////////////////////////////
// Set deadman timer
long setDeadman(in short seconds);
/////////////////////////////////////////////////////////
// Configure tailcone
// [input] serialNo: Serial number
// [input] type: MotorType
// [input] slewRate: Slew rate of actuators (deg/sec)
// [input] currentLimit: current limit of actuators and motor
long configure(in short serialNo, in MotorType type,
in double slewRate, in long currentLimit);
/////////////////////////////////////////////////////////
// Get tailcone configuration
// [output] serialNo: Serial number
// [output] type: MotorType
// [output] slewRate: Slew rate of actuators (deg/sec)
// [output] currentLimit: current limit of actuators and motor
long configuration(out short serialNo, out MotorType type,
out double slewRate, out long currentLimit);
/////////////////////////////////////////////////////////
// Propeller speed
// [output] speed: Propeller speed (rpm)
// [output] time: Sample time
long propellerSpeed(out long speed, out long time);
/////////////////////////////////////////////////////////
// Elevator angle
// [output] angle: Elevator angle (deg)
// [output] time: Sample time
long elevator(out double angle, out long time);
/////////////////////////////////////////////////////////
// Rudder angle
// [output] angle: Rudder angle (deg)
// [output] time: Sample time
long rudder(out double angle, out long time);
/////////////////////////////////////////////////////////
// Get propeller speed, elevator, and rudder angles
// [output] speed: Propeller speed (rpm)
// [output] elevator: Elevator angle (deg)
// [output] rudder: Rudder angle (deg)
// [output] time: Sample time
long actual(out long speed, out double elevator, out double rudder,
out long time);
/////////////////////////////////////////////////////////
// Get status word
// [output] statusWord: health status word
// [output] time: Sample time
long health(out long statusWord, out long time);
/////////////////////////////////////////////////////////
//
// long engineeringTelemetry(long counts, etc....);
/////////////////////////////////////////////////////////
// Get temperatures
// [output] motor: Motor temperature (deg C)
// [output] actuator: Actuator temperature (deg C)
// [output] time: Sample time
long temperatures(out float motor, out float actuator, out long time);
/////////////////////////////////////////////////////////
// Get currents
// [output] motor: Motor current
// [output] actuator: Actuator current
// [output] time: Sample time
long currents(out float motor, out float actuator, out long time);
/////////////////////////////////////////////////////////
// Ground-fault current
// [output] current: Ground-fault current
long groundFault(out float current);
};
/*
CLASS
VehicleConfigurationIF
DESCRIPTION
TaskInterface to VehicleConfiguration
AUTHOR
Tom O'Reilly
*/
interface VehicleConfigurationIF {
typedef sequence Name;
///////////////////////////////////////////////////////////////////
// Get vehicle name
void vehicleName(out Name name);
///////////////////////////////////////////////////////////////////
// Get propeller pitch
double propPitch();
///////////////////////////////////////////////////////////////////
// Get vehicle drag coefficient
double dragCoefficient();
};
/*
CLASS
WorksiteIF
DESCRIPTION
TaskInterface to WorkSite
AUTHOR
Tom O'Reilly
*/
interface WorkSiteIF {
///////////////////////////////////////////////////////////////////
// Approximate latitude
double latitude();
///////////////////////////////////////////////////////////////////
// Approximte longitude
double longitude();
///////////////////////////////////////////////////////////////////
// Surface pressure
double magneticVariation();
///////////////////////////////////////////////////////////////////
// Number of LBL transponders
short nLblTransponders();
///////////////////////////////////////////////////////////////////
// Parameters for nth LBL transponder
// [input] transponderNo: Transponder number
// [output] easting: Transponder easting
// [output] northing: Transponder northing
// [output] depth: Transponder depth
// [output] turnaroundTime: Transponder turnaround
void getTransponder(in short transponderNo,
out double easting, out double northing,
out double depth, out long turnaroundTime);
};