org.mbari.siam.devices.metsys
Class Metsys

java.lang.Object
  extended by java.rmi.server.RemoteObject
      extended by java.rmi.server.RemoteServer
          extended by java.rmi.server.UnicastRemoteObject
              extended by org.mbari.siam.core.DeviceService
                  extended by org.mbari.siam.core.InstrumentService
                      extended by org.mbari.siam.devices.metsys.Metsys
All Implemented Interfaces:
java.io.Serializable, java.rmi.Remote, ScheduleOwner, Device, DeviceServiceIF, Instrument

public class Metsys
extends InstrumentService
implements Instrument

A Campbell Scientific CR10X, an embedded microprocessor based datalogger, coordinates the sampling of the Metsys sensors. The embedded system also provides serial communications to the host system so the sampled data can also be transmitted to a PC or mooring controller. The subsystem is preconfigured to take a sample set of all sensors every 10 minutes (1 minute in test mode). The instrument has three distinct operating modes "awake" (or command mode), "asleep" - a low power mode but able to wake itself up automatically at sampling time and "off" - powered down completely. This last operating mode is not a deployment option. To wake the instrument, two carriage returns are sent to the communications port spaced by a small delay to allow the CR10X to wake up before receiving the second character. Sending this second character to the unit causes the unit to enter command mode. The instrument responds with the prompt "*". When in command mode the unit can be interrogated and any number of previous samples can be requested from the instrument's circular buffer. To exit command mode an "E" command is sent and the unit returns to the low power sleep mode. Sample Buffer Management The CR10X's sample buffer is controlled by 2 main pointers, the write pointer (reference) and the read pointer (location). Once initialized, it is the responsibility of the Sidearm to control the position of the "location" pointer; the "reference" pointer is exclusively controlled by the Metsys. The first time the Sidearm initializes the Metsys, the "location" pointer is set to the "reference" pointer. A persistent copy of the "location" pointer is always maintained in "SIAM_HOME/logs/metloc". Should the Sidearm power fail after initialization, the stored location pointer is recovered and used to determine how many records to acquire. There is a limit to the number of past records that the Sidearm can acquire. This limit is programmable using the "retroSave" property (see below).

See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.mbari.siam.core.InstrumentService
_defaultSampleScheduleName, _instrumentAttributes, _lastPacket, _lastSensorDataPacket, _log4j, _messagePacket, _packetLog, _recordType, _schedules, _sensorDataPacket, RECORDTYPE_DEFAULT, RECORDTYPE_METADATA, RECORDTYPE_UNDEFINED
 
Fields inherited from class org.mbari.siam.core.DeviceService
_fromDevice, _instrumentPort, _nodeProperties, _parentNode, _regEntry, _sandBox, _serviceCachePath, _serviceName, _servicePropertiesPath, _serviceXMLPath, _toDevice, CACHED_PROPERTIES_FILENAME, PROPERTIES_FILENAME, XML_FILENAME
 
Fields inherited from class java.rmi.server.RemoteObject
ref
 
Fields inherited from interface org.mbari.siam.distributed.Device
ERROR, INITIAL, INSTRUMENT_STATE, MDATA_ALL, OK, SAFE, SAMPLING, SERVICE_ATTRIBUTES, SERVICE_CACHE, SERVICE_PROPERTIES, SERVICE_XML, SHUTDOWN, SLEEPING, SUSPEND, UNKNOWN
 
Constructor Summary
Metsys()
           
 
Method Summary
protected  ScheduleSpecifier createDefaultSampleSchedule()
          Return specifier for default sampling schedule.
protected  byte[] getInstrumentMetadata()
          Not implemented
 SerialPortParameters getSerialPortParameters()
          Return parameters to use on serial port.
protected  PowerPolicy initCommunicationPowerPolicy()
          Return communications interface power policy.
protected  int initCurrentLimit()
          Specify current limit in increments of 120 mA upto 11880 mA.
protected  void initializeInstrument()
          Called by the framework to initialize the instrument prior to sampling.
protected  PowerPolicy initInstrumentPowerPolicy()
          Return instrument power policy.
protected  int initInstrumentStartDelay()
          Specify startup delay (millisec)
protected  int initMaxSampleBytes()
          Specify maximum bytes in raw sample.
protected  byte[] initPromptString()
          Specify prompt string.
protected  byte[] initSampleTerminator()
          Specify sample terminator.
protected  void postSample()
          Deal with Metsys after sample received or on error during sampling/validating...
protected  void prepareToSample()
          Wakeup the Metsys in preparation to sample.
protected  void printData(byte[] buf)
          Called by the framework after the sample data has been captured to optionally print the contents of the sample buffer for debug purposes.
protected  void requestSample()
          Issue command to Metsys to acquire lastest sample(s)
 void setClock(long t)
          Not implemented.
 int test()
          Run device's self-test routine.
protected  void validateSample(byte[] _sampleBuf, int nBytes)
          Called by the framwwork after receiving sample.
 
Methods inherited from class org.mbari.siam.core.InstrumentService
acquire, acquireSample, addDefaultPacketFilters, addSchedule, addSchedule, annotate, cacheProperties, checkInputProperties, cleanupServiceState, clearDefaultPacketFilters, clearPropertiesCache, createTask, disableSamplingDiagnostics, disableSummary, doScheduledTask, enableSamplingDiagnostics, enableSummary, getAllSchedules, getChildren, getCommunicationPowerPolicy, getCurrentLimit, getDefaultPacketFilters, getDefaultSampleSchedule, getDefaultSampleScheduleName, getDevicePacketParser, getFileBytes, getInstrumentBlock, getInstrumentPowerPolicy, getInstrumentStartDelay, getInstrumentStateMetadata, getLastSample, getLocation, getMaxSampleBytes, getMaxSampleTries, getMetadata, getMetadata, getMetadataPayload, getPackets, getPackets, getParent, getParser, getPortDiagnostics, getPortDiagnosticsSummary, getPromptString, getProperties, getProperty, getSampleBuf, getSampleSchedule, getSampleTerminator, getSampleTimeout, getSchedule, getScheduleKey, getSchedules, getServiceCacheBytes, getServicePropertiesBytes, getServiceXMLBytes, initialize, initializeDriverDefaults, initServiceState, interruptSampling, logPacket, managePowerSleep, managePowerWake, parseDataPacket, powerOff, powerOffCallback, powerOn, powerOnCallback, prepareToRun, processSample, readSample, removeAllSchedules, removeSchedule, resetPortDiagnostics, resumeSchedule, running, setAttributes, setClock, setCommunicationPowerPolicy, setCurrentLimit, setDefaultSampleScheduleName, setInstrumentBlock, setInstrumentPowerPolicy, setInstrumentStartDelay, setMaxSampleBytes, setMaxSampleTries, setPromptString, setProperty, setRecordType, setSampleTerminator, setSampleTimeout, shutdown, shutdownInstrument, sleepingUntil, summaryEnabled, suspend, suspendSchedule, sync, syncSchedule
 
Methods inherited from class org.mbari.siam.core.DeviceService
addDataListener, advertiseService, createRegistryEntry, getAttributes, getCommPortName, getFrameworkVersion, getId, getInstrumentPort, getName, getRemoteSerialPort, getRemoteSerialPort, getSamplingCount, getSamplingErrorCount, getSamplingRetryCount, getStatus, host, incRetryCount, initializePropertyDefaults, registryEntry, registryName, removeDataListener, resume, setInstrumentPort, setNodeProperties, setParent, setSerialPort, setStatusError, setStatusInitial, setStatusOk, setStatusSafe, setStatusSampling, setStatusShutdown, setStatusSuspend
 
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, unexportObject
 
Methods inherited from class java.rmi.server.RemoteServer
getClientHost, getLog, setLog
 
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.mbari.siam.distributed.Instrument
acquireSample, addDefaultPacketFilters, annotate, cacheProperties, clearDefaultPacketFilters, clearPropertiesCache, disableSummary, enableSummary, getDefaultPacketFilters, getLastSample, getPackets, getPackets, getParser, getPortDiagnostics, getPortDiagnosticsSummary, getProperties, getProperty, getSampleSchedule, getSchedules, resetPortDiagnostics, setClock, setProperty, summaryEnabled
 
Methods inherited from interface org.mbari.siam.distributed.Device
getChildren, getCommPortName, getFrameworkVersion, getId, getLocation, getMetadata, getName, getParent, getSamplingCount, getSamplingErrorCount, getSamplingRetryCount, getStatus, host, powerOff, powerOn, prepareToRun, resume, shutdown, suspend
 
Methods inherited from interface org.mbari.siam.distributed.DeviceServiceIF
getName
 

Constructor Detail

Metsys

public Metsys()
       throws java.rmi.RemoteException
Throws:
java.rmi.RemoteException - .
Method Detail

initInstrumentStartDelay

protected int initInstrumentStartDelay()
Specify startup delay (millisec)

Specified by:
initInstrumentStartDelay in class InstrumentService

initPromptString

protected byte[] initPromptString()
Specify prompt string.

Specified by:
initPromptString in class InstrumentService

initSampleTerminator

protected byte[] initSampleTerminator()
Specify sample terminator.

Specified by:
initSampleTerminator in class InstrumentService

initMaxSampleBytes

protected int initMaxSampleBytes()
Specify maximum bytes in raw sample.

Specified by:
initMaxSampleBytes in class InstrumentService

initCurrentLimit

protected int initCurrentLimit()
Specify current limit in increments of 120 mA upto 11880 mA.

Specified by:
initCurrentLimit in class InstrumentService

initInstrumentPowerPolicy

protected PowerPolicy initInstrumentPowerPolicy()
Return instrument power policy.

Specified by:
initInstrumentPowerPolicy in class InstrumentService
Returns:
power policy

initCommunicationPowerPolicy

protected PowerPolicy initCommunicationPowerPolicy()
Return communications interface power policy.

Specified by:
initCommunicationPowerPolicy in class InstrumentService
Returns:
power policy

createDefaultSampleSchedule

protected ScheduleSpecifier createDefaultSampleSchedule()
                                                 throws ScheduleParseException
Return specifier for default sampling schedule.

Specified by:
createDefaultSampleSchedule in class InstrumentService
Returns:
default sample schedule
Throws:
ScheduleParseException

getSerialPortParameters

public SerialPortParameters getSerialPortParameters()
                                             throws gnu.io.UnsupportedCommOperationException
Return parameters to use on serial port.

Overrides:
getSerialPortParameters in class DeviceService
Throws:
gnu.io.UnsupportedCommOperationException

initializeInstrument

protected void initializeInstrument()
                             throws InitializeException,
                                    java.lang.Exception
Called by the framework to initialize the instrument prior to sampling. Normally this method will use properties determined by the setProperties method.

Overrides:
initializeInstrument in class InstrumentService
Throws:
InitializeException
java.lang.Exception

prepareToSample

protected void prepareToSample()
                        throws java.lang.Exception
Wakeup the Metsys in preparation to sample. Determine how many records we need to retrieve based on our current position and the position that's been reached by the Metsys

Overrides:
prepareToSample in class InstrumentService
Throws:
java.lang.Exception

requestSample

protected void requestSample()
                      throws TimeoutException,
                             java.lang.Exception
Issue command to Metsys to acquire lastest sample(s)

Specified by:
requestSample in class InstrumentService
Throws:
TimeoutException
java.lang.Exception - not thrown

validateSample

protected void validateSample(byte[] _sampleBuf,
                              int nBytes)
                       throws InvalidDataException
Called by the framwwork after receiving sample. Fetches last line appended to sample data containing checkusm information. Calculates checksum of received sample and compares w/ expected checksum in trailer.

Overrides:
validateSample in class InstrumentService
Parameters:
_sampleBuf - sample data
nBytes - number of bytes captured
Throws:
InvalidDataException - if checksum failed

postSample

protected void postSample()
Deal with Metsys after sample received or on error during sampling/validating... If no error saves the current reference pointer as the new location pointer for next time. If an error was detected then the location pointer isn't updated and an attempt will be made to recover it next time. Switches metsys to sleep mode

Overrides:
postSample in class InstrumentService

getInstrumentMetadata

protected byte[] getInstrumentMetadata()
Not implemented

Returns:
instrument metadata (byte[])

setClock

public void setClock(long t)
Not implemented. Samples are locally timestamped

Specified by:
setClock in interface Instrument
Specified by:
setClock in class InstrumentService
Parameters:
t -

printData

protected void printData(byte[] buf)
Called by the framework after the sample data has been captured to optionally print the contents of the sample buffer for debug purposes.

Overrides:
printData in class InstrumentService
Parameters:
buf - sample buffer

test

public int test()
Description copied from interface: Device
Run device's self-test routine.

Specified by:
test in interface Device


Copyright © 2003 MBARI.

The Monterey Bay Aquarium Research Institute (MBARI) provides this documentation and code "as is", with no warranty, express or implied, of its quality or consistency. It is provided without support and without obligation on the part of MBARI to assist in its use, correction, modification, or enhancement.