nidas  v1.2-1520
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
nidas::core::DSMSensor Class Referenceabstract

DSMSensor provides the basic support for reading, processing and distributing samples from a sensor attached to a DSM. More...

#include <DSMSensor.h>

Inheritance diagram for nidas::core::DSMSensor:
Inheritance graph
[legend]

Classes

class  MyDictionary
 

Public Member Functions

 DSMSensor ()
 Constructor. More...
 
virtual ~DSMSensor ()
 
void setDSMConfig (const DSMConfig *val)
 Set the DSMConfig for this sensor. More...
 
const DSMConfiggetDSMConfig () const
 What DSMConfig am I associated with? More...
 
const SitegetSite () const
 What Site am I associated with? More...
 
virtual void setDeviceName (const std::string &val)
 Set the name of the system device that the sensor is connected to. More...
 
virtual const std::string & getDeviceName () const
 Fetch the name of the system device that the sensor is connected to. More...
 
virtual void setClassName (const std::string &val)
 Set the class name. More...
 
virtual const std::string & getClassName () const
 Fetch the class name. More...
 
virtual void setCatalogName (const std::string &val)
 Set the name of the catalog entry for this sensor. More...
 
virtual const std::string & getCatalogName () const
 Fetch the name of the catalog entry for this sensor. More...
 
const std::string & getDSMName () const
 Fetch the DSM name. More...
 
virtual std::string getName () const
 Return a name that should fully identify this sensor. More...
 
const std::string & getLocation () const
 Location string. More...
 
void setLocation (const std::string &val)
 
const std::string & getSuffix () const
 Sensor suffix, which is added to variable names. More...
 
void setSuffix (const std::string &val)
 
int getStation () const
 
void setStation (int val)
 
void setHeight (const std::string &val)
 Set sensor height above ground via a string which is added to variable names. More...
 
void setHeight (float val)
 Set sensor height above ground. More...
 
const std::string & getHeightString () const
 Get sensor height above ground in a string. More...
 
float getHeight () const
 Get sensor height above ground. More...
 
void setDepth (const std::string &val)
 Set sensor depth below ground via a string which is added to variable names. More...
 
void setDepth (float val)
 Set sensor depth below ground. More...
 
const std::string & getDepthString () const
 Get sensor depth below ground in a string. More...
 
float getDepth () const
 Get sensor depth below ground. More...
 
const std::string & getFullSuffix () const
 Full sensor suffix, the concatenation of the sensor suffix, if any, and the height or depth string, if any. More...
 
std::string expandString (const std::string &input) const
 Utility function to expand ${TOKEN} or $TOKEN fields in a string with their value from getTokenValue(). More...
 
bool getTokenValue (const std::string &token, std::string &value) const
 Implement a lookup for tokens that I know about, like $HEIGHT. More...
 
const DictionarygetDictionary () const
 
SampleSourcegetRawSampleSource ()
 Implementation of SampleSource::getRawSampleSource(). More...
 
SampleSourcegetProcessedSampleSource ()
 Implementation of SampleSource::getProcessedSampleSource(). More...
 
const SampleTaggetRawSampleTag () const
 Convenience function to get my one-and-only raw SampleTag(). More...
 
virtual void addSampleTag (SampleTag *val) throw (nidas::util::InvalidParameterException)
 Add a SampleTag to this sensor. More...
 
virtual void removeSampleTag (SampleTag *val) throw ()
 Remove val from the list of SampleTags, and delete it. More...
 
std::list< const SampleTag * > getSampleTags () const
 Implementation of SampleSource::getSampleTags(). More...
 
std::list< SampleTag * > & getSampleTags ()
 Non-const method to get a list of non-const pointers to SampleTags. More...
 
SampleTagIterator getSampleTagIterator () const
 
void addSampleClient (SampleClient *c) throw ()
 Add a SampleClient to this SampleSource. More...
 
void removeSampleClient (SampleClient *c) throw ()
 Remove a SampleClient from this SampleSource This will also remove a SampleClient if it has been added with addSampleClientForTag(). More...
 
void addSampleClientForTag (SampleClient *client, const SampleTag *tag) throw ()
 Add a SampleClient to this SampleSource. More...
 
void removeSampleClientForTag (SampleClient *client, const SampleTag *tag) throw ()
 Remove a SampleClient for a given SampleTag from this SampleSource. More...
 
int getClientCount () const throw ()
 How many SampleClients are currently in my list. More...
 
void flush () throw ()
 Implementation of SampleClient::flush(). More...
 
void distributeRaw (const Sample *s) throw ()
 Distribute a raw sample which has been read from my file descriptor in real time. More...
 
const SampleStatsgetSampleStats () const
 
virtual int getReadFd () const
 
virtual int getWriteFd () const
 
virtual bool reopenOnIOException () const
 Whether to reopen this sensor on an IOException. More...
 
void setId (dsm_sample_id_t val)
 Set the various levels of the sensor identification. More...
 
void setSensorId (unsigned int val)
 
void setDSMId (unsigned int val)
 
dsm_sample_id_t getId () const
 Get the various levels of the samples identification. More...
 
unsigned int getDSMId () const
 
unsigned int getSensorId () const
 
virtual void setLatency (float val) throw (nidas::util::InvalidParameterException)
 Set desired latency, providing some control over the response time vs buffer efficiency tradeoff. More...
 
virtual float getLatency () const
 
virtual void setTimeoutMsecs (int val)
 Set the sensor timeout value in milliseconds. More...
 
virtual int getTimeoutMsecs () const
 
int getTimeoutCount () const
 
void incrementTimeoutCount ()
 
void addParameter (Parameter *val)
 Add a parameter to this DSMSensor. More...
 
const std::list< const
Parameter * > & 
getParameters () const
 Get list of parameters. More...
 
const ParametergetParameter (const std::string &name) const
 Fetch a parameter by name. More...
 
virtual IODevicebuildIODevice ()=0 throw (nidas::util::IOException)
 Factory method for an IODevice for this DSMSensor. More...
 
void setIODevice (IODevice *val)
 Set the IODevice for this sensor. More...
 
virtual SampleScannerbuildSampleScanner ()=0 throw (nidas::util::InvalidParameterException)
 Factory method for a SampleScanner for this DSMSensor. More...
 
void setSampleScanner (SampleScanner *val)
 Set the SampleScanner for this sensor. More...
 
virtual void validate () throw (nidas::util::InvalidParameterException)
 validate() is called once on a DSMSensor after it has been configured, but before open() or init() are called. More...
 
virtual void open (int flags) throw (nidas::util::IOException,nidas::util::InvalidParameterException)
 Open the device. More...
 
virtual void init () throw (nidas::util::InvalidParameterException)
 Initialize the DSMSensor. More...
 
virtual int getDefaultMode () const
 How do I want to be opened. More...
 
virtual void setDefaultMode (int val)
 
virtual size_t getBytesAvailable () const throw (nidas::util::IOException)
 How many bytes are available to read on this sensor. More...
 
virtual size_t read (void *buf, size_t len) throw (nidas::util::IOException)
 Read from the device (duh). More...
 
virtual size_t read (void *buf, size_t len, int msecTimeout) throw (nidas::util::IOException)
 Read from the device with a timeout. More...
 
virtual size_t write (const void *buf, size_t len) throw (nidas::util::IOException)
 Write to the device (duh). More...
 
virtual void ioctl (int request, void *buf, size_t len) throw (nidas::util::IOException)
 Perform an ioctl on the device. More...
 
virtual void close () throw (nidas::util::IOException)
 close my associated device. More...
 
virtual bool readSamples () throw (nidas::util::IOException)
 Read samples from my associated file descriptor, and distribute() them to my RawSampleClient's. More...
 
virtual SamplenextSample ()
 Extract the next sample from the buffer. More...
 
virtual SamplereadSample () throw (nidas::util::IOException)
 Return the next sample. More...
 
bool receive (const Sample *s) throw ()
 A DSMSensor can be used as a SampleClient, meaning it receives its own raw samples. More...
 
virtual bool process (const Sample *, std::list< const Sample * > &result)=0 throw ()
 Apply further necessary processing to a raw sample from this DSMSensor. More...
 
void printStatusHeader (std::ostream &ostr) throw ()
 
virtual void printStatus (std::ostream &) throw ()
 
void printStatusTrailer (std::ostream &ostr) throw ()
 
void calcStatistics (unsigned int periodUsec)
 Update the sensor sampling statistics. More...
 
unsigned int getMaxSampleLength () const
 
unsigned int getMinSampleLength () const
 
float getObservedSamplingRate () const
 
float getObservedDataRate () const
 
size_t getBadTimeTagCount () const
 
VariableIterator getVariableIterator () const
 
void fromDOMElement (const xercesc::DOMElement *) throw (nidas::util::InvalidParameterException)
 Initialize myself from a xercesc::DOMElement. More...
 
xercesc::DOMElement * toDOMParent (xercesc::DOMElement *parent, bool complete) const throw (xercesc::DOMException)
 Create a DOMElement and append it to the parent. More...
 
xercesc::DOMElement * toDOMElement (xercesc::DOMElement *node, bool complete) const throw (xercesc::DOMException)
 Add my content into a DOMElement. More...
 
virtual void setTypeName (const std::string &val)
 Set the type name of this sensor, e.g. More...
 
virtual const std::string & getTypeName (void) const
 Get the type name of this sensor. More...
 
bool getDuplicateIdOK () const
 getDuplicateIdOK will be true if it is OK for samples from this sensor to have identical IDs to samples from another sensor. More...
 
void setDuplicateIdOK (bool val)
 Set the duplicate ID attribute of this DSMSensor. More...
 
virtual bool getApplyVariableConversions () const
 
virtual void setApplyVariableConversions (bool val)
 
virtual int getDriverTimeTagUsecs () const
 
virtual void setDriverTimeTagUsecs (int val)
 
void addCalFile (CalFile *val)
 Add a calibration file for this DSMSensor. More...
 
const std::map< std::string,
CalFile * > & 
getCalFiles ()
 Return the collection of CalFiles, mapped by name. More...
 
CalFilegetCalFile (const std::string &name)
 Return a CalFile by its getName(). More...
 
void removeCalFiles ()
 Remove all CalFiles. More...
 
virtual void executeXmlRpc (XmlRpc::XmlRpcValue &, XmlRpc::XmlRpcValue &) throw ()
 Method invoked when the DSMEngineIntf XmlRpcServer receives a "SensorAction" request, with a "device" string matching the string that this DSMSensor registers via DSMEngine::registerSensorWithXmlRpc(string,DSMServer*). More...
 
virtual const std::list
< SampleTag * > & 
getNonConstSampleTags ()
 We'll allow derived classes and calibration applications to change the SampleTags, so this method returns a list of non-constant SampleTags. More...
 
bool allowOpen ()
 
bool readBuffer () throw (nidas::util::IOException)
 Read into my SampleScanner's buffer. More...
 
bool readBuffer (int msecTimeout) throw (nidas::util::IOException)
 Read into my SampleScanner's buffer. More...
 

Static Public Member Functions

static const std::string getClassName (const xercesc::DOMElement *node, const Project *project) throw (nidas::util::InvalidParameterException)
 Crawl through the DOM tree for a DSMSensor to find the class name - scanning the catalog entry if necessary. More...
 
static void deleteLooper ()
 
static const XMLCh * getNamespaceURI ()
 

Protected Member Functions

void clearBuffer ()
 Clear the internal buffer. More...
 
IODevicegetIODevice () const
 
SampleScannergetSampleScanner () const
 
void setFullSuffix (const std::string &val)
 
virtual int getLagUsecs () const
 Return the sampling lag for this sensor in microseconds. More...
 
virtual double getLagSecs () const
 Return the sampling lag for this sensor in seconds. More...
 
virtual void setLagSecs (double val)
 Set the sampling lag for this sensor in seconds. More...
 
void applyConversions (SampleTag *stag, SampleT< float > *outs, float *results=0)
 Perform variable conversions for the variables in stag whose values and sample time have been set in outs. More...
 
void trimUnparsed (SampleTag *stag, SampleT< float > *outs, int nparsed)
 Fill with floatNAN all the values past nparsed values in output sample outs, and trim the length of the sample to match the length of the variables in SampleTag stag. More...
 
VariableIndex findVariableIndex (const std::string &vprefix)
 Search all the sample tags for a variable whose name starts with the given prefix, and return it's index in the list of variables in the sample tag. More...
 

Static Protected Member Functions

static LoopergetLooper ()
 Fetch a pointer to a static instance of a Looper thread. More...
 

Protected Attributes

bool _openable
 Whether this sensor is allowed to be opened. More...
 

Private Member Functions

void addSampleTag (const SampleTag *val) throw (nidas::util::InvalidParameterException)
 DSMSensor does provide public support for SampleSource::addSampleTag(const SampleTag* val). More...
 
void removeSampleTag (const SampleTag *val) throw ()
 DSMSensor does not provide public support for SampleSource::removeSampleTag(const SampleTag* val) More...
 
 DSMSensor (const DSMSensor &x)
 
DSMSensoroperator= (const DSMSensor &x)
 

Private Attributes

std::string _devname
 
nidas::core::DSMSensor::MyDictionary _dictionary
 
IODevice_iodev
 
int _defaultMode
 
std::string _className
 Class name attribute of this sensor. More...
 
std::string _catalogName
 
std::string _suffix
 Sensor suffix, which is added to variable names. More...
 
std::string _heightString
 
std::string _depthString
 
float _height
 
std::string _fullSuffix
 Concatenation of sensor suffix, and the height or depth string. More...
 
std::string _location
 
SampleScanner_scanner
 
const DSMConfig_dsm
 
dsm_sample_id_t _id
 Id of this sensor. More...
 
SampleTag _rawSampleTag
 
std::list< SampleTag * > _sampleTags
 
SampleSourceSupport _rawSource
 
SampleSourceSupport _source
 
float _latency
 
std::map< std::string,
Parameter * > 
_parameters
 Map of parameters by name. More...
 
std::list< const Parameter * > _constParameters
 List of const pointers to Parameters for providing via getParameters(). More...
 
std::map< std::string, CalFile * > _calFiles
 
std::string _typeName
 
int _timeoutMsecs
 
bool _duplicateIdOK
 
bool _applyVariableConversions
 
int _driverTimeTagUsecs
 
int _nTimeouts
 
int _lag
 
int _station
 

Static Private Attributes

static bool zebra = false
 
static Looper_looper = 0
 
static nidas::util::Mutex _looperMutex
 

Detailed Description

DSMSensor provides the basic support for reading, processing and distributing samples from a sensor attached to a DSM.

Much of the implementation of a DSMSensor is delegated to an IODevice and a SampleScanner, which are built with virtual methods. DSMSensor can fill in its attributes from an XML DOM element with fromDOMElement(). One attribute of a DSMSensor is the system device name associated with this sensor, e.g. "/dev/xxx0". Once a device name has been set, then a user of this sensor can call open(), and then ioctl(), read() and write(), which are carried out by the IODevice.

SampleClient's can call addRawSampleClient()/removeRawSampleClient() if they want to receive raw Samples from this sensor during real-time operations.

SampleClient's can also call addSampleClient()/removeSampleClient() if they want to receive processed Samples from this sensor.

A common usage of a DSMSensor is to add it to a SensorHandler object with SensorHandler::addSensorPort(). When the SensorHandler::run method has determined that there is data available on a DSMSensor's file descriptor, it will then call the readSamples() method which reads the samples from the IODevice, and forwards the raw and processed samples to all associated SampleClient's of this DSMSensor.

Constructor & Destructor Documentation

DSMSensor::DSMSensor ( )

Constructor.

DSMSensor::~DSMSensor ( )
virtual
nidas::core::DSMSensor::DSMSensor ( const DSMSensor x)
private

Member Function Documentation

void DSMSensor::addCalFile ( CalFile val)

Add a calibration file for this DSMSensor.

After this method is finished, DSMSensor will own the pointer, and will delete it in the DSMSensor destructor.

References _calFiles, and nidas::core::CalFile::getName().

Referenced by fromDOMElement().

void DSMSensor::addParameter ( Parameter val)

Add a parameter to this DSMSensor.

DSMSensor will then own the pointer and will delete it in its destructor. If a Parameter exists with the same name, it will be replaced with the new Parameter.

References _constParameters, _parameters, and nidas::core::Parameter::getName().

Referenced by fromDOMElement().

void nidas::core::DSMSensor::addSampleClient ( SampleClient c)
throw (
)
inlinevirtual
void nidas::core::DSMSensor::addSampleClientForTag ( SampleClient client,
const SampleTag tag 
)
throw (
)
inlinevirtual

Add a SampleClient to this SampleSource.

The pointer to the SampleClient must remain valid, until after it is removed.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::addSampleClientForTag().

Referenced by nidas::core::SamplePipeline::addSampleClientForTag().

void DSMSensor::addSampleTag ( SampleTag val)
throw (nidas::util::InvalidParameterException
)
virtual

Add a SampleTag to this sensor.

DSMSensor will own the SampleTag. Throw an exception the DSMSensor cannot support the sample (bad rate, wrong number of variables, etc). Note that a SampleTag may be changed after it has been added. addSampleTag() is called when a sensor is initialized from the sensor catalog. The SampleTag may be modified later if it is overridden in the actual sensor entry. For this reason, it is wise to wait to scan the SampleTags of a DSMSensor in the validate(), init() or open() methods, which are invoked after fromDOMElement.

Reimplemented in nidas::dynld::isff::DAUSensor.

References GET_DSM_ID, GET_SHORT_ID, nidas::util::Logger::getInstance(), nidas::util::Logger::log(), and LOG_WARNING.

Referenced by nidas::dynld::isff::DAUSensor::addSampleTag(), nidas::dynld::RawSampleService::connect(), fromDOMElement(), and main().

void DSMSensor::addSampleTag ( const SampleTag val)
throw (nidas::util::InvalidParameterException
)
privatevirtual
bool nidas::core::DSMSensor::allowOpen ( )
inline

References _openable.

Referenced by nidas::core::DSMConfig::addSensor().

void DSMSensor::applyConversions ( SampleTag stag,
SampleT< float > *  outs,
float *  results = 0 
)
protected

Perform variable conversions for the variables in stag whose values and sample time have been set in outs.

This method can be used by subclasses to apply any variable conversions associated with the variables in the given SampleTag, using a general algorithm which loops over each value in each variable. The min/max value limits of a variable are applied also, so if a variable value is converted but lies outside the min/max range, the value is set to floatNAN. Typically this can be the last step applied to the output sample of a sensor's process() method, and note that the sample time must already be set in the output sample outs, since that time will be used to look up conversions in calibration files.

If results is non-null, then the converted values are written into results instead of overwriting the values in outs. This is used when one variable's results may be used to filter other variables without replacing the one variable's results. An example is the Ifan variable in the TRH WisardMote. results must point to enough memory to hold all of the values in outs, including for any Variables with multiple values (getLength() > 1).

See Variable::convert().

References nidas::core::Variable::convert(), fp, nidas::core::SampleT< DataT >::getDataPtr(), nidas::core::Sample::getTimeTag(), and nidas::core::SampleTag::getVariables().

virtual IODevice* nidas::core::DSMSensor::buildIODevice ( )
throw (nidas::util::IOException
)
pure virtual
virtual SampleScanner* nidas::core::DSMSensor::buildSampleScanner ( )
throw (nidas::util::InvalidParameterException
)
pure virtual
void nidas::core::DSMSensor::calcStatistics ( unsigned int  periodUsec)
inline

Update the sensor sampling statistics.

Should be called every periodUsec by a user of this sensor.

Parameters
periodUsecStatistics period.

References _scanner, and nidas::core::SampleScanner::calcStatistics().

Referenced by nidas::core::SensorHandler::calcStatistics().

void nidas::core::DSMSensor::clearBuffer ( )
inlineprotected
void DSMSensor::close ( )
throw (nidas::util::IOException
)
virtual
void DSMSensor::deleteLooper ( )
static

References _looper, and _looperMutex.

Referenced by nidas::core::DSMEngine::main().

void nidas::core::DSMSensor::distributeRaw ( const Sample s)
throw (
)
inline

Distribute a raw sample which has been read from my file descriptor in real time.

References _rawSource, and nidas::core::SampleSourceSupport::distribute().

virtual void nidas::core::DSMSensor::executeXmlRpc ( XmlRpc::XmlRpcValue &  ,
XmlRpc::XmlRpcValue &   
)
throw (
)
inlinevirtual

Method invoked when the DSMEngineIntf XmlRpcServer receives a "SensorAction" request, with a "device" string matching the string that this DSMSensor registers via DSMEngine::registerSensorWithXmlRpc(string,DSMServer*).

The default base class method does nothing.

Reimplemented in nidas::dynld::raf::DSMAnalogSensor, and nidas::dynld::raf::PSI9116_Sensor.

Referenced by nidas::core::DSMEngineIntf::SensorAction::execute().

std::string nidas::core::DSMSensor::expandString ( const std::string &  input) const
inline

Utility function to expand ${TOKEN} or $TOKEN fields in a string with their value from getTokenValue().

If curly brackets are not used, then the TOKEN should be delimited by a '/', a '.' or the end of string, e.g.: xxx/yyy/$ZZZ.dat

References _dictionary, and nidas::core::Dictionary::expandString().

Referenced by fromDOMElement(), and nidas::core::CalFile::open().

VariableIndex DSMSensor::findVariableIndex ( const std::string &  vprefix)
protected

Search all the sample tags for a variable whose name starts with the given prefix, and return it's index in the list of variables in the sample tag.

If no such variable is found, return -1.

References nidas::core::Variable::getName(), getSampleTags(), and nidas::core::SampleTag::getVariables().

void nidas::core::DSMSensor::flush ( )
throw (
)
inlinevirtual

Implementation of SampleClient::flush().

This is where a DSMSensor's process() method could send out any buffered results that might be ready.

Implements nidas::core::SampleClient.

Referenced by nidas::dynld::psql::PSQLProcessor::disconnect().

void DSMSensor::fromDOMElement ( const xercesc::DOMElement *  )
throw (nidas::util::InvalidParameterException
)
virtual

Initialize myself from a xercesc::DOMElement.

Implements nidas::core::DOMable.

Reimplemented in nidas::core::SerialSensor, nidas::dynld::raf::DSMArincSensor, nidas::dynld::raf::IRIGSensor, nidas::dynld::isff::Wind2D, nidas::dynld::raf::LamsSensor, and nidas::dynld::raf::Arinc_IRS.

References _dictionary, _rawSampleTag, _rawSource, _sampleTags, addCalFile(), addParameter(), nidas::core::SampleSourceSupport::addSampleTag(), addSampleTag(), nidas::core::Parameter::createParameter(), expandString(), nidas::core::SensorCatalog::find(), nidas::core::Parameter::FLOAT_PARAM, nidas::core::SampleTag::fromDOMElement(), nidas::core::CalFile::fromDOMElement(), getApplyVariableConversions(), nidas::core::XDOMElement::getAttributeValue(), getClassName(), getDefaultMode(), getDSMConfig(), nidas::core::SampleTag::getDSMId(), getFullSuffix(), nidas::core::SampleTag::getId(), getId(), nidas::util::Logger::getInstance(), nidas::core::Parameter::getLength(), nidas::core::Parameter::getName(), nidas::core::DSMConfig::getName(), nidas::core::XDOMAttr::getName(), getName(), nidas::core::Variable::getName(), nidas::core::XDOMElement::getNodeName(), nidas::core::Parameter::getNumericValue(), nidas::core::DSMConfig::getProject(), nidas::core::SampleTag::getRate(), nidas::core::SampleTag::getSampleId(), getSampleTags(), nidas::core::Project::getSensorCatalog(), getSensorId(), getSite(), nidas::core::SampleTag::getSpSId(), getStation(), getSuffix(), nidas::core::Parameter::getType(), getVariableIterator(), nidas::core::VariableIterator::hasNext(), nidas::core::Parameter::INT_PARAM, nidas::util::Logger::log(), LOG_WARNING, MSECS_PER_SEC, nidas::core::VariableIterator::next(), setApplyVariableConversions(), setCatalogName(), setClassName(), setDefaultMode(), setDepth(), setDeviceName(), nidas::core::SampleTag::setDSMConfig(), nidas::core::SampleTag::setDSMId(), nidas::core::SampleTag::setDSMSensor(), nidas::core::CalFile::setDSMSensor(), setDuplicateIdOK(), setHeight(), setLagSecs(), setLatency(), setLocation(), nidas::core::SampleTag::setRate(), nidas::core::SampleTag::setSampleId(), nidas::core::SampleTag::setSensorId(), setSensorId(), nidas::core::SampleTag::setStation(), setStation(), nidas::core::SampleTag::setSuffix(), setSuffix(), setTimeoutMsecs(), setTypeName(), and nidas::util::Exception::what().

Referenced by nidas::dynld::raf::DSMArincSensor::fromDOMElement(), nidas::core::CharacterSensor::fromDOMElement(), and nidas::core::DSMConfig::sensorFromDOMElement().

virtual bool nidas::core::DSMSensor::getApplyVariableConversions ( ) const
inlinevirtual
size_t nidas::core::DSMSensor::getBadTimeTagCount ( ) const
inline
virtual size_t nidas::core::DSMSensor::getBytesAvailable ( ) const
throw (nidas::util::IOException
)
inlinevirtual

How many bytes are available to read on this sensor.

See Also
IODevice::getBytesAvailable().

References _iodev, and nidas::core::IODevice::getBytesAvailable().

CalFile * DSMSensor::getCalFile ( const std::string &  name)

Return a CalFile by its getName().

Will return NULL if not found.

References _calFiles.

const std::map<std::string,CalFile*>& nidas::core::DSMSensor::getCalFiles ( )
inline

Return the collection of CalFiles, mapped by name.

References _calFiles.

Referenced by sensorTitle(), and PConfig::showCalFiles().

virtual const std::string& nidas::core::DSMSensor::getCatalogName ( ) const
inlinevirtual
virtual const std::string& nidas::core::DSMSensor::getClassName ( ) const
inlinevirtual
const string DSMSensor::getClassName ( const xercesc::DOMElement *  node,
const Project project 
)
throw (nidas::util::InvalidParameterException
)
static

Crawl through the DOM tree for a DSMSensor to find the class name - scanning the catalog entry if necessary.

References nidas::core::XDOMElement::getAttributeValue(), and getClassName().

int nidas::core::DSMSensor::getClientCount ( ) const
throw (
)
inlinevirtual

How many SampleClients are currently in my list.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::getClientCount().

virtual int nidas::core::DSMSensor::getDefaultMode ( ) const
inlinevirtual

How do I want to be opened.

The user can ignore it if they want to.

Returns
one of O_RDONLY, O_WRONLY or O_RDWR.

References _defaultMode.

Referenced by fromDOMElement(), and nidas::core::SensorOpener::run().

float nidas::core::DSMSensor::getDepth ( ) const
inline

Get sensor depth below ground.

Returns
Depth of sensor below ground, in meters.

References _height.

const std::string& nidas::core::DSMSensor::getDepthString ( ) const
inline

Get sensor depth below ground in a string.

Returns
Depth of sensor below ground, e.g. "5cm".

References _depthString.

Referenced by SampleCounter::collectMetadata().

virtual const std::string& nidas::core::DSMSensor::getDeviceName ( ) const
inlinevirtual
const Dictionary& nidas::core::DSMSensor::getDictionary ( ) const
inline

References _dictionary.

virtual int nidas::core::DSMSensor::getDriverTimeTagUsecs ( ) const
inlinevirtual
const DSMConfig* nidas::core::DSMSensor::getDSMConfig ( ) const
inline
unsigned int nidas::core::DSMSensor::getDSMId ( ) const
inline
const std::string & DSMSensor::getDSMName ( ) const

Fetch the DSM name.

References _dsm, and nidas::core::DSMConfig::getName().

Referenced by getName().

bool nidas::core::DSMSensor::getDuplicateIdOK ( ) const
inline

getDuplicateIdOK will be true if it is OK for samples from this sensor to have identical IDs to samples from another sensor.

That other sensor must also agree that dupicateIdOK are OK. This can be useful if one may not be certain of the device name, e.g. /dev/ttyUSB*, that the system will assign to a sensor may use, but there are identifiers in the data returned that allow one to sort things out. In general, getDuplicateID is false.

References _duplicateIdOK.

Referenced by nidas::core::Site::validate(), and nidas::core::DSMConfig::validateSensorAndSampleIds().

const std::string& nidas::core::DSMSensor::getFullSuffix ( ) const
inline

Full sensor suffix, the concatenation of the sensor suffix, if any, and the height or depth string, if any.

The full sensor suffix are words 2 and 3 in the dot-separated name: variable[.sensor][.height][.site]

References _fullSuffix.

Referenced by fromDOMElement().

float nidas::core::DSMSensor::getHeight ( ) const
inline

Get sensor height above ground.

Returns
Height of sensor above ground, in meters. Nan if unknown.

References _height.

const std::string& nidas::core::DSMSensor::getHeightString ( ) const
inline

Get sensor height above ground in a string.

Returns
Height of sensor above ground, e.g. "15m".

References _heightString.

Referenced by SampleCounter::collectMetadata(), nidas::core::DSMSensor::MyDictionary::getTokenValue(), ARLIngest::prepareHeaderIds(), SampleToDatabase::SampleToDatabase(), and PConfig::showCalFiles().

dsm_sample_id_t nidas::core::DSMSensor::getId ( ) const
inline
IODevice* nidas::core::DSMSensor::getIODevice ( ) const
inlineprotected

References _iodev.

virtual double nidas::core::DSMSensor::getLagSecs ( ) const
inlineprotectedvirtual

Return the sampling lag for this sensor in seconds.

See getLagUsecs().

References _lag, and USECS_PER_SEC.

virtual int nidas::core::DSMSensor::getLagUsecs ( ) const
inlineprotectedvirtual

Return the sampling lag for this sensor in microseconds.

A positive lag means one should adjust the sample time tags for this sensor earlier in time to achieve a better estimate of the actual time to be associated for each sample. Derived classes can use this method in their process method to correct for inherent, constant, sampling lags of a sensor. A fixed sample lag, in fractional seconds, can be set for a sensor in the XML:

<sensor>
<parameter name="lag" type = "float" value="0.186"/>
</sensor>

The DSMSensor::fromDOM() method parses this parameter and sets the value of the lag.

References _lag.

Referenced by nidas::core::CharacterSensor::adjustTimeTag().

virtual float nidas::core::DSMSensor::getLatency ( ) const
inlinevirtual

References _latency.

const std::string & DSMSensor::getLocation ( ) const

Location string.

A DSMConfig also has a Location. If the location has not been set for this DSMSensor, then the location of the DSMConfig will be returned.

References _dsm, _location, and nidas::core::DSMConfig::getLocation().

Referenced by SampleCounter::collectMetadata(), and printStatusHeader().

Looper * DSMSensor::getLooper ( )
staticprotected
unsigned int nidas::core::DSMSensor::getMaxSampleLength ( ) const
inline
unsigned int nidas::core::DSMSensor::getMinSampleLength ( ) const
inline
virtual std::string nidas::core::DSMSensor::getName ( ) const
inlinevirtual

Return a name that should fully identify this sensor.

This name could be used in informative messages. The returned name has this format: dsmName:deviceName.

References getDeviceName(), and getDSMName().

Referenced by nidas::core::SensorHandler::add(), nidas::core::SamplePipeline::addSampleClient(), nidas::core::SerialSensor::buildSampleScanner(), nidas::dynld::psql::PSQLProcessor::connect(), nidas::core::SamplePipeline::connect(), nidas::dynld::raf::CVIProcessor::connectSource(), nidas::dynld::raf::DSMArincSensor::fromDOMElement(), fromDOMElement(), nidas::core::SensorHandler::PolledDSMSensor::getName(), nidas::core::SensorHandler::incrementFullBufferReads(), nidas::dynld::raf::UHSAS_Serial::init(), nidas::dynld::WxtSensor::init(), nidas::core::CharacterSensor::init(), nidas::dynld::raf::DSMArincSensor::init(), nidas::dynld::raf::TwoD64_USB::init_parameters(), nidas::dynld::raf::TwoD_USB::init_parameters(), nidas::core::TimetagAdjuster::log(), printStatusHeader(), readSamples(), nidas::core::SensorOpener::run(), nidas::dynld::WxtSensor::scanSample(), nidas::dynld::raf::UHSAS_Serial::sendInitString(), nidas::core::DSMConfig::sensorFromDOMElement(), PConfig::showAll(), nidas::core::CharacterSensor::startPrompting(), nidas::core::CharacterSensor::stopPrompting(), nidas::dynld::raf::UDPArincSensor::validate(), nidas::dynld::A2DSensor::validate(), nidas::core::CharacterSensor::validate(), nidas::dynld::raf::SppSerial::validate(), nidas::core::Site::validate(), validate(), nidas::core::DSMConfig::validateSensorAndSampleIds(), nidas::core::CharacterSensor::validateSscanfs(), nidas::core::MessageStreamScanner::warnBackwardsStepTimeTag(), nidas::core::MessageStreamScanner::warnNonIncrTimeTag(), nidas::dynld::WxtSensor::wxtValidateSscanfs(), and nidas::dynld::raf::UHSAS_Serial::~UHSAS_Serial().

static const XMLCh* nidas::core::DOMable::getNamespaceURI ( )
inlinestaticinherited
virtual const std::list<SampleTag*>& nidas::core::DSMSensor::getNonConstSampleTags ( )
inlinevirtual

We'll allow derived classes and calibration applications to change the SampleTags, so this method returns a list of non-constant SampleTags.

References _sampleTags.

float nidas::core::DSMSensor::getObservedDataRate ( ) const
inline
float nidas::core::DSMSensor::getObservedSamplingRate ( ) const
inline
const Parameter * DSMSensor::getParameter ( const std::string &  name) const
const std::list<const Parameter*>& nidas::core::DSMSensor::getParameters ( ) const
inline

Get list of parameters.

References _constParameters.

Referenced by nidas::dynld::A2DSensor::validate().

SampleSource* nidas::core::DSMSensor::getProcessedSampleSource ( )
inlinevirtual

Implementation of SampleSource::getProcessedSampleSource().

Return the SampleSource for processed samples from this DSMSensor.

Implements nidas::core::SampleSource.

Referenced by nidas::dynld::RawSampleService::schedule().

SampleSource* nidas::core::DSMSensor::getRawSampleSource ( )
inlinevirtual

Implementation of SampleSource::getRawSampleSource().

Return the SampleSource for raw samples from this DSMSensor. A DSMSensor is only a SampleSource of raw samples when running in real-time, not during post-processing.

Implements nidas::core::SampleSource.

References _rawSource.

Referenced by nidas::core::RemoteSerialConnection::close(), and nidas::dynld::RawSampleService::schedule().

const SampleTag* nidas::core::DSMSensor::getRawSampleTag ( ) const
inline
virtual int nidas::core::DSMSensor::getReadFd ( ) const
inlinevirtual
SampleScanner* nidas::core::DSMSensor::getSampleScanner ( ) const
inlineprotected
const SampleStats& nidas::core::DSMSensor::getSampleStats ( ) const
inlinevirtual
SampleTagIterator nidas::core::DSMSensor::getSampleTagIterator ( ) const
inlinevirtual
std::list<const SampleTag*> nidas::core::DSMSensor::getSampleTags ( ) const
inlinevirtual
std::list<SampleTag*>& nidas::core::DSMSensor::getSampleTags ( )
inline

Non-const method to get a list of non-const pointers to SampleTags.

References _sampleTags.

unsigned int nidas::core::DSMSensor::getSensorId ( ) const
inline
const Site * DSMSensor::getSite ( ) const

What Site am I associated with?

References _dsm, and nidas::core::DSMConfig::getSite().

Referenced by SampleCounter::collectMetadata(), and fromDOMElement().

int nidas::core::DSMSensor::getStation ( ) const
inline

References _station.

Referenced by fromDOMElement().

const std::string& nidas::core::DSMSensor::getSuffix ( ) const
inline

Sensor suffix, which is added to variable names.

It is only necessary to have a sensor suffix to make variable names unique. For example, if there are multiple sensors at the same height, with common variable names, then one can use a sensor suffix to make unique names. The sensor suffix is the second dot-separated word in a variable name, where only the first word is required: variable[.sensor][.height][.site]

References _suffix.

Referenced by ExtractFast2D::countParticles(), fromDOMElement(), nidas::core::DSMSensor::MyDictionary::getTokenValue(), ExtractFast2D::run(), ExtractDMT::run(), sensorTitle(), setDepth(), and setHeight().

int nidas::core::DSMSensor::getTimeoutCount ( ) const
inline

References _nTimeouts.

Referenced by close().

virtual int nidas::core::DSMSensor::getTimeoutMsecs ( ) const
inlinevirtual
bool nidas::core::DSMSensor::getTokenValue ( const std::string &  token,
std::string &  value 
) const
inline

Implement a lookup for tokens that I know about, like $HEIGHT.

For other tokens, call getDSMConfig()->getTokenValue(token,value);

References _dictionary, and nidas::core::DSMSensor::MyDictionary::getTokenValue().

virtual const std::string& nidas::core::DSMSensor::getTypeName ( void  ) const
inlinevirtual

Get the type name of this sensor.

References _typeName.

VariableIterator DSMSensor::getVariableIterator ( ) const
virtual int nidas::core::DSMSensor::getWriteFd ( ) const
inlinevirtual

References _iodev, and nidas::core::IODevice::getWriteFd().

Referenced by main().

void nidas::core::DSMSensor::incrementTimeoutCount ( )
inline

References _nTimeouts.

Referenced by nidas::core::SensorOpener::run().

void DSMSensor::init ( )
throw (nidas::util::InvalidParameterException
)
virtual
virtual void nidas::core::DSMSensor::ioctl ( int  request,
void *  buf,
size_t  len 
)
throw (nidas::util::IOException
)
inlinevirtual

Perform an ioctl on the device.

request is an integer value which must be supported by the device. Normally this is a value from a header file for the device.

References _iodev, nidas::core::IODevice::ioctl(), and len.

virtual Sample* nidas::core::DSMSensor::nextSample ( )
inlinevirtual
void DSMSensor::open ( int  flags)
throw (nidas::util::IOException,
nidas::util::InvalidParameterException
)
virtual
DSMSensor& nidas::core::DSMSensor::operator= ( const DSMSensor x)
private
void DSMSensor::printStatus ( std::ostream &  ostr)
throw (
)
virtual
void DSMSensor::printStatusHeader ( std::ostream &  ostr)
throw (
)
void DSMSensor::printStatusTrailer ( std::ostream &  ostr)
throw (
)
virtual bool nidas::core::DSMSensor::process ( const Sample ,
std::list< const Sample * > &  result 
)
throw (
)
pure virtual

Apply further necessary processing to a raw sample from this DSMSensor.

Return the resultant sample(s) in result. The default implementation of process() simply puts the input Sample into result.

Implemented in nidas::core::CharacterSensor, nidas::dynld::isff::WisardMote, nidas::dynld::raf::DSMArincSensor, nidas::dynld::WxtSensor, nidas::dynld::raf::DSMAnalogSensor, nidas::dynld::raf::IRIGSensor, nidas::dynld::DSC_FreqCounter, nidas::dynld::raf::A2D_Serial, nidas::dynld::raf::UDPArincSensor, nidas::dynld::DSC_Event, nidas::dynld::DSC_PulseCounter, nidas::dynld::isff::CSAT3_Sonic, nidas::dynld::A2DSensor, nidas::dynld::raf::A2DBoardTempSensor, nidas::dynld::raf::VCSEL_Serial, nidas::dynld::raf::LamsSensor, nidas::dynld::raf::PPT_Serial, nidas::dynld::raf::SidsNetSensor, nidas::dynld::raf::CVI_LV_Input, nidas::dynld::raf::UHSAS_Serial, nidas::dynld::IEEE_Float, nidas::dynld::isff::CSI_IRGA_Sonic, nidas::dynld::raf::PSI9116_Sensor, nidas::dynld::GPS_NMEA_Serial, nidas::dynld::ParoSci_202BG_P, nidas::dynld::TSI_CPC3772, nidas::dynld::isff::MOSMote, nidas::dynld::ParoSci_202BG_T, nidas::dynld::GPS_Novatel_Serial, nidas::dynld::raf::LamsNetSensor, nidas::dynld::raf::TwoD_House, nidas::dynld::raf::PHIPS_UDP, nidas::dynld::raf::PIP_Serial, nidas::dynld::raf::BCPD_Serial, nidas::dynld::raf::CDP_Serial, nidas::dynld::raf::SPP100_Serial, nidas::dynld::raf::SPP200_Serial, nidas::dynld::raf::Watlow, nidas::dynld::raf::PIP_Image, nidas::dynld::raf::SPP300_Serial, nidas::dynld::raf::TwoD32_USB, and nidas::dynld::raf::TwoD64_USB.

virtual size_t nidas::core::DSMSensor::read ( void *  buf,
size_t  len 
)
throw (nidas::util::IOException
)
inlinevirtual

Read from the device (duh).

Behaves like the read(2) system call, without a file descriptor argument, and with an IOException.

References _iodev, len, and nidas::core::IODevice::read().

Referenced by main().

virtual size_t nidas::core::DSMSensor::read ( void *  buf,
size_t  len,
int  msecTimeout 
)
throw (nidas::util::IOException
)
inlinevirtual

Read from the device with a timeout.

References _iodev, len, and nidas::core::IODevice::read().

bool nidas::core::DSMSensor::readBuffer ( )
throw (nidas::util::IOException
)
inline
bool nidas::core::DSMSensor::readBuffer ( int  msecTimeout)
throw (nidas::util::IOException
)
inline

Read into my SampleScanner's buffer.

References _scanner, and nidas::core::SampleScanner::readBuffer().

Sample * DSMSensor::readSample ( )
throw (nidas::util::IOException
)
virtual

Return the next sample.

Buffer(s) will be read if necessary.

References nextSample(), and readBuffer().

Referenced by DmdA2dCk::run().

bool DSMSensor::readSamples ( )
throw (nidas::util::IOException
)
virtual

Read samples from my associated file descriptor, and distribute() them to my RawSampleClient's.

This method is called by SensorHander, when select/poll indicates that data is available on the file descriptor returned by getReadFd(). This is a convienence method which does a readBuffer() to read available data from the DSMSensor into a buffer, and then repeatedly calls nextSample() to extract all samples out of that buffer.

References _rawSource, nidas::core::SampleSourceSupport::distribute(), DLOG, getDSMConfig(), getDSMId(), nidas::core::Project::getName(), getName(), nidas::core::DSMConfig::getProject(), getSensorId(), nextSample(), and readBuffer().

Referenced by DmdA2dCk::run().

bool DSMSensor::receive ( const Sample s)
throw (
)
virtual

A DSMSensor can be used as a SampleClient, meaning it receives its own raw samples.

In real-time operations, a DSMSensor can be added as a raw SampleClient of itself, using addRawSampleClient(). In post-processing, a DSMSensor typically receives samples with its own sample id from a SampleSorter. receive() then applies further processing via the process() method.

Implements nidas::core::SampleClient.

void DSMSensor::removeCalFiles ( )

Remove all CalFiles.

References _calFiles.

Referenced by ~DSMSensor().

void nidas::core::DSMSensor::removeSampleClient ( SampleClient c)
throw (
)
inlinevirtual
void nidas::core::DSMSensor::removeSampleClientForTag ( SampleClient client,
const SampleTag tag 
)
throw (
)
inlinevirtual

Remove a SampleClient for a given SampleTag from this SampleSource.

The pointer to the SampleClient must remain valid, until after it is removed.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::removeSampleClientForTag().

Referenced by nidas::core::SamplePipeline::removeSampleClientForTag().

void DSMSensor::removeSampleTag ( SampleTag val)
throw (
)
virtual

Remove val from the list of SampleTags, and delete it.

void DSMSensor::removeSampleTag ( const SampleTag val)
throw (
)
privatevirtual
virtual bool nidas::core::DSMSensor::reopenOnIOException ( ) const
inlinevirtual

Whether to reopen this sensor on an IOException.

The base method returns true. Over-ride if a reopen should not be attempted.

virtual void nidas::core::DSMSensor::setApplyVariableConversions ( bool  val)
inlinevirtual

References _applyVariableConversions.

Referenced by fromDOMElement().

virtual void nidas::core::DSMSensor::setCatalogName ( const std::string &  val)
inlinevirtual

Set the name of the catalog entry for this sensor.

References _catalogName.

Referenced by fromDOMElement().

virtual void nidas::core::DSMSensor::setClassName ( const std::string &  val)
inlinevirtual

Set the class name.

In the usual usage this method is not used, and getClassName() is over-ridden in a derived class to return a constant string.

References _className.

Referenced by fromDOMElement().

virtual void nidas::core::DSMSensor::setDefaultMode ( int  val)
inlinevirtual
void DSMSensor::setDepth ( const std::string &  val)

Set sensor depth below ground via a string which is added to variable names.

Parameters
valString containing sensor below and units in meters (m) or centimeters(cm), e.g. "5cm". This depth string is added to all the variable names, with a "." separator, so that a variable "Tsoil" for this sensor becomes "Tsoil.5cm".

References _depthString, _height, _heightString, nidas::core::floatNAN, getSuffix(), and setFullSuffix().

Referenced by fromDOMElement().

void DSMSensor::setDepth ( float  val)

Set sensor depth below ground.

Parameters
valdepth below ground, in meters. The depth is converted to centimeters and is added to all the variable names, with a "." separator, so that a variable "Tsoil" for this sensor becomes "Tsoil.5cm".

References _depthString, _height, _heightString, getSuffix(), and setFullSuffix().

virtual void nidas::core::DSMSensor::setDeviceName ( const std::string &  val)
inlinevirtual

Set the name of the system device that the sensor is connected to.

Parameters
valName of device, e.g. "/dev/xxx0".

References _devname.

Referenced by fromDOMElement(), and main().

virtual void nidas::core::DSMSensor::setDriverTimeTagUsecs ( int  val)
inlinevirtual
void DSMSensor::setDSMConfig ( const DSMConfig val)
void nidas::core::DSMSensor::setDSMId ( unsigned int  val)
inline

References _id, and SET_DSM_ID.

Referenced by setDSMConfig().

void nidas::core::DSMSensor::setDuplicateIdOK ( bool  val)
inline

Set the duplicate ID attribute of this DSMSensor.

References _duplicateIdOK.

Referenced by fromDOMElement().

void nidas::core::DSMSensor::setFullSuffix ( const std::string &  val)
inlineprotected

References _fullSuffix.

Referenced by setDepth(), setHeight(), and setSuffix().

void DSMSensor::setHeight ( const std::string &  val)

Set sensor height above ground via a string which is added to variable names.

Parameters
valString containing sensor height and units in meters (m) or centimeters(cm), e.g. "15m". This height string is added to all the variable names, with a "." separator, so that a variable "u" for this sensor becomes "u.15m".

References _depthString, _height, _heightString, nidas::core::floatNAN, getSuffix(), and setFullSuffix().

Referenced by fromDOMElement().

void DSMSensor::setHeight ( float  val)

Set sensor height above ground.

Parameters
valheight above ground, in meters. The height is added to all the variable names, with a "." separator, so that a variable "u" for this sensor becomes "u.15m".

References _depthString, _height, _heightString, getSuffix(), and setFullSuffix().

void nidas::core::DSMSensor::setId ( dsm_sample_id_t  val)
inline

Set the various levels of the sensor identification.

A sensor ID is a 32-bit value comprised of four parts: 6-bit sample type id (not used by DSMSensor), 10-bit DSM id, and 16-bit sensor+sample ids.

References _id, and SET_FULL_ID.

void nidas::core::DSMSensor::setIODevice ( IODevice val)
inline

Set the IODevice for this sensor.

DSMSensor then owns the pointer and will delete it in its destructor.

References _iodev.

virtual void nidas::core::DSMSensor::setLagSecs ( double  val)
inlineprotectedvirtual

Set the sampling lag for this sensor in seconds.

This lag should then used to correct the timetags of the processed samples in the process() method of derived classes. Note that this lag is not used to alter the timetags of the raw samples. Raw samples are saved with the un-altered timetag that was determined at the moment they were sampled.

The lag is stored as a signed integer of microseconds, so lags should be between += 2147 seconds. No warning or exception is given if the value exceeds that limit. If your lag is greater than that I suggest you junk your sensor! A positive lag means one should adjust the sample time tags for this sensor earlier in time to achieve a better estimate of the actual time to be associated for each sample. A fixed sample lag, in fractional seconds, can be set for a sensor in the XML:

<parameter name="lag" type = "float" value="0.186"/>

The DSMSensor::fromDOM() method parses this parameter and calls this method to set the lag. process() methods in derived classes must apply this lag value. The DSMSensor base class does not adjust time tags of processed samples.

References _lag, and USECS_PER_SEC.

Referenced by fromDOMElement().

virtual void nidas::core::DSMSensor::setLatency ( float  val)
throw (nidas::util::InvalidParameterException
)
inlinevirtual

Set desired latency, providing some control over the response time vs buffer efficiency tradeoff.

Setting a latency of 1/10 sec means buffer data in the driver for a 1/10 sec, then send the data to user space. Generally it should be set before doing a sensor open().

Parameters
valLatency, in seconds.

References _latency.

Referenced by nidas::dynld::A2DSensor::A2DSensor(), fromDOMElement(), and nidas::dynld::A2DSensor::validate().

void nidas::core::DSMSensor::setLocation ( const std::string &  val)
inline

References _location.

Referenced by fromDOMElement().

void nidas::core::DSMSensor::setSampleScanner ( SampleScanner val)
inline

Set the SampleScanner for this sensor.

DSMSensor then owns the pointer and will delete it in its destructor.

References _scanner.

void nidas::core::DSMSensor::setSensorId ( unsigned int  val)
inline

References _id, and SET_SPS_ID.

Referenced by fromDOMElement().

void DSMSensor::setStation ( int  val)
void DSMSensor::setSuffix ( const std::string &  val)
virtual void nidas::core::DSMSensor::setTimeoutMsecs ( int  val)
inlinevirtual

Set the sensor timeout value in milliseconds.

A value of 0 means no timeout (e.g. infinite). If no data is received for this period, then the sensor is closed, and re-opened. For efficiency reasons, the system may not actually detect a sensor timeout of less than 1 second, so setting it to less than 1000 milliseconds will likely not reduce the time before a sensor timeout is detected.

References _timeoutMsecs.

Referenced by nidas::core::RemoteSerialConnection::close(), and fromDOMElement().

virtual void nidas::core::DSMSensor::setTypeName ( const std::string &  val)
inlinevirtual

Set the type name of this sensor, e.g.

: "ACME Model 99 Mach7 Particle Disambiguator". This is meant for descriptive purposes only, and is not meant to change the behavior of a sensor object.

References _typeName.

Referenced by fromDOMElement().

xercesc::DOMElement * DSMSensor::toDOMElement ( xercesc::DOMElement *  node,
bool  complete 
) const
throw (xercesc::DOMException
)
virtual

Add my content into a DOMElement.

Reimplemented from nidas::core::DOMable.

Referenced by toDOMParent().

xercesc::DOMElement * DSMSensor::toDOMParent ( xercesc::DOMElement *  parent,
bool  complete 
) const
throw (xercesc::DOMException
)
virtual
void DSMSensor::trimUnparsed ( SampleTag stag,
SampleT< float > *  outs,
int  nparsed 
)
protected

Fill with floatNAN all the values past nparsed values in output sample outs, and trim the length of the sample to match the length of the variables in SampleTag stag.

process() methods which support partial scans of messages can use this to finalize an output sample according to the SampleTag that was matched with it and the number of values parsed.

References nidas::core::floatNAN, fp, nidas::core::SampleT< DataT >::getDataPtr(), nidas::core::Variable::getLength(), nidas::core::SampleTag::getVariables(), and nidas::core::SampleT< DataT >::setDataLength().

void DSMSensor::validate ( )
throw (nidas::util::InvalidParameterException
)
virtual
virtual size_t nidas::core::DSMSensor::write ( const void *  buf,
size_t  len 
)
throw (nidas::util::IOException
)
inlinevirtual

Write to the device (duh).

Behaves like write(2) system call, without a file descriptor argument, and with an IOException.

References _iodev, len, and nidas::core::IODevice::write().

Referenced by nidas::dynld::raf::UHSAS_Serial::sendInitString(), and nidas::core::CharacterSensor::sendInitString().

Member Data Documentation

bool nidas::core::DSMSensor::_applyVariableConversions
private
std::map<std::string,CalFile*> nidas::core::DSMSensor::_calFiles
private
std::string nidas::core::DSMSensor::_catalogName
private

Referenced by getCatalogName(), and setCatalogName().

std::string nidas::core::DSMSensor::_className
private

Class name attribute of this sensor.

Only used here for informative messages.

Referenced by getClassName(), and setClassName().

std::list<const Parameter*> nidas::core::DSMSensor::_constParameters
private

List of const pointers to Parameters for providing via getParameters().

Referenced by addParameter(), and getParameters().

int nidas::core::DSMSensor::_defaultMode
private

Referenced by getDefaultMode(), and setDefaultMode().

std::string nidas::core::DSMSensor::_depthString
private
std::string nidas::core::DSMSensor::_devname
private

Referenced by getDeviceName(), and setDeviceName().

nidas::core::DSMSensor::MyDictionary nidas::core::DSMSensor::_dictionary
private
int nidas::core::DSMSensor::_driverTimeTagUsecs
private
const DSMConfig* nidas::core::DSMSensor::_dsm
private
bool nidas::core::DSMSensor::_duplicateIdOK
private
std::string nidas::core::DSMSensor::_fullSuffix
private

Concatenation of sensor suffix, and the height or depth string.

Referenced by getFullSuffix(), and setFullSuffix().

float nidas::core::DSMSensor::_height
private
std::string nidas::core::DSMSensor::_heightString
private
dsm_sample_id_t nidas::core::DSMSensor::_id
private

Id of this sensor.

Raw samples from this sensor will have this id.

Referenced by getDSMId(), getId(), getSensorId(), setDSMId(), setId(), and setSensorId().

IODevice* nidas::core::DSMSensor::_iodev
private
int nidas::core::DSMSensor::_lag
private

Referenced by getLagSecs(), getLagUsecs(), and setLagSecs().

float nidas::core::DSMSensor::_latency
private

Referenced by getLatency(), and setLatency().

std::string nidas::core::DSMSensor::_location
private

Referenced by getLocation(), and setLocation().

Looper * DSMSensor::_looper = 0
staticprivate

Referenced by deleteLooper(), and getLooper().

n_u::Mutex DSMSensor::_looperMutex
staticprivate

Referenced by deleteLooper(), and getLooper().

int nidas::core::DSMSensor::_nTimeouts
private
bool nidas::core::DSMSensor::_openable
protected

Whether this sensor is allowed to be opened.

Most cases the answer is yes/true. But certain sensors should not be opened due to implementation. e.g. DSMArincSensor when used in conjunction with the UDPArincSensor for then Alta ENET appliance.

The fallout from setting this to false is that the sensor will not be added to SensorHandler.

Referenced by allowOpen().

std::map<std::string,Parameter*> nidas::core::DSMSensor::_parameters
private

Map of parameters by name.

Referenced by addParameter(), getParameter(), and ~DSMSensor().

SampleTag nidas::core::DSMSensor::_rawSampleTag
private

Referenced by fromDOMElement(), and getRawSampleTag().

SampleSourceSupport nidas::core::DSMSensor::_rawSource
private
std::list<SampleTag*> nidas::core::DSMSensor::_sampleTags
private
SampleScanner* nidas::core::DSMSensor::_scanner
private
SampleSourceSupport nidas::core::DSMSensor::_source
private
int nidas::core::DSMSensor::_station
private

Referenced by getStation(), and setStation().

std::string nidas::core::DSMSensor::_suffix
private

Sensor suffix, which is added to variable names.

Referenced by getSuffix(), and setSuffix().

int nidas::core::DSMSensor::_timeoutMsecs
private

Referenced by getTimeoutMsecs(), and setTimeoutMsecs().

std::string nidas::core::DSMSensor::_typeName
private

Referenced by getTypeName(), and setTypeName().

bool DSMSensor::zebra = false
staticprivate

Referenced by printStatus(), and printStatusHeader().


The documentation for this class was generated from the following files: