26 #ifndef NIDAS_CORE_DSMSENSOR_H
27 #define NIDAS_CORE_DSMSENSOR_H
41 #include <xmlrpcpp/XmlRpc.h>
48 namespace nidas {
namespace core {
261 void setDepth(
const std::string& val);
586 throw(nidas::util::InvalidParameterException) = 0;
601 virtual void validate() throw(nidas::util::InvalidParameterException);
606 virtual
void open(
int flags)
607 throw(nidas::util::IOException,nidas::util::InvalidParameterException);
618 virtual
void init() throw(nidas::util::InvalidParameterException);
639 throw(nidas::util::IOException)
657 virtual size_t read(
void *buf,
size_t len,
int msecTimeout)
678 virtual void ioctl(
int request,
void* buf,
size_t len)
687 virtual void close() throw(nidas::util::IOException);
701 throw(nidas::util::IOException);
716 throw(nidas::util::IOException);
736 virtual
bool process(const
Sample*,std::list<const Sample*>& result)
790 static const std::string
getClassName(
const xercesc::DOMElement* node,
795 throw(nidas::util::InvalidParameterException);
798 toDOMParent(xercesc::DOMElement* parent,
bool complete) const
799 throw(xercesc::DOMException);
802 toDOMElement(xercesc::DOMElement* node,
bool complete) const
803 throw(xercesc::DOMException);
1110 bool getTokenValue(
const std::string& token, std::string& value)
const;
float getObservedDataRate() const
Definition: DSMSensor.h:771
void setLocation(const std::string &val)
Definition: DSMSensor.h:195
virtual void calcStatistics(unsigned int periodUsec)
Update the sensor sampling statistics: samples/sec, bytes/sec, min/max sample size, that can be accessed via getObservedSamplingRate(), getObservedDataRate() etc.
Definition: SampleScanner.cc:193
SampleScanner * _scanner
Definition: DSMSensor.h:1146
std::string _location
Definition: DSMSensor.h:1144
std::string _className
Class name attribute of this sensor.
Definition: DSMSensor.h:1124
void setDepth(const std::string &val)
Set sensor depth below ground via a string which is added to variable names.
Definition: DSMSensor.cc:232
std::list< SampleTag * > _sampleTags
Definition: DSMSensor.h:1158
A class for reading ASCII files containing a time series of calibration data.
Definition: CalFile.h:164
Interface for a Dictionary class, which can return a string value for a string token name...
Definition: Dictionary.h:38
void flush()
Implementation of SampleClient::flush().
Definition: DSMSensor.h:443
SampleScanner * getSampleScanner() const
Definition: DSMSensor.h:953
std::string _depthString
Definition: DSMSensor.h:1135
#define GET_DSM_ID(tid)
Definition: Sample.h:81
int _nTimeouts
Definition: DSMSensor.h:1192
virtual void ioctl(int request, void *buf, size_t len)
Perform an ioctl on the device.
Definition: DSMSensor.h:678
static void deleteLooper()
Definition: DSMSensor.cc:927
virtual bool reopenOnIOException() const
Whether to reopen this sensor on an IOException.
Definition: DSMSensor.h:476
virtual double getLagSecs() const
Return the sampling lag for this sensor in seconds.
Definition: DSMSensor.h:989
#define SET_DSM_ID(tid, val)
Definition: Sample.h:82
unsigned int dsm_sample_id_t
Definition: Sample.h:63
const SampleStats & getSampleStats() const
Definition: DSMSensor.h:454
MyDictionary & operator=(const MyDictionary &rhs)
Definition: DSMSensor.h:1102
virtual int getDriverTimeTagUsecs() const
Definition: DSMSensor.h:856
virtual void setDriverTimeTagUsecs(int val)
Definition: DSMSensor.h:861
void setId(dsm_sample_id_t val)
Set the various levels of the sensor identification.
Definition: DSMSensor.h:484
virtual std::string getName() const
Return a name that should fully identify this sensor.
Definition: DSMSensor.h:183
virtual int getWriteFd() const =0
The file descriptor used when writing to this sensor.
int _defaultMode
Definition: DSMSensor.h:1118
void printStatusTrailer(std::ostream &ostr)
Definition: DSMSensor.cc:518
virtual size_t write(const void *buf, size_t len)=0
Write to the sensor.
virtual const std::string & getCatalogName() const
Fetch the name of the catalog entry for this sensor.
Definition: DSMSensor.h:167
const DSMConfig * getDSMConfig() const
What DSMConfig am I associated with?
Definition: DSMSensor.h:108
A measurement site.
Definition: Site.h:49
#define GET_FULL_ID(tid)
Definition: Sample.h:78
virtual void setDefaultMode(int val)
Definition: DSMSensor.h:629
int getTimeoutCount() const
Definition: DSMSensor.h:534
bool _applyVariableConversions
Definition: DSMSensor.h:1188
float _height
Definition: DSMSensor.h:1137
Looper is a Thread that periodically loops, calling the LooperClient::looperNotify() method of Looper...
Definition: Looper.h:51
const std::list< const Parameter * > & getParameters() const
Get list of parameters.
Definition: DSMSensor.h:555
bool _openable
Whether this sensor is allowed to be opened.
Definition: DSMSensor.h:1078
virtual void setTypeName(const std::string &val)
Set the type name of this sensor, e.g.
Definition: DSMSensor.h:811
virtual void printStatus(std::ostream &)
Definition: DSMSensor.cc:522
float getObservedSamplingRate() const
Definition: SampleScanner.cc:208
bool _duplicateIdOK
Definition: DSMSensor.h:1186
std::string expandString(const std::string &input) const
Utility function to expand ${TOKEN} or $TOKEN fields in a string with their value from getTokenValue(...
Definition: DSMSensor.h:301
#define SET_FULL_ID(tid, val)
Definition: Sample.h:79
SampleSourceSupport _rawSource
Definition: DSMSensor.h:1160
SampleSource * getRawSampleSource()
Implementation of SampleSource::getRawSampleSource().
Definition: DSMSensor.h:326
Definition: DSMSensor.h:1098
Class that should include all that is configurable about a DSM.
Definition: DSMConfig.h:55
Pure virtual interface for a source of Samples.
Definition: SampleSource.h:48
Class for iterating over the Variables of a Project, Site, DSMConfig, DSMSensor, or SampleTag...
Definition: NidsIterators.h:286
void addSampleClientForTag(SampleClient *client, const SampleTag *tag)
Add a SampleClient to this SampleSource.
Definition: DSMSensor.h:416
void setSuffix(const std::string &val)
Definition: DSMSensor.cc:182
virtual Sample * readSample()
Return the next sample.
Definition: DSMSensor.cc:386
virtual void setDeviceName(const std::string &val)
Set the name of the system device that the sensor is connected to.
Definition: DSMSensor.h:123
bool getTokenValue(const std::string &token, std::string &value) const
Definition: DSMSensor.cc:458
size_t getBadTimeTagCount() const
Definition: DSMSensor.h:777
void setFullSuffix(const std::string &val)
Definition: DSMSensor.h:955
virtual const std::string & getDeviceName() const
Fetch the name of the system device that the sensor is connected to.
Definition: DSMSensor.h:132
unsigned int getMaxSampleLength() const
Definition: DSMSensor.h:753
void addParameter(Parameter *val)
Add a parameter to this DSMSensor.
Definition: DSMSensor.cc:299
DSMSensor * _sensor
Definition: DSMSensor.h:1112
dsm_sample_id_t _id
Id of this sensor.
Definition: DSMSensor.h:1154
virtual size_t read(void *buf, size_t len, int msecTimeout)
Read from the device with a timeout.
Definition: DSMSensor.h:657
Interface of an object that can be instantiated from a DOM element, via the fromDOMElement method...
Definition: DOMable.h:51
float getObservedDataRate() const
Definition: SampleScanner.cc:216
IODevice * _iodev
Definition: DSMSensor.h:1116
A source of samples.
Definition: SampleSourceSupport.h:47
xercesc::DOMElement * toDOMElement(xercesc::DOMElement *node, bool complete) const
Add my content into a DOMElement.
Definition: DSMSensor.cc:895
std::string expandString(const std::string &input) const
Utility function that scans a string for tokens like ${XXXX}, or $XXX followed by any characters from...
Definition: Dictionary.cc:33
void removeSampleClient(SampleClient *c)
Remove a SampleClient from this SampleSource This will also remove a SampleClient if it has been adde...
Definition: SampleSourceSupport.cc:88
float getObservedSamplingRate() const
Definition: DSMSensor.h:765
virtual IODevice * buildIODevice()=0
Factory method for an IODevice for this DSMSensor.
unsigned int getDSMId() const
Definition: DSMSensor.h:495
void setStation(int val)
Definition: DSMSensor.cc:172
void removeSampleClientForTag(SampleClient *c, const SampleTag *)
Add a SampleClient to this SampleSource.
Definition: SampleSourceSupport.cc:121
virtual size_t getBytesAvailable() const
How many bytes are available to read on this sensor.
Definition: DSMSensor.h:638
void addSampleClient(SampleClient *c)
Add a SampleClient to this SampleSource.
Definition: SampleSourceSupport.cc:80
Pure virtual interface of a client of Samples.
Definition: SampleClient.h:38
const DSMConfig * _dsm
Definition: DSMSensor.h:1148
void fromDOMElement(const xercesc::DOMElement *)
Initialize myself from a xercesc::DOMElement.
Definition: DSMSensor.cc:571
void setSensorId(unsigned int val)
Definition: DSMSensor.h:485
std::map< std::string, Parameter * > _parameters
Map of parameters by name.
Definition: DSMSensor.h:1172
dsm_sample_id_t getId() const
Get the various levels of the samples identification.
Definition: DSMSensor.h:494
void printStatusHeader(std::ostream &ostr)
Definition: DSMSensor.cc:492
bool readBuffer()
Read into my SampleScanner's buffer.
Definition: DSMSensor.h:921
float _latency
Definition: DSMSensor.h:1167
const std::string & getDepthString() const
Get sensor depth below ground in a string.
Definition: DSMSensor.h:277
virtual void setLagSecs(double val)
Set the sampling lag for this sensor in seconds.
Definition: DSMSensor.h:1019
const SampleTag * getRawSampleTag() const
Convenience function to get my one-and-only raw SampleTag().
Definition: DSMSensor.h:345
const SampleStats & getSampleStats() const
Definition: SampleSourceSupport.h:149
bool receive(const Sample *s)
A DSMSensor can be used as a SampleClient, meaning it receives its own raw samples.
Definition: DSMSensor.cc:397
virtual int getReadFd() const
Definition: DSMSensor.h:459
void removeSampleClient(SampleClient *c)
Remove a SampleClient from this SampleSource This will also remove a SampleClient if it has been adde...
Definition: DSMSensor.h:406
SampleSource * getProcessedSampleSource()
Implementation of SampleSource::getProcessedSampleSource().
Definition: DSMSensor.h:335
std::string _devname
Definition: DSMSensor.h:1096
MyDictionary(const MyDictionary &x)
Definition: DSMSensor.h:1101
static Looper * getLooper()
Fetch a pointer to a static instance of a Looper thread.
Definition: DSMSensor.cc:908
virtual float getLatency() const
Definition: DSMSensor.h:513
virtual ~DSMSensor()
Definition: DSMSensor.cc:81
virtual void setTimeoutMsecs(int val)
Set the sensor timeout value in milliseconds.
Definition: DSMSensor.h:524
const std::map< std::string, CalFile * > & getCalFiles()
Return the collection of CalFiles, mapped by name.
Definition: DSMSensor.h:876
std::list< const SampleTag * > getSampleTags() const
Implementation of SampleSource::getSampleTags().
Definition: DSMSensor.h:373
VariableIterator getVariableIterator() const
Definition: DSMSensor.cc:141
virtual void validate()
validate() is called once on a DSMSensor after it has been configured, but before open() or init() ar...
Definition: DSMSensor.cc:833
float getHeight() const
Get sensor height above ground.
Definition: DSMSensor.h:250
virtual void open(int flags)
Open the device.
Definition: DSMSensor.cc:334
virtual SampleScanner * buildSampleScanner()=0
Factory method for a SampleScanner for this DSMSensor.
std::string _catalogName
Definition: DSMSensor.h:1126
virtual void executeXmlRpc(XmlRpc::XmlRpcValue &, XmlRpc::XmlRpcValue &)
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*).
Definition: DSMSensor.h:897
virtual void setClassName(const std::string &val)
Set the class name.
Definition: DSMSensor.h:143
static nidas::util::Mutex _looperMutex
Definition: DSMSensor.h:1196
const Parameter * getParameter(const std::string &name) const
Fetch a parameter by name.
Definition: DSMSensor.cc:324
void setSampleScanner(SampleScanner *val)
Set the SampleScanner for this sensor.
Definition: DSMSensor.h:592
virtual void addSampleTag(SampleTag *val)
Add a SampleTag to this sensor.
Definition: DSMSensor.cc:103
bool readBuffer(int msecTimeout)
Read into my SampleScanner's buffer.
Definition: DSMSensor.h:931
void calcStatistics(unsigned int periodUsec)
Update the sensor sampling statistics.
Definition: DSMSensor.h:748
unsigned int getSensorId() const
Definition: DSMSensor.h:496
virtual bool getApplyVariableConversions() const
Definition: DSMSensor.h:846
int _station
Definition: DSMSensor.h:1200
std::string _suffix
Sensor suffix, which is added to variable names.
Definition: DSMSensor.h:1131
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.
Definition: DSMSensor.cc:848
virtual void setLatency(float val)
Set desired latency, providing some control over the response time vs buffer efficiency tradeoff...
Definition: DSMSensor.h:507
bool allowOpen()
Definition: DSMSensor.h:913
unsigned int getMaxSampleLength() const
Definition: SampleScanner.h:179
An interface to an IO device.
Definition: IODevice.h:41
const Dictionary & getDictionary() const
Definition: DSMSensor.h:315
void distributeRaw(const Sample *s)
Distribute a raw sample which has been read from my file descriptor in real time. ...
Definition: DSMSensor.h:449
SampleSourceSupport _source
Definition: DSMSensor.h:1162
virtual size_t read(void *buf, size_t len)=0
Read from the sensor.
virtual int getReadFd() const =0
The file descriptor used when reading from this sensor.
int len
Definition: sing.cc:934
static bool zebra
Definition: DSMSensor.h:1165
CalFile * getCalFile(const std::string &name)
Return a CalFile by its getName().
Definition: DSMSensor.cc:278
virtual int getWriteFd() const
Definition: DSMSensor.h:465
Interface to a data sample.
Definition: Sample.h:189
virtual void init()
Initialize the DSMSensor.
Definition: DSMSensor.cc:354
virtual void clearBuffer()
Definition: SampleScanner.cc:174
DSMSensor provides the basic support for reading, processing and distributing samples from a sensor a...
Definition: DSMSensor.h:87
unsigned int getMinSampleLength() const
Definition: DSMSensor.h:759
void addSampleClient(SampleClient *c)
Add a SampleClient to this SampleSource.
Definition: DSMSensor.h:396
const Site * getSite() const
What Site am I associated with?
Definition: DSMSensor.cc:149
Definition: Parameter.h:46
virtual void removeSampleTag(SampleTag *val)
Remove val from the list of SampleTags, and delete it.
Definition: DSMSensor.cc:120
virtual size_t read(void *buf, size_t len)
Read from the device (duh).
Definition: DSMSensor.h:648
const std::string & getSuffix() const
Sensor suffix, which is added to variable names.
Definition: DSMSensor.h:209
void removeCalFiles()
Remove all CalFiles.
Definition: DSMSensor.cc:287
std::map< std::string, CalFile * > _calFiles
Definition: DSMSensor.h:1180
bool getTokenValue(const std::string &token, std::string &value) const
Implement a lookup for tokens that I know about, like $HEIGHT.
Definition: DSMSensor.h:310
MyDictionary(DSMSensor *sensor)
Definition: DSMSensor.h:1100
float getDepth() const
Get sensor depth below ground.
Definition: DSMSensor.h:283
Definition: IOException.h:37
int _lag
Definition: DSMSensor.h:1198
Class for iterating over the SampleTags of a Project, Site, DSMConfig, or a SampleSource.
Definition: NidsIterators.h:217
void setHeight(const std::string &val)
Set sensor height above ground via a string which is added to variable names.
Definition: DSMSensor.cc:193
const std::string & getLocation() const
Location string.
Definition: DSMSensor.cc:167
std::string _typeName
Definition: DSMSensor.h:1182
int getClientCount() const
How many SampleClients are currently in my list.
Definition: DSMSensor.h:434
IODevice * getIODevice() const
Definition: DSMSensor.h:951
virtual int getTimeoutMsecs() const
Definition: DSMSensor.h:529
void setIODevice(IODevice *val)
Set the IODevice for this sensor.
Definition: DSMSensor.h:576
Class describing a group of variables that are sampled and handled together.
Definition: SampleTag.h:87
void incrementTimeoutCount()
Definition: DSMSensor.h:539
unsigned int getMinSampleLength() const
Definition: SampleScanner.h:182
A scanner of sample data.
Definition: SampleScanner.h:73
void distribute(const Sample *s)
Distribute a sample to my clients, calling the receive() method of each client, passing the const poi...
Definition: SampleSourceSupport.cc:141
void addSampleClientForTag(SampleClient *c, const SampleTag *)
Add a SampleClient to this SampleSource.
Definition: SampleSourceSupport.cc:101
unsigned int getBadTimeTagCount() const
Definition: SampleScanner.h:189
A VariableIndex associates a Variable pointer with it's index into it's SampleTag.
Definition: VariableIndex.h:51
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 t...
Definition: DSMSensor.cc:408
std::string _heightString
Definition: DSMSensor.h:1133
virtual Sample * nextSample()
Extract the next sample from the buffer.
Definition: DSMSensor.h:707
A source of samples.
Definition: SampleStats.h:41
virtual Sample * nextSample(DSMSensor *sensor)=0
Extract the next sample from the buffer.
xercesc::DOMElement * toDOMParent(xercesc::DOMElement *parent, bool complete) const
Create a DOMElement and append it to the parent.
Definition: DSMSensor.cc:875
nidas::core::DSMSensor::MyDictionary _dictionary
#define USECS_PER_SEC
Definition: ublox.cc:59
int _timeoutMsecs
Definition: DSMSensor.h:1184
virtual bool readSamples()
Read samples from my associated file descriptor, and distribute() them to my RawSampleClient's.
Definition: DSMSensor.cc:358
virtual size_t getBytesAvailable() const
Return how many bytes are available to read on this IODevice.
Definition: IODevice.h:114
const std::string & getFullSuffix() const
Full sensor suffix, the concatenation of the sensor suffix, if any, and the height or depth string...
Definition: DSMSensor.h:292
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.
Definition: DSMSensor.h:907
SampleTagIterator getSampleTagIterator() const
Definition: DSMSensor.h:386
void setDSMConfig(const DSMConfig *val)
Set the DSMConfig for this sensor.
Definition: DSMSensor.cc:97
std::list< const Parameter * > _constParameters
List of const pointers to Parameters for providing via getParameters().
Definition: DSMSensor.h:1178
void clearBuffer()
Clear the internal buffer.
Definition: DSMSensor.h:945
void setDSMId(unsigned int val)
Definition: DSMSensor.h:486
std::string _fullSuffix
Concatenation of sensor suffix, and the height or depth string.
Definition: DSMSensor.h:1142
virtual int getLagUsecs() const
Return the sampling lag for this sensor in microseconds.
Definition: DSMSensor.h:981
DSMSensor & operator=(const DSMSensor &x)
void removeSampleClientForTag(SampleClient *client, const SampleTag *tag)
Remove a SampleClient for a given SampleTag from this SampleSource.
Definition: DSMSensor.h:426
int getClientCount() const
How many SampleClients are currently in my list.
Definition: SampleSourceSupport.cc:136
#define GET_SPS_ID(tid)
Definition: Sample.h:84
static Looper * _looper
Definition: DSMSensor.h:1194
virtual void ioctl(int request, void *buf, size_t len)=0
DSMSensor()
Constructor.
Definition: DSMSensor.cc:56
virtual const std::string & getClassName() const
Fetch the class name.
Definition: DSMSensor.h:151
virtual void setCatalogName(const std::string &val)
Set the name of the catalog entry for this sensor.
Definition: DSMSensor.h:159
std::list< const SampleTag * > getSampleTags() const
What SampleTags am I a SampleSource for?
Definition: SampleSourceSupport.cc:54
bool getDuplicateIdOK() const
getDuplicateIdOK will be true if it is OK for samples from this sensor to have identical IDs to sampl...
Definition: DSMSensor.h:833
virtual const std::string & getTypeName(void) const
Get the type name of this sensor.
Definition: DSMSensor.h:819
A C++ wrapper for a POSIX mutex.
Definition: ThreadSupport.h:154
#define SET_SPS_ID(tid, val)
Definition: Sample.h:87
virtual int getDefaultMode() const
How do I want to be opened.
Definition: DSMSensor.h:624
std::list< SampleTag * > & getSampleTags()
Non-const method to get a list of non-const pointers to SampleTags.
Definition: DSMSensor.h:381
SampleTag _rawSampleTag
Definition: DSMSensor.h:1156
const std::string & getHeightString() const
Get sensor height above ground in a string.
Definition: DSMSensor.h:244
virtual size_t readBuffer(DSMSensor *sensor, bool &exhausted)
Read from the sensor into the internal buffer of this SampleScanner.
Definition: SampleScanner.cc:82
virtual bool process(const Sample *, std::list< const Sample * > &result)=0
Apply further necessary processing to a raw sample from this DSMSensor.
void addCalFile(CalFile *val)
Add a calibration file for this DSMSensor.
Definition: DSMSensor.cc:271
virtual void setApplyVariableConversions(bool val)
Definition: DSMSensor.h:851
virtual void close()
close my associated device.
Definition: DSMSensor.cc:347
void setDuplicateIdOK(bool val)
Set the duplicate ID attribute of this DSMSensor.
Definition: DSMSensor.h:841
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 ...
Definition: DSMSensor.cc:427
int _driverTimeTagUsecs
Definition: DSMSensor.h:1190
virtual size_t write(const void *buf, size_t len)
Write to the device (duh).
Definition: DSMSensor.h:667
int getStation() const
Definition: DSMSensor.h:213
const std::string & getDSMName() const
Fetch the DSM name.
Definition: DSMSensor.cc:158
Definition: InvalidParameterException.h:35